OpenaAI chatAPIを試してみる

  •  
 
ズィスト2023年3月7日 - 18:31 に投稿

タグ

はじめに

OpenAIからChat APIが公開されました。
今回はこのAPIについて紹介していきたいと思います。

目次

  • 特徴
  • 使い方
  • モデル
  • メッセージ
  • 実際の例
  • 料金
  • gpt-3.5-turboのベストプラクティス
  • まとめ
  • 参考文献

特徴

ChatAPIの特徴として公式ドキュメントに記載されていることは以下になります。

  • チャットに特化したモデル
  • gpt-3.5-turbotext-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パラメータではメッセージオブジェクトを配列で渡す必要があります。
メッセージオブジェクトはrolecontentで定義することができます。
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","資本金を教えてください"} ] }'

この例では以下のことを実施しています。

  1. systemメッセージである会社のチャットボットであることを伝える
  2. userメッセージで会社の情報を与える
  3. userメッセージとassistantメッセージで期待する動作の例を示す
  4. 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ができないので今後に期待したいと思います。

参考文系

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。