ホーム / ドキュメント / ストリーミング

ストリーミング

両形式のサーバー送信イベント:イベント構造が異なるため、取り違えると何も受信されていないように見えます。

設定する項目: stream をtrueにすると、レスポンスは次の形式になります: text/event-stream。両方のエンドポイントがストリーミングに対応していますが、出力するイベントの構造は それぞれ異なります.

Anthropic形式

curl -N https://aiprimetech.io/v1/messages \
  -H "x-api-key: $CLAUDEAPIKEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-4-6","max_tokens":512,"stream":true,
       "messages":[{"role":"user","content":"Count to five"}]}'
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","usage":{"input_tokens":9}}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"One"}}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":14}}

event: message_stop
data: {"type":"message_stop"}

テキストが届くイベント: content_block_delta イベント内の次の場所: delta.text。最終的な出力トークン数が届くイベント: message_delta。次の識別子は使用しません: message_start.

OpenAI形式

data: {"choices":[{"delta":{"content":"One"},"index":0}]}

data: {"choices":[{"delta":{},"finish_reason":"stop","index":0}]}

data: [DONE]

テキストが届く場所: choices[0].delta.content。ストリームの終端には、次のリテラルが data: [DONE] 終端マーカーとして送信されます。これはJSONではありません。

この不一致により、エラーのない空のレスポンスが発生します。クライアントが次の形式を解析しようとすると、 choices[].delta.content Messagesのストリームからは毎回何も見つからないまま、成功と報告されます。ストリーミングが動作しているように見えても何も返されない場合は、解析している構造を確認してください。

Python、Anthropic SDK

from anthropic import Anthropic

client = Anthropic(api_key=class="s">"sk-your-key", base_url=class="s">"https://aiprimetech.io")

with client.messages.stream(
    model=class="s">"claude-sonnet-4-6",
    max_tokens=512,
    messages=[{class="s">"role": class="s">"user", class="s">"content": class="s">"Count to five"}],
) as stream:
    for text in stream.text_stream:
        print(text, end=class="s">"", flush=True)

運用上の注意点