"stream": trueを設定することで、サーバー送信イベント(SSE)を使用してレスポンスを段階的にストリーミングできます。
SDKでのストリーミング
私たちのPythonおよびTypeScript SDKは、複数のストリーミング方法を提供しています。Python SDKは同期と非同期の両方のストリームを許可します。詳細については、各SDKのドキュメントを参照してください。イベントタイプ
各サーバー送信イベントには、名前付きイベントタイプと関連する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)が含まれる可能性があることに注意してください。ツール使用と拡張思考ブロックは部分的に回復できません。最新のテキストブロックからストリーミングを再開できます。