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-4GPT-3.5よりも高性能で、より複雑なタスクを実行可能。チャットに最適化されており、新モデルリリース後2週間で最新のモデルに更新されます。8192 トークン2021年9月まで
gpt-4-06132023年6月13日のgpt-4のスナップショットで、関数呼び出しデータ付き。gpt-4と異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。8192 トークン2021年9月まで
gpt-4-32kベースのgpt-4モデルと同等の性能を持ちつつ、コンテキストの長さが4倍です。最新のモデルイテレーションで更新されます。32768 トークン2021年9月まで
gpt-4-32k-06132023年6月13日のgpt-4-32のスナップショット。gpt-4-32kと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。32768 トークン2021年9月まで
gpt-3.5-turboGPT-3.5の最も高性能なモデルで、text-davinci-003のコストの10分の1でチャットに最適化されています。新しいモデルのリリース後2週間で最新のモデルに更新されます。4096 トークン2021年9月まで
gpt-3.5-turbo-16kgpt-3.5-turboと同等の性能を持ちつつ、コンテキストの長さが4倍です。16384 トークン2021年9月まで
gpt-3.5-turbo-06132023年6月13日のgpt-3.5-turboのスナップショット。gpt-3.5-turboと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。4096 トークン2021年9月まで
gpt-3.5-turbo-16k-06132023年6月13日のgpt-3.5-turbo-16kのスナップショット。gpt-3.5-turbo-16kと異なり、このモデルは更新されず、新バージョンリリース後3ヶ月で非推奨となります。16384 トークン2021年9月まで
text-davinci-003curie, babbage, adaモデルよりも高品質で、より長い出力、そして一貫した指示に従う能力を持っています。また、テキストの挿入などの追加機能もサポートしています。4097 トークン2021年6月まで
text-davinci-002text-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つの要素を入れます。

  1. role・・・「system」「user」のいずれか。
  2. content・・・チャットの中身

roleとは、chatGPTの役割のことです。ChatGPTのAPIにおいて、それぞれの役割は以下のようなものになります。

  • system・・・chatgptに人格を与える
  • user・・・ユーザーからの発話
  • assistant・・・gptからの返答
ChatGPT_AP_role_概念図

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'])