ブログに戻る
チュートリアル

Pythonでストリーミング応答を実装する

FastMetal

チャット UI のように応答を少しずつ表示したいときは、ストリーミングを使います。FastMetal は OpenAI 互換なので、stream=True を付けるだけで実装できます。

ストリーミングとは

通常のリクエストは「全部生成し終えてから」応答が返ります。ストリーミングでは、生成され次第トークンを逐次受け取れるため、体感速度が上がり、長い応答でも待たせません。

Python の実装例

from openai import OpenAI

client = OpenAI(
    base_url="https://api.fastmetal.ai/v1",
    api_key="sk-...",  # FastMetal の API キー
)

stream = client.chat.completions.create(
    model="anthropic-claude-haiku-4-5",
    messages=[{"role": "user", "content": "短い物語を書いて"}],
    stream=True,
)

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

ポイント

  • stream=True を付けるだけでストリーミングになります
  • chunkchoices[0].delta.content に差分テキストが入ります
  • None の差分(先頭や終端)に注意し、if delta: でガードします
  • flush=True を付けると、逐次表示がスムーズです

次のステップ

Web アプリなら、この逐次出力を Server-Sent Events(SSE)でフロントに流すと、チャット UI のような体験になります。対応モデルはモデルカタログ、詳しい仕様はドキュメントをご覧ください。