"stream": true
を設定することで、server-sent events(SSE)を使用してレスポンスを段階的にストリーミングできます。
SDKでのストリーミング
私たちのPythonおよびTypeScript SDKは、複数のストリーミング方法を提供しています。Python SDKは同期と非同期の両方のストリームを許可します。詳細については、各SDKのドキュメントを参照してください。イベントタイプ
各server-sent eventには、名前付きイベントタイプと関連するJSONデータが含まれます。各イベントはSSEイベント名(例:event: message_stop
)を使用し、そのデータに一致するイベントtype
を含みます。
各ストリームは以下のイベントフローを使用します:
message_start
:空のcontent
を持つMessage
オブジェクトを含みます。- 一連のコンテンツブロック。それぞれに
content_block_start
、1つ以上のcontent_block_delta
イベント、およびcontent_block_stop
イベントがあります。各コンテンツブロックには、最終的なMessagecontent
配列内のインデックスに対応するindex
があります。 - 1つ以上の
message_delta
イベント。最終的なMessage
オブジェクトへのトップレベルの変更を示します。 - 最終的な
message_stop
イベント。
message_delta
イベントのusage
フィールドに表示されるトークン数は累積です。Pingイベント
イベントストリームには、任意の数のping
イベントも含まれる場合があります。
エラーイベント
イベントストリームでエラーを送信することがあります。例えば、使用量が多い期間中に、非ストリーミングコンテキストでは通常HTTP 529に対応するoverloaded_error
を受信する場合があります:
Example error
その他のイベント
私たちのバージョニングポリシーに従って、新しいイベントタイプを追加する場合があり、あなたのコードは未知のイベントタイプを適切に処理する必要があります。コンテンツブロックデルタタイプ
各content_block_delta
イベントには、指定されたindex
でコンテンツブロックを更新するタイプのdelta
が含まれます。
テキストデルタ
text
コンテンツブロックデルタは次のようになります:
Text delta
入力JSONデルタ
tool_use
コンテンツブロックのデルタは、ブロックのinput
フィールドの更新に対応します。最大の粒度をサポートするため、デルタは_部分的なJSON文字列_であり、最終的なtool_use.input
は常に_オブジェクト_です。
文字列デルタを蓄積し、content_block_stop
イベントを受信したらJSONを解析できます。Pydanticのようなライブラリを使用して部分的なJSON解析を行うか、解析された増分値にアクセスするヘルパーを提供する私たちのSDKを使用できます。
tool_use
コンテンツブロックデルタは次のようになります:
Input JSON delta
input
から1つの完全なキーと値のプロパティのみを出力することをサポートしています。そのため、ツールを使用する際、モデルが作業している間にストリーミングイベント間で遅延が発生する場合があります。input
キーと値が蓄積されると、将来のモデルでより細かい粒度を自動的にサポートできるように、チャンクされた部分的なjsonを持つ複数のcontent_block_delta
イベントとして出力します。
思考デルタ
ストリーミングが有効な拡張思考を使用する場合、thinking_delta
イベントを通じて思考コンテンツを受信します。これらのデルタは、thinking
コンテンツブロックのthinking
フィールドに対応します。
思考コンテンツの場合、特別なsignature_delta
イベントがcontent_block_stop
イベントの直前に送信されます。この署名は思考ブロックの整合性を検証するために使用されます。
典型的な思考デルタは次のようになります:
Thinking delta
Signature delta
完全なHTTPストリームレスポンス
ストリーミングモードを使用する際は、私たちのクライアントSDKを使用することを強く推奨します。ただし、直接的なAPI統合を構築している場合は、これらのイベントを自分で処理する必要があります。 ストリームレスポンスは以下で構成されます:message_start
イベント- 潜在的に複数のコンテンツブロック。それぞれに以下が含まれます:
content_block_start
イベント- 潜在的に複数の
content_block_delta
イベント content_block_stop
イベント
message_delta
イベントmessage_stop
イベント
ping
イベントが散在する場合もあります。フォーマットの詳細については、イベントタイプを参照してください。
基本的なストリーミングリクエスト
Response
ツール使用でのストリーミングリクエスト
ツール使用は、ベータ機能としてパラメータ値の細かいストリーミングをサポートするようになりました。詳細については、細かいツールストリーミングを参照してください。
Response
拡張思考でのストリーミングリクエスト
このリクエストでは、拡張思考をストリーミングで有効にして、Claudeの段階的な推論を確認します。Response
ウェブ検索ツール使用でのストリーミングリクエスト
このリクエストでは、Claudeに現在の天気情報をウェブで検索するよう求めます。Response
エラー回復
ネットワークの問題、タイムアウト、またはその他のエラーによりストリーミングリクエストが中断された場合、ストリームが中断された場所から再開することで回復できます。このアプローチにより、レスポンス全体を再処理する必要がなくなります。 基本的な回復戦略には以下が含まれます:- 部分的なレスポンスをキャプチャ:エラーが発生する前に正常に受信されたすべてのコンテンツを保存します
- 継続リクエストを構築:新しいアシスタントメッセージの開始として部分的なアシスタントレスポンスを含む新しいAPIリクエストを作成します
- ストリーミングを再開:中断された場所からレスポンスの残りを受信し続けます
エラー回復のベストプラクティス
- SDK機能を使用:SDKの組み込みメッセージ蓄積とエラー処理機能を活用します
- コンテンツタイプを処理:メッセージには複数のコンテンツブロック(
text
、tool_use
、thinking
)が含まれる可能性があることを認識してください。ツール使用と拡張思考ブロックは部分的に回復できません。最新のテキストブロックからストリーミングを再開できます。