ChatGPT API 研究

Web 版の ChatGPT を普段使用していて、API 版の方で何か面白いことができないか探る為、サイトや書籍を見ながら環境構築、サンプルコードの作成実行などを行ってみました。

研究した際のメモを下記に記します。

# ChatGPT API のモデル

* gpt-3.5-turbo
* gpt-4-turbo
* gpt-4o

など、応答速度や料金と相談し、選択。

# 学習データ

ブラウザ版では、ユーザーが入力したデータが、学習データとして利用される可能性がある。
API 版は、学習データとして利用されることは無いが、不正利用などの監視・調査を目的として30日間保存される。
機密情報を送らないよう気を付けたいところ。

# 用語

#### 「プロンプト」
ChatGPT に対する質問や指示

#### 「トークン」
単語を分割する単位を指し、入力値の処理に使用される。
英語の場合、1,000トークン＝約750単語(1トークン＝約0.75単語)
日本語の場合、1,000トークン＝約773単語(1トークン＝約0.77単語)

OpenAI 提供 Tokenizer というツールで検証可能
https://platform.openai.com/tokenizer

#### 「パラメータ」
挙動をコントロールする為の設定値

例えば "temperature" というパラメータは、ランダム性を制御、数値が高いとランダム性が上がり、0 だと同じ質問に対して同じ回答をするようになる。
他にも、生成される回答の数を指定する "n" や、生成する文章の長さを指定する "max_tokens" などが用意されている。

# 無料試用

$5.00 ぶん

# API キー作成

#### 1. OpenAI のアカウントを作成する

https://platform.openai.com/signup

#### 2. OpenAI の API キーを作成する

https://platform.openai.com/api-keys

※ もし、キーが漏洩した場合、最終利用履歴 (LAST USED) を確認し、新たなキーを作成、古いキーを削除すること
※ 電話番号が必要になる
→ 今のところ電話番号 1 件につき 2 アカウントまで作成することが可能らしい

#### 3. 取得した API キーを使って、アプリケーションと ChatGPT API を連携する


# 環境構築

今回は Python を利用する。嫌いだけど。。

#### 1. Python のインストール

https://www.python.org/downloads/

python-3.12.3-amd64.exe
python-3.12.3-macos11.pkg

#### 2. インストーラーを起動したら、「Add python.exe to PATH」にチェックを入れて進めること

再起動は不要なよう。VSCode のターミナル機能とかは要再起動だけど

#### 3. コマンドプロンプト(ターミナル)でインストールの確認
```
> python -V
```

Python 3.12.3

#### 4. OpenAI のライブラリのインストール
```
> pip install openai
```
「Successfully installed ～ openai-1.7.0 ～」と出力されれば、インストール完了

https://pypi.org/project/openai/
pip は、Python ライブラリの管理ツールである
これを使えば、必要な Python ライブラリをインターネットからダウンロードしたり、アップデートしたりすることが可能
上記(環境構築) 1 でインストールされた Python に含まれているはず

#### 5. コマンドプロンプト(ターミナル)でインストールの確認
```
> openai -V
```
openai 1.24.0

#### 6. 環境変数の追加

Windows 環境の場合

ユーザー環境変数(U)に
```
変数名(N):
	OPENAI_API_KEY
変数値(V):
	上記(API キー作成) 2 で作成した OpenAI の API キーを指定
```
Mac 環境の場合 … 動作未確認

下記コマンドをターミナルから実行

bash の場合
```
echo 'export OPENAI_API_KEY="上記(API キー作成) 2 で作成したOpenAI の API キーを指定"' >> ~/.bash_profile
source ~/.bash_profile
```
zsh の場合
```
echo 'export OPENAI_API_KEY="上記(API キー作成) 2 で作成したOpenAI の API キーを指定"' >> ~/.zshrc
source ~/.zshrc
```
#### 7. コマンドプロンプト(ターミナル)を再起動

# サンプルコード

#### ソースコード (Chat Completion API v1.x.x 以降向け)
chatgpt_test.py
```
import os
from openai import OpenAI

client = OpenAI(
	api_key = os.environ.get( "OPENAI_API_KEY" )
)

response = client.chat.completions.create(
	model = "gpt-3.5-turbo",
	messages = [
		{
			"role": "user",
			"content": "Pythonについて教えてください"
		}
	]
)

print( response.model_dump_json( indent = 2 ) )
#print( response.choices[ 0 ].message.content )
```
実行

