メッセージのストリーミング
メッセージを作成する際、"stream": true
を設定することで、server-sent events (SSE)を使用してレスポンスを段階的にストリーミングすることができます。
SDKsでのストリーミング
私たちのPythonとTypeScript SDKsは、複数のストリーミング方法を提供しています。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
イベント。
Pingイベント
イベントストリームには任意の数のping
イベントが含まれる場合があります。
エラーイベント
イベントストリームでエラーが送信されることがあります。例えば、高負荷時にはoverloaded_error
を受け取る可能性があります。これは非ストリーミングのコンテキストではHTTP 529に相当します:
その他のイベント
私たちのバージョニングポリシーに従って、新しいイベントタイプが追加される可能性があります。コードは未知のイベントタイプを適切に処理する必要があります。
デルタタイプ
各content_block_delta
イベントには、指定されたindex
のコンテンツブロックを更新するdelta
が含まれています。
テキストデルタ
text
コンテンツブロックデルタは以下のようになります:
入力JSONデルタ
tool_use
コンテンツブロックのデルタは、ブロックのinput
フィールドの更新に対応します。最大の粒度をサポートするため、デルタは_部分的なJSON文字列_であり、最終的なtool_use.input
は常に_オブジェクト_です。
Pydanticのようなライブラリを使用して部分的なJSONの解析を行うか、解析された増分値にアクセスするためのヘルパーを提供する私たちのSDKsを使用することで、文字列デルタを蓄積し、content_block_stop
イベントを受信した時点でJSONを解析することができます。
tool_use
コンテンツブロックデルタは以下のようになります:
注意:現在のモデルは、input
から一度に1つの完全なキーと値のプロパティを出力することのみをサポートしています。そのため、ツールを使用する際には、モデルが処理を行っている間にストリーミングイベント間で遅延が発生する可能性があります。input
のキーと値が蓄積されると、将来のモデルで自動的により細かい粒度をサポートできるように、複数のcontent_block_delta
イベントとして分割された部分的なJSONとして出力されます。
生のHTTPストリームレスポンス
ストリーミングモードを使用する際は、私たちのクライアントSDKsの使用を強く推奨します。ただし、直接APIを統合する場合は、これらのイベントを自身で処理する必要があります。
ストリームレスポンスは以下で構成されています:
message_start
イベント- 複数のコンテンツブロック(各ブロックには以下が含まれます):
a.
content_block_start
イベント b. 複数のcontent_block_delta
イベント c.content_block_stop
イベント message_delta
イベントmessage_stop
イベント
レスポンス全体にping
イベントが分散している場合もあります。フォーマットの詳細についてはイベントタイプを参照してください。
基本的なストリーミングリクエスト
ツール使用を伴うストリーミングリクエスト
このリクエストでは、Claudeに天気を教えてもらうためにツールを使用するよう依頼します。