今注目を集めつつある文章生成AIである「ChatGPT」に関して、提供元のOpenAI社は2023/07/07に、「GPT-4」のAPIを有料ユーザー向けに一般公開したことを発表しました。 今回は、その「Chat Completions API」について紹介します。
例えば、自作のWebアプリでChatGPTライクなやりとりを実現したい、
それで入力された文章を加工したプロンプトでChatの応答を得たい、
といったときに、このAPIを使います。
この図のような動きですね。
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文字でも複数トークン換算される場合がある模様です。
それぞれのモデルには一回に処理できるトークン数の上限が定められており、以下のURLから確認できます。
https://platform.openai.com/docs/models/gpt-4実際に利用する文章のトークン数が事前に知りたい場合は以下のURLで確認することができます。
https://platform.openai.com/tokenizer同じ意味の「今日はいい天気」/「It is a good weather today」でもこれだけトークン数に差が出ます。
トークン数が増える為、可能な限り英語でリクエストを送付したほうがよさそうです。
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では、キャリア採用を行っています。少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長