ChatGPT・APIの使い方【完全版】
ChatGPTのパワーを利用してパワフルなアプリケーションを作成しようとしていますね?OpenAIが公開したAPIを使えば簡単に実装することができます。
ここでは、Pythonを使ったChatGPTのAPIの使い方を一緒に見ていきます。
APIキーを取得しよう
まずは、ChatGPTのAPIを使う準備をしましょう。こちらのページから「secret key」を作成してください。詳しいやり方は別の記事で紹介しているので、参照してください。
ChatGPTのAPIの使い方
ChatGPTのさまざまなモデルを、APIを通して使用することができます。たとえば、ChatGPT-3.5-turboを使ってみましょう。
import openai
import json
openai.api_key = "Your API Key"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "ChatGPTのapiにおけるuser, assistant, systemなどのroleについて解説して"},
],
temperature=0.7
)
# JSONデータをPythonの辞書に変換します。
data = json.loads(str(response))
# 'choices'リストから最初のメッセージを取得します。
message = data['choices'][0]['message']['content']
print(message)
このコードを実行すると次のような出力が帰ってきます。
ChatGPTのAPIには、以下のような役割(role)があります。
1. User(ユーザー)
ユーザーは、APIを利用して会話を開始する人のことです。ユーザーは、システムからの応答を受け取り、その応答に基づいて返信をすることができます。
2. Assistant(アシスタント)
アシスタントは、APIを利用して自然言語での会話を行うための人工知能(AI)です。アシスタントは、ユーザーから送信されたメッセージを解釈し、適切な返信を生成することができます。
3. System(システム)
システムは、チャットボットに必要なバックエンドシステムのことです。システムは、アシスタントが利用するデータベースやAPI、またはその他のサードパーティのシステムと連携し、必要な情報を収集してアシスタントに提供する役割を持ちます。
これらの役割は、APIの構造化された会話フローを実現するために必要です。ユーザーがメッセージを送信すると、アシスタントがそれを解釈し、システムから必要な情報を受け取って適切な返信を生成することができます。このように、APIはより効果的な会話の実現を可能にします。
それでは詳しくみていきましょう。
1. モデルを指定する
最初に指定するパラメーターは”model”です。
model="gpt-3.5-turbo"
ChatGPTにはさまざまなモデルがあります。目的に応じて最適なモデルを選択してください。モデルによってトークンあたりの値段も変わってくるので注意してください。(値段についてはこちら)
モデル名 | 説明 | 最大トークン数 | トレーニングデータ |
---|---|---|---|
gpt-4 | GPT-3.5よりも高性能で、より複雑なタスクを実行可能。チャットに最適化されており、新モデルリリース後2週間で最新のモデルに更新されます。 | 8192 トークン | 2021年9月まで |
gpt-4-0613 | 2023年6月13日のgpt-4のスナップショットで、関数呼び出しデータ付き。gpt-4と異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。 | 8192 トークン | 2021年9月まで |
gpt-4-32k | ベースのgpt-4モデルと同等の性能を持ちつつ、コンテキストの長さが4倍です。最新のモデルイテレーションで更新されます。 | 32768 トークン | 2021年9月まで |
gpt-4-32k-0613 | 2023年6月13日のgpt-4-32のスナップショット。gpt-4-32kと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。 | 32768 トークン | 2021年9月まで |
gpt-3.5-turbo | GPT-3.5の最も高性能なモデルで、text-davinci-003のコストの10分の1でチャットに最適化されています。新しいモデルのリリース後2週間で最新のモデルに更新されます。 | 4096 トークン | 2021年9月まで |
gpt-3.5-turbo-16k | gpt-3.5-turboと同等の性能を持ちつつ、コンテキストの長さが4倍です。 | 16384 トークン | 2021年9月まで |
gpt-3.5-turbo-0613 | 2023年6月13日のgpt-3.5-turboのスナップショット。gpt-3.5-turboと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。 | 4096 トークン | 2021年9月まで |
gpt-3.5-turbo-16k-0613 | 2023年6月13日のgpt-3.5-turbo-16kのスナップショット。gpt-3.5-turbo-16kと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。 | 16384 トークン | 2021年9月まで |
text-davinci-003 | curie, babbage, adaモデルよりも高品質で、より長い出力、そして一貫した指示に従う能力を持っています。また、テキストの挿入などの追加機能もサポートしています。 | 4097 トークン | 2021年6月まで |
text-davinci-002 | text-davinci-003と同等の性能を持ちつつ、強化学習ではなく監督付き微調整で訓練されています。 | 4097 トークン | 2021年6月まで |
code-davinci-002 | コード補完タスクに最適化されています。 | 8001 トークン | 2021年6月まで |
2. メッセージを指定する
次に設定するパラメータは”message”です。
messages=[
{"role": "user", "content": "ChatGPTのapiにおけるuser, assistant, systemなどのroleについて解説して"},
]
messageは基本的に2つの要素を入れます。
- role・・・「system」「user」のいずれか。
- content・・・チャットの中身
roleとは、chatGPTの役割のことです。ChatGPTのAPIにおいて、それぞれの役割は以下のようなものになります。
- system・・・chatgptに人格を与える
- user・・・ユーザーからの発話
- assistant・・・gptからの返答
systemでAIの設定を記述でき、userで問いかけます。たとえば語尾に「でちゅ」という設定で「こんにちは」と問いかけるコードを記述してみましょう。
" messages=[{"role": "system", "content": "語尾は「でちゅ」"}, {"role": "user", "content": "こんにちは!"}],
すると、次のようなレスポンスが返ってきます。
こんにちはでちゅ!お元気でしょうか?
temperatureを指定する
temperature=0.7
temperature
パラメータは、OpenAIのモデルが生成する出力のランダム性や多様性を調整するために使用されます。
具体的には、temperature
が高い(1に近い)場合、モデルはさまざまな出力を生成します。これに対して、temperature
が低い(0に近い)場合、モデルはより確定的な出力を生成します。
言い換えると、temperature
が高ければ高いほど出力の多様性と予測の不確定性が増し、temperature
が低ければ低いほど出力の一貫性と予測の確定性が増します。
たとえば、temperature
が0.7の場合、モデルはある程度の多様性を持った出力を生成します。これは、モデルが様々な可能性を考慮する一方で、一部の出力が他の出力よりも優先されることを示しています。
なお、適切なtemperature
パラメータの値は、解決しようとする問題やアプリケーションの要件によります。一部のケースでは、出力の多様性が求められるかもしれません。他のケースでは、より一貫した、または確定的な出力が求められるかもしれません。
ChatGPTのAPIを使ってアプリケーションを作ってみる
たとえば、Pythonを使ってアプリケーションを作るとき、2通りのコーディングの仕方があります。エンドポイントを利用することと、OpenAIの公式ライブラリを使うことです。
エンドポイントを利用する
import requests
import json
api_url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_OPENAI_API_KEY"
}
data = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello, who are you?"}]
}
response = requests.post(api_url, headers=headers, data=json.dumps(data))
print(response.json())
OpenAIの公式ライブラリを利用する
import openai
openai.api_key = "YOUR_API_KEY"
response = openai.ChatCompletion.create(
model = "gpt-3.5-turbo",
temperature = 0.2,
max_tokens = 1000,
messages = [
{"role": "user", "content": "Hello!"}
]
)
print(response['choices'][0]['message']['content'])