Windows の場合
```
> python chatgpt_test.py
```
Mac の場合
```
> python3 chatgpt_test.py
```
実行結果ログ
```
{
	"id": "chatcmpl-8fkn9JT1jurX11skGeD08ocSbk1Go",
	"choices": [
		{
			"finish_reason": "stop",
			"index": 0,
			"logprobs": null,
			"message": {
				"content": "Pythonは、インタプリタ型のプログラミング言語です。Pythonは、シンプルで読みやすい構文を持ち、実行しやすく、さまざまな用途に利用されます。\n\nPythonの特徴の一つは、コードのブロックをインデントで表現することです。このため、他のプログラミング言語に比べて読みやすさが高く、入門者にも理解しやすい言語となっています。\n\nPythonはオープンソースのプログラミング言語であり、多くのライブラリやフレームワークが利用可能です。これにより、科学計算やデータ分析、ウェブアプリケーション開発など、さまざまな分野で活用することができます。\n\nまた、Pythonはプラットフォームに依存せず、Windows、Mac、Linuxなど、さまざまな環境で動作するため、広範な開発環境で利用可能です。\n\nPythonの文法は非常にシンプルで直感的なため、初心者でも扱いやすい言語です。Pythonを使用することで、効率的にプログラミングを行い、複雑な問題を解決することができます。\n\nさらに、Pythonは豊富なドキュメンテーションやコミュニティがあり、情報を得ることが容易です。これにより、問題が発生した場合や学習する際にもサポートが充実しています。\n\nPythonは非常に人気があり、大規模な企業でも使用されています。そのため、Pythonのスキルを習得することで、求人市場でも有利になる可能性があります。\n\n以上がPythonの基本的な特徴です。Pythonの実際の使い方や詳細な機能については、別の質問に対して具体的に回答することができます。",
				"role": "assistant",
				"function_call": null,
				"tool_calls": null
			}
		}
	],
	"created": 1704962007,
	"model": "gpt-3.5-turbo-0613",
	"object": "chat.completion",
	"system_fingerprint": null,
	"usage": {
		"completion_tokens": 584,
		"prompt_tokens": 18,
		"total_tokens": 602
	}
}
```

# リクエストパラメータ

#### model (必須) … 文字列型

使用するモデルを指定する
```
"gpt-3.5-turbo"
"gpt-3.5-turbo-16k"
"gpt-4-turbo"
"gpt-4"
"gpt-4-32k"
```
https://platform.openai.com/docs/models

#### messages (必須) … 配列型

ChatGPT に文章を生成させる際の指示を記述する
一度に同じ指示を複数記述することも可能
```
"role":
	"system"
        ChatGPT の振る舞いを設定
            例）
                "content": "あなたは優秀なパイロットです"
                "content": "あなたは世界中で有名なミュージシャンです"
    "user"
        ChatGPT に対しての指示や質問を設定
            例）
                "content": "Pythonについて教えてください"
    "assistant"
        ChatGPT からの過去の応答や応答例を設定
            例）
                "content": "Pythonのインデントによるブロック表現は分かりづらいです"
```

#### temperature … 数値型 (0～2)

生成されるテキストの「創造性」や「ランダム性」のパラメータ
値が低いと真面目で実用的なものになり、値が高いとランダムなものとなる
下記 top_p との併用は非推奨
デフォルト：1

#### top_p … 数値型 (0～1)

生成されるテキストの「多様性」と「一貫性」のパラメータ
値が低いとより可能性の高い文章を選び、値が高いと色々な文章が選ばれる
上記 temperature との併用は非推奨
デフォルト：1

#### n … 整数型

回答の数を指定するパラメータ
デフォルト：1

#### stream … 論理型

回答をリアルタイムに返すかどうか指定するパラメータ
true にすると文章を一部づつ結果を返し、false にすると全ての文章を生成してから一度に結果を返す
デフォルト：false

#### stop … 文字列／配列型

生成されるテキスト内に、指定した文字列が現れたところで出力を止める為のパラメータ
最大 4 つまで指定可能
デフォルト：null

#### max_tokens … 整数型

回答の長さを制限する為のパラメータ
デフォルト：4,096 または 8,192

