はじめに
OpenAIからChat APIが公開されました。
今回はこのAPIについて紹介していきたいと思います。
目次
- 特徴
- 使い方
- モデル
- メッセージ
- 実際の例
- 料金
- gpt-3.5-turboのベストプラクティス
- まとめ
- 参考文献
特徴
ChatAPIの特徴として公式ドキュメントに記載されていることは以下になります。
- チャットに特化したモデル
gpt-3.5-turbo
はtext-davinci-003
と同等の性能を持ちトークン単価が10%となる- FineTuningを実施することはできない
- 現在利用できるモデルは2種類
- トークンの上限は4096トークン
使い方
ChatAPIを利用する場合は以下のようなリクエストになります。
curl https://api.openai.com/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
テキスト補完から大きく変わった箇所としては以下になります。
- エンドポイント
/v1/completions
から/v1/chat/completions
になった
- リクエストボディの
messages
パラメータprompt
の代わりにmessages
パラメータとなった
モデル
Chat APIで利用できるモデルは2023/03/07現在で以下の2種類になります。
- gpt-3.5-turbo
- text-davinci-003の1/10のコストでGPT-3.5の最高性能
- チャットに適したモデル
- 更新予定あり
- gpt-3.5-turbo-0301
- 2023/03/01時点のgpt-3.5-turboのスナップショット
- 更新は行われずに2023/06/01までのサポート
上記のから現在利用できるモデルは実質1種類ということがわかります。
メッセージ
messages
パラメータではメッセージオブジェクトを配列で渡す必要があります。
メッセージオブジェクトはrole
とcontent
で定義することができます。role
で指定できる値は以下の3つとなります。
system
- アシスタントの動作を設定する
user
- アシスタントへ指示を出す
- エンドユーザーもしくは開発者に当たる
assistant
- userのcontentを元に望ましい動作の例を示す
- 過去のリクエストの記憶がないため全ての関連情報はuserのcontentに含める必要がある
content
で情報や指示などを与えることができます。
実際の例
実際にAPIにリクエストを送る場合の例は以下になります。
curl https://api.openai.com/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system","content": "あなたは株式会社結束バンドのチャットボットです。"},
{"role": "user","content": "株式会社結束バンドの情報は以下の通りです。\n・資本金: 1000円\n・社長: 伊地知 虹夏\n・社員数: 4人\n・取引銀行: 山田銀行"},
{"role": "user","content": "取引銀行を教えてください"},
{"role": "assistant","content": "山田銀行"},
{"role": "user","content","資本金を教えてください"}
]
}'
この例では以下のことを実施しています。
- systemメッセージである会社のチャットボットであることを伝える
- userメッセージで会社の情報を与える
- userメッセージとassistantメッセージで期待する動作の例を示す
- userメッセージで尋ねたいことを入力する
上記のリクエストを投げると以下のレスポンスが返ってきます。
{
"id": "chatcmpl-6r0b8kmuJCWvKA4PvS1mKHbjhcUiP",
"object": "chat.completion",
"created": 1678091702,
"model": "gpt-3.5-turbo-0301",
"usage": {
"prompt_tokens": 154,
"completion_tokens": 7,
"total_tokens": 161
},
"choices": [
{
"message": {
"role": "assistant",
"content": "1000円です。"
},
"finish_reason": "stop",
"index": 0
}
]
}
事前に与えた情報である1000円が返ってきました。
料金
料金は1000トークンあたり$0.002
となります。
料金及びトークンは以下のように計算されます。
- 入力トークンと出力トークンの両方がコストに関係する
- 入力が10トークン、出力が20トークンの場合は30トークンの請求が発生する。
- APIレスポンスのusageフィールド(例:response['usage']['total_tokens'])でAPIコールで使用されたトークンの数を確認することができる
- OpenAIのtiktoken Pyhtonライブラリを使用することでAPIを使用せずに文字列のトークン数を確認することができる
- APIに渡される各メッセージはコンテンツ、ロール、その他のフィールドにあるトークンの数にプラスしてフォーマット用に少し余分に消費される
- 将来的に変更される可能性がある
gpt-3.5-turboのベストプラクティス
期待通りの結果が得られない場合は以下のことを実施することで改善することがある。
- 指示をより明確にする
- 回答を表示する形式を指定する
- モデルに段階的に考えてもらう
- 賛否を議論してもらう
その他についてはtechniques to improve reliabilityを参照
まとめ
今回はOpenAIのChat APIについて紹介しました。 実際に試してみましたが精度が高く、また料金もdavinciの1/10なので利用機会が増えると感じました。 一方、この記事の執筆時点ではFineTuningができないので今後に期待したいと思います。
参考文系
- 閲覧数 787
コメントを追加