0Pricing
Learn AI with Python · レッスン

OpenAI API:chat.completionsとストリーミング

OpenAIクライアント、messagesリスト、system/user/assistantロール、stream=Trueによるストリーミングについて学習します。

「OpenAI API:chat.completionsとストリーミング」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

OpenAI Python SDKの紹介

openai Pythonパッケージは、GPT-4oなどのOpenAIモデルと通信する公式の方法です。pip install openaiでインストールすると、認証、リトライ、リクエストの構築を処理してくれる単一のOpenAIクラスを利用できます。

実行するすべての呼び出しはこのクライアントを経由するため、一度作成して再利用するのが標準的なパターンです。

pip install openai

from openai import OpenAI

クライアントの作成

OpenAI()でクライアントをインスタンス化します。デフォルトではOPENAI_API_KEY環境変数からキーを読み取るため、ソースコードに秘密情報を含めずに済みます。

キーを明示的に渡すこともできますが、本番アプリケーションでは環境変数を使う方法が推奨されます。

from openai import OpenAI

# Reads OPENAI_API_KEY from the environment
client = OpenAI()

# Or pass it explicitly (not recommended)
client = OpenAI(api_key="sk-...")

messagesリスト

チャットモデルはメッセージのリストによって動作します。各メッセージはroleとcontentを持つdictです。基本となる3つのロールは、system(指示)、user(人間のユーザー)、assistant(モデル)です。

このリストが、呼び出しごとにモデルが参照する会話全体のコンテキストになります。

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is the capital of France?"}
]

初めての補完

modelとmessagesを指定して、client.chat.completions.create()を呼び出します。返信テキストはresponse.choices[0].message.contentに格納されています。

APIは選択肢のリストを返しますが、通常は最初の選択肢を読み取ります。

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages
)

print(response.choices[0].message.content)

パラメータによる出力の制御

応答を決める主なパラメータは2つあります。temperature(0の場合は決定論的で、高いほど創造的になります)と、max_tokens(返信の長さに上限を設定します)です。事実に基づくタスクには低いtemperature、ブレインストーミングには高いtemperatureが適しています。

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    temperature=0.2,
    max_tokens=300
)

応答をストリーミングする理由

ストリーミングを使わない場合、何も表示されないまま返信全体の生成が終わるのを待つ必要があります。ストリーミングを使うと、トークンが生成されるたびに届くため、ChatGPTのようにUIでテキストをリアルタイムに表示できます。

stream=Trueを指定すると有効になります。これにより、戻り値は単一のオブジェクトからイテレーターに変わります。

ストリーミングの有効化

create()にstream=Trueを渡します。完成した応答の代わりに、モデルが生成するにつれてチャンクを返すジェネレーターを取得できるようになります。

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    stream=True
)

チャンクの反復処理

ストリームをループ処理します。各チャンクには、chunk.choices[0].delta.contentにテキストの一部が格納されています。最初や最後のチャンクでは、そこにNoneが入る場合があるため、出力する前に確認してください。

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta is not None:
        print(delta, end="", flush=True)

deltaとmessageの違いを理解する

通常の応答では、返信全体を表すmessage.contentを読み取ります。ストリームでは、新しく追加された部分だけを表すdelta.contentを読み取ります。deltaという語は、前のチャンクからの「変化」を意味します。

すべてのdeltaを連結すると、完全なメッセージを復元できます。

full_text = ""
for chunk in stream:
    piece = chunk.choices[0].delta.content or ""
    full_text += piece
print("\nFinal:", full_text)

マルチターンの会話

会話を続けるには、assistantの返信をmessagesに追加してから、次のuserメッセージを追加します。モデルは状態を保持しないため、履歴はご自身で管理する必要があります。

messages.append({"role": "assistant", "content": response.choices[0].message.content})
messages.append({"role": "user", "content": "And its population?"})

follow_up = client.chat.completions.create(model="gpt-4o", messages=messages)

トークン使用量の確認

ストリーミングを使わない応答には、prompt_tokens、completion_tokens、total_tokensを含むusageオブジェクトが含まれます。料金はトークン単位で発生するため、これを使ってAPIのコストを追跡し、予算を管理できます。

print(response.usage.prompt_tokens)
print(response.usage.completion_tokens)
print(response.usage.total_tokens)

理解度チェック

ストリーミングについての理解度を確認しましょう。

まとめ:Chat Completionsとストリーミング

OpenAIクライアントの作成、system/user/assistantロールを持つmessagesリストの構築、そしてchat.completions.create()の呼び出し方法を学びました。通常の返信はchoices[0].message.contentから読み取ります。

stream=Trueを指定すると、チャンクを反復処理してリアルタイム出力用のdelta.contentを読み取れます。また、返信を追加して履歴を管理し、usageオブジェクトでコストを追跡できます。

よくある質問

「OpenAI API:chat.completionsとストリーミング」レッスンは無料ですか?

はい。「OpenAI API:chat.completionsとストリーミング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「OpenAI API:chat.completionsとストリーミング」で何を学びますか?

OpenAIクライアント、messagesリスト、system/user/assistantロール、stream=Trueによるストリーミングについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「OpenAI API:chat.completionsとストリーミング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OpenAI API:chat.completionsとストリーミング
  2. Pythonで使うAnthropic Claude API
  3. LLMでのFunction Callingとツール利用
  4. 本番向けLLMアプリのプロンプトエンジニアリング
← Learn AI with Pythonに戻る