#### presence_penalty … 数値型 (-2～2)

回答の同じ単語やフレーズの繰り返しを制御するパラメータ
値が低いと既出の単語やフレーズが繰り返されやすく、値が高いと既出の単語やフレーズを避けるようになる
デフォルト：0

#### frequency_penalty … 数値型 (-2～2)

上記 presence_penalty と同様、回答の同じ単語やフレーズの繰り返しを制御するパラメータ (イマイチ違いが不明)
値が低いと同じ単語やフレーズが繰り返されやすく、値が高いと同じ単語やフレーズを避けるようになる
デフォルト：0

#### logit_bias … map型

特定の単語やフレーズの出現する確率を制御するパラメータ
「{"非出現":-100,"多出現":100}」
デフォルト：null

#### user … 文字列型

エンドユーザーを一意に識別する為の情報
デフォルト：無し


# クレジットカード支払いの設定および上限金額の設定

無料試用 $5.00 ぶんが無くなったら、下記 429 エラーが出るはずなので、そしたらこの設定を行う

#### 1. 課金設定(Billing settings)

https://platform.openai.com/account/billing/overview

#### 2. What best describes you? で

個人なら「Individual」
法人なら「Company」
を選択

#### 3. Add payment details でクレジットカード情報や個人情報を入力

上限金額の指定
等の手順にあるはず。未確認


# 確認したエラー

#### インストールした openai のバージョンとソースコードのバージョンが合わないと出るエラー
```
Traceback (most recent call last):
File "{作業ディレクトリ}\chatgpt_test.py", line 6, in <module>
response = openai.ChatCompletion.create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\{ユーザー名}\AppData\Local\Programs\Python\Python312\Lib\site-packages\openai\lib\_old_api.py", line 39, in __call__
raise APIRemovedInV1(symbol=self._symbol)
openai.lib._old_api.APIRemovedInV1:

You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface.

Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`

A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742
```
#### 無料試用の残りが無くなった場合に出るエラー
```
openai.RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
```

# ChatGPT でできないこと

ユーザープライバシーとセキュリティの保護のため、およびOpenAIの利用ポリシーに基づいて、ウェブブラウジングや外部サイトのスクレイピングを行うことはできません。

学習段階で多くのデータを使用していますが、それらのデータは特定のソースからのものではなく、個別のウェブサイトや外部ソースの情報を取得することはありません。

学習データに基づいて機能する言語モデルであり、2022年1月までのデータで訓練されています。
そのため、最新の情報やリアルタイムのデータを提供することはできませんし、個別の場所や日付に基づいた具体的な情報もわかりません。

また、外部のデータベースやリアルタイムな検索ができないため、特定の場所や最新の情報に関する質問には限定的な回答しかできません。

物理的な動作や機械的な作業を実行することはできません。
例えば、ファイルのアップロードやダウンロード、プログラムの実行などが含まれます。

対話の文脈を理解するために以前の発言を記憶しますが、個別のユーザー情報を取得し、保持することはありません。
プライバシー保護のためにも、ユーザーの個人的な情報は取得・保存されません。


# 参考サイトや書籍など

API reference
https://platform.openai.com/docs/api-reference/introduction?lang=python

Pricing
https://openai.com/api/pricing/

The official Python library for the openai API
https://pypi.org/project/openai/

Azure OpenAI利用の方必見！最新OpenAI Python APIライブラリ v1.x
https://qiita.com/hiromitsu_iwasaki/items/5e70ad81dcd7c9a7261f

APIを使ってChatGPTと会話してみよう！
https://zenn.dev/tsuzukia/articles/df414098fcd5bd

ChatGPTと会話できるAlexaスキルにFunction callingを追加してみた
https://zenn.dev/sikkim/articles/a0f7e37bb3947d

Alexaスキル用のチャットボットを8秒以内に応答させたい
https://zenn.dev/sikkim/articles/a3f6633428998e

ChatGPT API×Pythonで始める対話型AI実装入門（GPT-3.5&GPT-4 対応）
https://book.impress.co.jp/books/1123101013

(2024/06 頃執筆)

***

株式会社ボトルキューブでは ChatGPT API を使ったお仕事を募集中です。
お問い合わせは下記リンク先のフォームからご連絡ください。
https://www.bottlecube.co.jp/contact