跳轉到主要內容
根據預設,Agent SDK 會在 Claude 完成生成每個回應後產生完整的 AssistantMessage 物件。若要在文字和工具呼叫生成時接收增量更新,請在選項中將 include_partial_messages(Python)或 includePartialMessages(TypeScript)設定為 true 來啟用部分訊息串流。
本頁涵蓋輸出串流(即時接收權杖)。如需輸入模式(如何傳送訊息),請參閱傳送訊息給代理。您也可以透過 CLI 使用 Agent SDK 串流回應

啟用串流輸出

若要啟用串流,請在選項中將 include_partial_messages(Python)或 includePartialMessages(TypeScript)設定為 true。這會導致 SDK 產生包含原始 API 事件的 StreamEvent 訊息(當它們到達時),以及通常的 AssistantMessageResultMessage 您的程式碼需要:
  1. 檢查每個訊息的類型以區分 StreamEvent 和其他訊息類型
  2. 對於 StreamEvent,提取 event 欄位並檢查其 type
  3. 尋找 content_block_delta 事件,其中 delta.typetext_delta,其中包含實際的文字區塊
下面的範例啟用串流並在文字區塊到達時列印它們。注意巢狀類型檢查:首先是 StreamEvent,然後是 content_block_delta,然後是 text_delta

StreamEvent 參考

啟用部分訊息時,您會收到包裝在物件中的原始 Claude API 串流事件。該類型在每個 SDK 中有不同的名稱:
  • PythonStreamEvent(從 claude_agent_sdk.types 匯入)
  • TypeScriptSDKPartialAssistantMessage,其中 type: 'stream_event'
兩者都包含原始 Claude API 事件,而不是累積的文字。您需要自己提取和累積文字增量。以下是每種類型的結構:
parent_tool_use_id 欄位在 Python 中始終為 None,在 TypeScript 中始終為 null。串流事件僅針對主工作階段發出;來自子代理的令牌級增量不會被轉發。若要將輸出歸因於子代理,請使用完整訊息,其中包含 parent_tool_use_id。請參閱偵測子代理叫用 event 欄位包含來自 Claude API 的原始串流事件。常見的事件類型包括:

訊息流

啟用部分訊息後,您會按此順序接收訊息:
未啟用部分訊息(Python 中的 include_partial_messages、TypeScript 中的 includePartialMessages)時,您會收到除 StreamEvent 外的所有訊息類型。常見類型包括 SystemMessage(工作階段初始化)、AssistantMessage(完整回應)、ResultMessage(最終結果)和指示何時壓縮對話歷史記錄的緊湊邊界訊息(TypeScript 中的 SDKCompactBoundaryMessage;Python 中具有子類型 "compact_boundary"SystemMessage)。

串流文字回應

若要在生成文字時顯示它,請尋找 content_block_delta 事件,其中 delta.typetext_delta。這些包含增量文字區塊。下面的範例在每個區塊到達時列印它:

串流工具呼叫

工具呼叫也會增量串流。您可以追蹤工具何時開始、在生成時接收其輸入,以及查看何時完成。下面的範例追蹤目前被呼叫的工具並在串流進來時累積 JSON 輸入。它使用三種事件類型:
  • content_block_start:工具開始
  • content_block_delta 搭配 input_json_delta:輸入區塊到達
  • content_block_stop:工具呼叫完成

建立串流 UI

此範例將文字和工具串流結合成一個有凝聚力的 UI。它追蹤代理目前是否正在執行工具(使用 in_tool 旗標)以顯示狀態指示器,例如在工具執行時顯示 [Using Read...]。文字在不在工具中時正常串流,工具完成會觸發「完成」訊息。此模式對於需要在多步驟代理任務期間顯示進度的聊天介面很有用。

已知限制

  • 結構化輸出:JSON 結果僅出現在最終 ResultMessage.structured_output 中,而不是作為串流增量。如需詳細資訊,請參閱結構化輸出

後續步驟

現在您可以即時串流文字和工具呼叫,請探索這些相關主題: