openai

【Python】OpenAIのChat APIの詳細を深堀する

【Python】OpenAIのChat APIの詳細を深堀する

OpenAIはAPIを使ってGPTモデルにアクセスして使用することができます。この記事ではOpenAIのChat APIについて詳細を解説します。

OpenAIのAPI

OpenAIは、生成AIの代表格ともいえるChatGPTの開発元です。OpenAIは、大規模言語モデルに関するAPI (Application Programming Interface)の機能を提供しています。

私たちは、このAPIを使用することによって、自分たちが開発したシステムにOpenAIの強力なAIモデルを組み込んだサービスを創出することが可能です。OpenAIのAPIを使うためには、APIのキーを発行して使用する必要がありますが「OpenAI APIの使い方の基本」でまとめていますので参考にしてください。

上記の記事では、PythonでChat APIを呼び出す基本的な例を紹介していますが、APIの詳細については説明していません。この記事ではよりChat APIの詳細を深堀して、内容を理解していきたいと思います。

生成AIの技術は日々急速に進歩していっています。本記事についても記事執筆時点での情報であるため、本記事の内容が一部古くなり動作しない等の可能性がある点はご注意ください。

APIの詳細を深堀する

まずは非常に基本的なPythonのAPIプログラムを見てみましょう。

from pprint import pprint

from openai import OpenAI

# OpenAIクラスのインスタンスを生成する
client = OpenAI(
    api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  #←ここにAPIキーを記載する
)

# 役割(role)やコンテンツ(content)、モデル(model)の設定をする
response = client.chat.completions.create(
    messages=[
        # system: チャットのシナリオ設定などに使用する
        {"role": "system", "content": "あなたはアシスタントです。"},
        # 利用者からの入力に使用する
        {"role": "user", "content": "こんにちは"},
    ],
    model="gpt-3.5-turbo",
    temperature=0.8,
    max_tokens=100,
)

# APIで生成されるテキストを取得する
print(response)
【出力結果】
ChatCompletion(id='chatcmpl-9Ui5aowo9m0fCB1qq8GxCHgUYxypY', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='こんにちは!お困りのことがあればお知らせくださいね。どのようにお手伝いしましょうか?', role='assistant', function_call=None, tool_calls=None))], created=1717106346, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=39, prompt_tokens=23, total_tokens=62)) 

上記のプログラムにおけるOpenAIのAPIの詳細を理解するには以下の項目について把握する必要があります。

  1. リクエストの詳細
  2. レスポンスの詳細

以降では、上記のそれぞれについてどのような内容で構成されているかを紹介していきます。

リクエストの詳細を理解する

ここからは、上記プログラムを参考にしつつリクエストの詳細を見ていきましょう。リクエスト時には、client.chat.completions.createを使用して、メッセージやロール、モデルなどの指定をしています。

リクエストの詳細について公式ドキュメントはこちらを参照してください。

以降では主要な項目について内容や指定方法を解説していきます。

messages

messagesには、複数の会話を辞書のリストで格納できます。辞書の中には、rolecontentsを指定することができます。

roleは、GPTの役割を設定するもので以下のような設定をすることが可能です。

種類内容
systemチャットのシナリオ設定などシステムとしての役割
user利用者からの入力に使用する

contentには、上記役割として動くGPTモデルへ与える具体的な会話の内容を設定します。

通常のChatGPTを皆さんが使用している場合には、入力したメッセージはuserroleとなっています。APIを用いると、systemとして、モデルがどのようにふるまうべきかを指定するといった細かな設定をすることが可能になります。

Note

assistantroleをリクエストで使用する】

messagesの種類としては、assistantというものもあります。これはAIからの回答を意味するもので、後述するレスポンスの詳細で登場します。

assistantroleは、リクエスト時に明示的に指定することは少ないですが使用することは可能です。リクエスト時に指定することでAIの回答を特定のスタイルで対話させるなどコントロールすることも可能です。

temperature

temperatureは、出力の多様性を制御するパラメータです。0~2の値を設定することができます。デフォルト値は私が確認した際には公式ページでは1となっていますが、モデルにより異なったり、変更されたりする場合がありますので随時確認するようにしてください。

0は、毎回同じ出力をする設定で、2が一番ランダムな出力として回答がされます。1であれば、ちょうど真ん中ぐらいのランダム性で出力結果が変化することを意味しています。

max_tokens

出力トークンの最大値を設定します。トークンとは、入力や出力の文字列に対して計算される数値のことで、このトークン値によってAPIの料金が決まってきます。

OpenAI APIの使い方の基本」でトークンの概要とトークンの値を確認するTokenizerについて説明しているので興味があれば参考にしてください。

レスポンスの詳細を理解する

上記で紹介したプログラムを実行すると以下のようなレスポンスが得られます。(再掲)

【出力結果】(再掲)
ChatCompletion(id='chatcmpl-9Ui5aowo9m0fCB1qq8GxCHgUYxypY', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='こんにちは!お困りのことがあればお知らせくださいね。どのようにお手伝いしましょうか?', role='assistant', function_call=None, tool_calls=None))], created=1717106346, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint=None, usage=CompletionUsage(completion_tokens=39, prompt_tokens=23, total_tokens=62)) 

上記のようにChatCompletionとして、各項目が格納されています。dict(response)のようにすることで辞書に変換して使用することも可能です。

以降で主要な項目について簡単に説明していきます。

choices

GPTから返却されたメッセージが格納されています。重要な項目の内容については以下の通りです。

項目内容
finish_reasonレスポンスが終了した際の理由が格納されます。
stopの場合は、APIが最後までメッセージが到達したことを表します。
lengthの場合は、リクエストのmax_tokensで指定した最大のトークンに到達したことを表します。
messagesGPTから返却されてきたメッセージが格納されます。
リクエストの際に出てきたmessagesと同じ構成ですが、レスポンスについては、roleassistantとなります。

created

レスポンスが生成された時間(UNIX時間)を示しています。

model

GPTが回答を作成する際に使用したモデルを示しています。今回の例では、GPT-3.5-turboが使用されていることが分かります。

usage

使用したトークン数に関する情報が格納されています。このトークン数が課金に影響します。

項目内容
completion_tokens出力のトークン数を表します。
prompt_tokens入力のトークン数を表します。
total_tokens入力と出力の合計のトークン数を表します。

上記が、OpenAIのChat APIの主要な項目に関する説明でした。APIとしてはより細かく設定できる項目もありますので、詳細は公式ドキュメントのこちらを参照してください。

まとめ

OpenAIはAPIを使ってGPTモデルにアクセスして使用することができます。この記事ではOpenAIのChat APIについて詳細を解説しました。

Chat APIでは、リクエストとレスポンスの構成を理解することが重要です。この記事では、とても簡単な例でAPIを使う例を使ってそれぞれの構成について紹介しています。なお、紹介した引数などについては、APIの一部であるためより詳細には公式ドキュメントのこちらを参照してください。

生成AI機能は、今後重要になってくる技術領域であると思うので、OpenAIのChat APIに触れることでぜひこの技術領域を楽しんでもらいたいと思います。