ストリーミング応答と非ストリーミング応答
このページでは Claude ネイティブ呼び出し(/v1/messages)のレスポンス処理について説明します。接続方法は
Claude ネイティブ呼び出しの基礎 を参照してください。
非ストリーミング応答
{ "id": "msg_xxx", "type": "message", "role": "assistant", "content": [{ "type": "text", "text": "……" }], "stop_reason": "end_turn", "usage": { "input_tokens": 24, "output_tokens": 180 }}- 本文は
content配列内にあり、ブロック(text / tool_use / thinking)ごとに構成されるため、ブロック単位で走査してから結合します; stop_reason:end_turnは正常終了、max_tokensは打ち切り、tool_useはツール呼び出し要求を意味します。
ストリーミング応答(SSE)
リクエストに "stream": true を追加すると、イベントが種類ごとに送信されます:
| イベント | 意味 |
|---|---|
message_start | セッション開始、入力 token 数を含む |
content_block_start | 1つのコンテンツブロック開始(text/tool_use/thinking) |
content_block_delta | 本文の差分、delta.text を連結すればよい |
content_block_stop | 現在のコンテンツブロック終了 |
message_delta | 末尾メタデータ(stop_reason、出力 token 数) |
message_stop | すべて終了 |
with client.messages.stream( model="claude-sonnet-5", max_tokens=1024, messages=[{"role": "user", "content": "海についての短い詩を書いて"}],) as stream: for text in stream.text_stream: print(text, end="", flush=True)注意事項
- 公式 Anthropic SDK を使う場合、これらのイベントはすでにラップされているため、SSE を手動で記述する場合のみイベントごとの処理が必要です;
- token 使用量は
message_start(入力)+message_delta(出力) を基準とし、請求と一致します; - 思考モードの
thinkingブロックの解析については思考モード を参照してください。