Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

OpenAIのChat Completions APIの基本的な利用方法解説

昨年から育てていたバジルがもはや木になりつつある菅野です。

今注目を集めつつある文章生成AIである「ChatGPT」に関して、提供元のOpenAI社は2023/07/07に、「GPT-4」のAPIを有料ユーザー向けに一般公開したことを発表しました。 今回は、その「Chat Completions API」について紹介します。

例えば、自作のWebアプリでChatGPTライクなやりとりを実現したい、
それで入力された文章を加工したプロンプトでChatの応答を得たい、
といったときに、このAPIを使います。
この図のような動きですね。

openai.com

Chat Completions API とは?

「Chat Completions API」は、チャット補完に特化した言語モデルと、それを利用する専用のAPIです。
ChatGPTでも同じ言語モデルを利用しているため、このAPIを利用することで、独自のサービスでChatGPTと同等の機能を実装することが可能になります。
また、このリリースに合わせて、旧バージョンの「Completions API」は「Legacy」の位置づけになったようで、GPT-4は新しい「Chat Completions API」でないと利用ができません。

APIを利用する上で必要な知識

OpenAIのAPIを利用する上で必要になる共通的な情報を説明します。

APIキー

OpenAIのAPIは従量課金制になります。
利用するモデルごとに処理したトークン(後述)数に応じた金額が課金されます。
代表的なモデルの料金は以下のようになっています。(2023年7月現在)

モデル名 入力($/1Kトークン) 出力($/1Kトークン)
GPT-4(8Kcontext) 0.03 0.06
GPT-3.5 Turbo(4Kcontext) 0.0015 0.002

CPT-4は一つ前のモデルと比較して入力20倍、出力30倍の値段設定になっていますね。
コストとのバランスを考えてモデルを選択する必要がありそうです。

そのほかモデル毎の料金は以下のサイトを確認してください。
https://openai.com/pricing

アカウント作成後3か月間利用できるフリートライアルもあります。
ChatGPTのサブスクリプション(ChatGPT Plus)とは、別の契約登録が必要であったり、コストも別にかかる点に注意が必要です。
OpenAI APIの契約の登録は、アカウントを作成後、以下から行えます。
https://platform.openai.com/account/billing/overview

アカウントを作成したのち、以下のURLからAPIキーを発行しましょう。
https://platform.openai.com/account/api-keys
Create new secret key を押下し

任意のKey名を設定してCreate Secret Keyを押下します。

作成したSecretKeyでAPIアクセスが可能になってしまうので、Git等第三者がアクセス可能な場所に登録、保存しないように注意してください。

Token

Chat Completions APIの処理単位です。
入力、出力共にByte Pair Encodingした結果を1トークンとして処理します。
英語の場合は通常1単語1トークン、日本語の場合は1文字でも複数トークン換算される場合がある模様です。

トークン数が増える為、可能な限り英語でリクエストを送付したほうがよさそうです。

Chat Completions API の利用

ではここからChat Completions APIの内容について説明します。

概要

https://api.openai.com/v1/chat/completions

messagesで送信した対話式の文章の続きとして最もふさわしい文章を補完して返信するAPIです。

リクエス

基本的な利用方法は、以下のようになります。 環境変数OPENAI_API_KEYには取得したAPIキーを設定しましょう。

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4",
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."}, 
        {"role": "user", "content": "Hello!"}
    ]
  }'
パラメータ名 意味
model 文章生成に用いるモデルのID、2023年7月現在 以下のモデルが利用可能。
1. gpt-3.5-turbo
2. gpt-3.5-turbo-16k
3. gpt-4(課金ユーザのみ)
4. gpt‐4‐32k(課金ユーザのみ)
上記以外にも日付形式のスナップショットモデルが存在します。詳細は以下のURLを参照。
https://platform.openai.com/docs/models/models
messages 文章生成させる元になる文章 roleにその文章の発話者、contentに発言内容を入れたリスト形式の文章
roleは以下の4点のロールが存在する
1. system: 対話の文脈や目的を設定するために利用するシステムメッセージを表す
2. user:応答を要求する人間のユーザを表す
3.assistant: 生成メッセージを返すアシスタントを表す
4. function: 関数の実行を表す

Chat Completions APIはステートレスなAPIであるため、連続したやり取りについての応答を生成する場合は今までの応答を全部messagesに含めて送る必要があります。

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4",
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."}, 
        {"role": "user", "content": "Hello!"}
        {"role": "assistant", "content": "\n\nHello there, how may I assist you today?"}
        {"role": "user", "content": "★AIの応答を受けたうえでのユーザの追加入力★"}
    ]
  }'

レスポンス

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}
パラメータ名 意味
id 生成結果を一意にする識別子
object 利用したAPIのレスポンスタイプ。Chat Completions APIの場合はchat.completion固定
created 文章生成時刻のUnitxTimestamp
choices 生成したレスポンスのリスト
 index レスポンスのIndex番号
 message 生成したレスポンス、roleにその文章の発話者、contentに発言内容が記載される
 finish_reason レスポンスが停止した理由を示す。正常終了した場合にはstopが入る、モデルの最大トークン数を超えた場合はmax_tokensが入る
usage 利用したトークンに関する情報
 prompt_tokens 入力文字で利用されたトークン数
 completion_tokens 生成文字で利用されたトークン数
  total_tokens 入力と出力で利用されたトークンの合計数

まとめ

ChatGPT形式で文章を生成できるOpenAIのAPI、Chat Completions APIについて基本的な利用方法と、 その内容を解説しました。
単に文章をWebUIで生成するだけでなく、システムに組み込みたい場合は必須の知識となるので 引き続き学んでいきたいですね。
また、今回は基本的な利用方法ということで割愛しましたが、関数を定義して関数呼び出しを行う Functions Callという機能も利用できるので、また別の機会で説明しようと思います。 それでは、また。

Acroquest Technologyでは、キャリア採用を行っています。
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com