AssistantMessage オブジェクトを返します。テキストとツール呼び出しが生成されるときにインクリメンタルな更新を受け取るには、オプションで include_partial_messages(Python)または includePartialMessages(TypeScript)を true に設定して、部分的なメッセージストリーミングを有効にします。
ストリーミング出力を有効にする
ストリーミングを有効にするには、オプションでinclude_partial_messages(Python)または includePartialMessages(TypeScript)を true に設定します。これにより、SDK は到着した生の API イベントを含む StreamEvent メッセージを返すようになり、通常の AssistantMessage と ResultMessage に加えて返されます。
コードは以下の処理を実行する必要があります:
- 各メッセージのタイプをチェックして、
StreamEventを他のメッセージタイプから区別する StreamEventの場合、eventフィールドを抽出してそのタイプをチェックするdelta.typeがtext_deltaであるcontent_block_deltaイベントを探す。これには実際のテキストチャンクが含まれます
StreamEvent、次に content_block_delta、その後 text_delta です:
StreamEvent リファレンス
部分的なメッセージが有効な場合、生の Claude API ストリーミングイベントがオブジェクトでラップされて返されます。タイプは各 SDK で異なる名前を持ちます:- Python:
StreamEvent(claude_agent_sdk.typesからインポート) - TypeScript:
SDKPartialAssistantMessagewithtype: 'stream_event'
parent_tool_use_id フィールドは Python では常に None、TypeScript では null です。ストリームイベントはメインセッションのみに対して発行されます。サブエージェントからのトークンレベルのデルタは転送されません。出力をサブエージェントに属性付けするには、parent_tool_use_id を含む完全なメッセージを使用してください。サブエージェント呼び出しの検出を参照してください。
event フィールドには、Claude API からの生のストリーミングイベントが含まれます。一般的なイベントタイプは以下の通りです:
メッセージフロー
部分的なメッセージが有効な場合、メッセージは以下の順序で返されます:include_partial_messages、TypeScript では includePartialMessages)、StreamEvent を除くすべてのメッセージタイプを受け取ります。一般的なタイプには SystemMessage(セッション初期化)、AssistantMessage(完全なレスポンス)、ResultMessage(最終結果)、および会話履歴がコンパクト化されたときを示すコンパクト境界メッセージ(TypeScript では SDKCompactBoundaryMessage、Python では SystemMessage with subtype "compact_boundary")が含まれます。
テキストレスポンスをストリーミングする
生成されるときにテキストを表示するには、delta.type が text_delta である content_block_delta イベントを探します。これらには、インクリメンタルなテキストチャンクが含まれます。以下の例は、各チャンクが到着するときに出力します:
ツール呼び出しをストリーミングする
ツール呼び出しもインクリメンタルにストリーミングされます。ツールが開始されるときを追跡し、生成されるときに入力を受け取り、完了するときを確認できます。以下の例は、現在呼び出されているツールを追跡し、ストリーミングされるときに JSON 入力を蓄積します。3 つのイベントタイプを使用します:content_block_start: ツール開始content_block_deltawithinput_json_delta: 入力チャンク到着content_block_stop: ツール呼び出し完了
ストリーミング UI を構築する
この例は、テキストとツールストリーミングを統合された UI に組み合わせます。エージェントが現在ツールを実行しているかどうかを追跡します(in_tool フラグを使用)。ツールの実行中に [Using Read...] のようなステータスインジケータを表示します。ツールが実行されていないときはテキストが通常にストリーミングされ、ツール完了は「完了」メッセージをトリガーします。このパターンは、マルチステップエージェントタスク中に進捗を表示する必要があるチャットインターフェースに役立ちます。
既知の制限事項
- 構造化出力: JSON 結果は最終的な
ResultMessage.structured_outputにのみ表示され、ストリーミングデルタとしては表示されません。詳細は構造化出力を参照してください。
次のステップ
テキストとツール呼び出しをリアルタイムでストリーミングできるようになったので、これらの関連トピックを探索してください:- インタラクティブ対ワンショットクエリ: ユースケースに応じて入力モードを選択する
- 構造化出力: エージェントから型付き JSON レスポンスを取得する
- 権限: エージェントが使用できるツールを制御する