見出し画像

ChatGPT API の使い方

「OpenAI」の 記事「Chat completions」が面白かったので、軽くまとめました。

1. ChatGPT API

「ChatGPT」は、OpenAIの最も先進的な言語モデルである「gpt-3.5-turbo」を搭載しています。「OpenAI API」から「gpt-3.5-turbo」を使用して独自アプリケーションを作成できます。

・メールや文章のドラフト
・Pythonコードの生成
・一連の文書に関する質問応答
・会話型エージェントの作成
・ソフトウェアへの自然言語インターフェースの追加
・さまざまな科目の家庭教師
・言語の翻訳
・ビデオゲームのキャラクターのシミュレート

2. 使用料金

使用料金は、以下で確認できます。

3. Colab での実行

「gpt-3.5-turbo」は、マルチターンの会話を簡単にするように設計されていますが、会話のないシングルターンタスクでも役立ちます。

Google Colabでの実行手順は、次のとおりです。

(1) パッケージのインストール。

# パッケージのインストール
!pip install openai

(2) 環境変数の準備。
以下のコードの <OpenAI_APIのトークン> にはOpenAI APIのトークンを指定します。(有料)

import os
os.environ["OPENAI_API_KEY"] = "<OpenAI_APIのトークン>"

(3) ChatGPT APIの呼び出し。

import openai

response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "あなたは役に立つアシスタントです。"},
    {"role": "user", "content": "2021年の日本シリーズで優勝したのは?"},
    {"role": "assistant", "content": "2021年の日本シリーズで優勝したのは、東京ヤクルトスワローズです。"},
    {"role": "user", "content": "その球団の本拠地はどこですか?"}
  ]
)
print(response["choices"][0]["message"]["content"])
東京ヤクルトスワローズの本拠地は、東京都文京区の明治神宮野球場です。

◎ パラメータ
主なパラメータは「messages」です。「messages」は、「role」 (system / user / assistant) と「conetnt」 (メッセージ内容) を持つ辞書の配列です。通常、会話の最初に「systemメッセージ」を記述し、次に「userメッセージ」と「assistantメッセージ」が交互に記述します。

◎ レスポンス
レスポンスの例は、次のとおりです。

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "\u6771\u4eac\u30e4\u30af\u30eb\u30c8\u30b9\u30ef\u30ed\u30fc\u30ba\u306e\u672c\u62e0\u5730\u306f\u3001\u6771\u4eac\u90fd\u6587\u4eac\u533a\u306e\u660e\u6cbb\u795e\u5bae\u91ce\u7403\u5834\u3067\u3059\u3002",
        "role": "assistant"
      }
    }
  ],
  "created": 1677719870,
  "id": "chatcmpl-6pRrqxfoyhREzB3q8fOz6WCZSb2GU",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 43,
    "prompt_tokens": 109,
    "total_tokens": 152
  }
}

応答のメッセージは、以下で取得できます。

response["choices"][0]["message"]["content"]

4. トークン数

言語モデルは、トークンと呼ばれるチャンクでテキストを読み取ります。

例えば、“ChatGPT is great!”は6トークンに分割されます。

[“Chat”, “G”, “PT”, “ is”, “ great”, “!”]

入力トークンと出力トークンの両方がトークン数としてカウントされます。たとえば、メッセージ入力で10トークン、メッセージ出力で20トークンを消費した場合、30トークンとなります。

APIの呼び出しで使用されるトークンの数は、以下で確認できます。

response["usage"]["total_tokens"]

APIの呼び出しなしにトークン数を確認するには、「tiktoken」を使用してください。

5. チャットモデルへの指示

多くの会話は、アシスタントに指示するsystemメッセージから始まります。

あなたは、OpenAI によってトレーニングされた大規模な言語モデルである ChatGPT です。できるだけ簡潔に答えてください。 知識のカットオフ: {knowledge_cutoff} 現在の日付: {current_date}

モデルが望む出力を生成していない場合は、次のようなアプローチを試すことができます。

・指示をより明確にする
・回答を希望する形式を指定する
・答えを決める前にモデルに段階的に考えさせる、または長所と短所について議論してもらう

「temperature」と「max_tokens」は、開発者がチャットモデルの出力に影響を与える重要なオプションの2つです。「temperature」は、0.8のような高い値は出力をよりランダムにし、0.2のような低い値は決定論的になります。「max_tokens」は、応答を特定の長さに制限することができます。

6. davinci から gpt-3.5-turbo への書き換え

「gpt-3.5-turbo」は「davinci」と同様に機能しますが、トークンあたりの価格が10%であるため、ほとんどのユースケースで「gpt-3.5-turbo」をお勧めします。多くの開発者にとって、移行はプロンプトを書き換えて再テストするだけです。

・書き換え前

import openai

# 推論
response = openai.Completion.create(
    engine="text-davinci-003", 
    prompt='次の日本語のテキストを英語に翻訳してください: “吾輩は猫である"')
print(prompt+response["choices"][0]["text"])
"I am a cat."

・書き換え後

import openai

# 推論
response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "あなたは日本語を英語に翻訳するアシスタントです。"},
    {"role": "user", "content": '次の日本語のテキストを英語に翻訳してください: “吾輩は猫である"'}
  ]
)
print(response["choices"][0]["message"]["content"])
"I am a cat."

・書き換え後 (userメッセージのみ)

import openai

# 推論
response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": '次の日本語のテキストを英語に翻訳してください: “吾輩は猫である"'}
  ]
)
print(response["choices"][0]["message"]["content"])
"I am a cat."

7. よくある質問

7-1. gpt-3.5-turboのファインチューニングはできますか?

いいえ。2023年3月1日現在、基本GPT-3モデルのみをファインチューニングできます。

7-2. APIに渡されたデータを保存しますか?

2023年3月1日現在、APIデータは30日間保持されますが、モデルを改善するためにAPI経由で送信されたデータは使用されなくなりました。

7-3. モデレーションレイヤーを追加できますか?

モデレーションガイドに従って、OpenAIの利用ポリシーに違反するコンテンツが表示されないようにすることが可能です。

関連



この記事が気に入ったらサポートをしてみませんか?