跳轉到內容

SSE 事件

流式模式(Accept: text/event-stream)下,發起對話繼續對話會以一系列 SSE 事件推送運行過程。本頁列出所有事件類型及解析方式。

幀格式

每一幀 SSE 都使用同樣的信封結構:SSE 的 event 字段恆為 messagedata 字段是一個 JSON 對象:

event: message
data: {"event":"<event_type>","workflow_run_id":"745910371102313","data":{...}}
名稱類型說明
eventstring事件類型,按此字段分發處理
workflow_run_idstring本次運行的 ID,為數字 ID 的字符串形式(如 "745910371102313"),同一次運行的所有事件中該值一致
dataobject事件負載,結構隨事件類型而不同(見下文)

解析規則:

  • data.event 分發,而不是 SSE 的 event 字段(它恆為 message)。
  • 忽略未知事件類型。 事件類型可能隨時新增,只處理已知事件的客戶端可保持向前兼容。
  • 除特別說明外,started_at / finished_at 為 Unix 秒級時間戳,elapsed_time 為秒數。

典型事件序列

一次運行始於 chat_started、止於 chat_finished,中間的事件取決於運行結果:

成功:

chat_started → workflow_started → thinking_started → message (type=think) ...
→ node_tool_use_started / node_tool_use_finished ...
→ thinking_finished → message (type=answer) ...
→ workflow_finished (status=succeeded) → chat_finished

中斷(Agent 需要你補充信息,通過繼續對話恢復):

chat_started → workflow_started → ... → human_interaction_required → chat_finished

注意:中斷的運行不會發送 workflow_finished;繼續被中斷的運行時,恢復後的流不會再次發送 workflow_started

失敗:

chat_started → workflow_started → ... → workflow_finished (status=failed) → chat_finished

最簡客戶端

純問答場景只需處理四種事件,其餘事件都是可選的過程展示:

事件處理方式
messagetype=answerdata.text 追加到正在展示的回答中
human_interaction_required展示問題,攜帶答案調用繼續對話接口
workflow_finished讀取最終 statusoutputs.answer;失敗時展示錯誤
chat_finished關閉流,本次運行結束

會話生命週期

chat_started

每個流的第一個事件。會話和消息記錄已創建;保存 chat_uid(用於追問)和 message_id(用於中斷後繼續)。

名稱類型說明
chat_idint64會話內部 ID
chat_uidstring會話標識,用於後續請求
message_idint64本輪消息 ID
json
{"event":"chat_started","workflow_run_id":"745910371102313","data":{"chat_id":1001,"chat_uid":"ct_9f2c1a5b","message_id":42}}

chat_finished

每個流的最後一個事件,之後服務端關閉連接。

名稱類型說明
chat_idint64會話內部 ID
chat_uidstring會話標識
message_idint64本輪消息 ID
errorstring錯誤詳情,成功時為空
error_messagestring面向用戶的錯誤信息,成功時為空

運行生命週期

workflow_started

Agent 運行已開始。通過繼續對話恢復被中斷的運行時不會發送此事件。

名稱類型說明
workflow_idint64該 Agent 底層工作流的 ID
started_atint64開始時間(Unix 秒)
inputsobject運行輸入
hit_cachebooltrue 時表示答案命中緩存,流會直接進入回答階段

workflow_finished

運行已結束——成功、失敗或被用戶停止。在此讀取最終結果。

名稱類型說明
statusstringsucceeded / failed / stopped
outputsobject運行輸出;outputs.answer 為完整的最終回答文本
elapsed_timenumber運行耗時(秒)
errorstring本地化的錯誤描述,僅 statusfailed 時存在
error_codeint32錯誤碼,僅 statusfailed 時存在
error_messagestring面向用戶的錯誤信息,僅失敗時存在
error_argsobject額外錯誤上下文(如 workflow_run_id),可能省略
process_dataobject[]運行經過的過程階段,僅用於展示
json
{"event":"workflow_finished","workflow_run_id":"745910371102313","data":{"status":"succeeded","elapsed_time":3.21,"outputs":{"answer":"特斯拉(TSLA.US)近期..."}}}

說明:

  • outputs.answer 是權威的完整回答。如果你通過 message 事件拼接了回答,可用它校驗或替換。
  • statusstopped(用戶停止運行)時,outputs.answer 為已生成的部分回答。

回答流式輸出

message

增量文本片段。這是頻率最高的事件,按到達順序拼接 text 即可。

名稱類型說明
textstring增量文本片段
typestringanswer — 最終回答文本;think — 推理過程;process — 階段進度描述
keystring片段所屬流段的標識。相同 key 的片段構成一個連續塊,渲染時按 key 分組
started_atint64該流段開始時間(Unix 秒)
stagestring階段標識,僅 type=process 時存在
stage_titlestring階段進行中的標題,僅 type=process 時存在
stage_finished_titlestring階段完成後的標題,僅 type=process 時存在
outputsobject附加在片段上的額外負載,通常不存在
json
{"event":"message","workflow_run_id":"745910371102313","data":{"text":"特斯拉","type":"answer","key":"n_llm_1:answer","started_at":1752048000}}

解析:

  • 只有 type=answer 的片段屬於用戶可見的回答,全部拼接後與 workflow_finished.outputs.answer 一致。
  • type=think 的片段是 Agent 的中間推理,可放入可摺疊的「思考」區域展示,也可忽略。
  • type=process 的片段描述階段進度,附帶 stage 系列字段用於分組。

思考階段

thinking_started

Agent 進入推理階段(分析問題、規劃工具調用)。在它與 thinking_finished 之間可能出現 type=thinkmessage 事件和工具調用事件。

名稱類型說明
started_atint64開始時間(Unix 秒)

thinking_finished

推理階段結束,隨後是回答文本(type=answermessage)。

名稱類型說明
finished_atint64結束時間(Unix 秒)
elapsed_timeint32推理耗時(秒)

工具調用

Agent 在生成回答的過程中會調用工具(行情、賬戶、聯網搜索等)。每次調用都由一對 started/finished 事件包裹——用 tool_use_id 配對。

這對事件覆蓋所有普通工具調用。只有兩種特殊調用改用各自的事件族上報:派生子智能體(subagent_*,見下文)和把另一個 Agent 作為工具調用(agent_tool_*,見下文)。如果你的 Agent 沒有使用這兩項能力,所有工具調用都只會以 node_tool_use_started / node_tool_use_finished 出現。

node_tool_use_started

一次工具調用已開始。

名稱類型說明
tool_use_idstring本次調用的唯一 ID,用於與 finished 事件配對
tool_namestring工具的本地化展示名(用於界面顯示)
tool_func_namestring與語言無關的穩定工具標識,按工具類型處理邏輯時用它
tool_argsstring調用參數(JSON 字符串)
tipsstring可直接展示的進度文案(如「正在聯網搜索…」)
tip_chipsstring[]tips 配套的短標籤,可能省略
iterationint輪次編號。同一輪(相同 iteration)的調用是並行執行的
started_atint64開始時間(Unix 秒)

node_tool_use_finished

工具調用已結束。

名稱類型說明
tool_use_idstring與 started 事件的 tool_use_id 一致
statusstringsucceeded / failed
errorstring失敗時的錯誤描述
elapsed_timenumber調用耗時(秒)
started_atint64開始時間(Unix 秒)
tool_namestring本地化展示名
tool_func_namestring穩定工具標識
tool_argsstring調用參數(JSON 字符串)
tool_typestring工具類別
tipsstring進度文案
tip_chipsstring[]短標籤,可能省略
iterationint輪次編號
is_thinkingbooltrue 表示調用發生在思考階段
outputsobject過濾後的調用結果,見下

outputs 只攜帶用於展示的字段:

字段說明
outputs.references工具結果引用的來源
outputs.reference_domains引用來源的域名
outputs.query工具執行的查詢
outputs.text工具的原始響應文本
outputs.tool_args解析後的請求參數
outputs.data結構化結果,僅部分工具存在
json
{"event":"node_tool_use_finished","workflow_run_id":"745910371102313","data":{"tool_use_id":"call_abc123","status":"succeeded","elapsed_time":1.42,"tool_name":"聯網搜索","tool_func_name":"web_search","tool_args":"{\"query\":\"TSLA stock news\"}","tool_type":"builtin","tips":"已聯網搜索","iteration":1,"is_thinking":true,"outputs":{"query":"TSLA stock news","references":[{"index":1,"title":"...","url":"..."}]}}}

子智能體事件

Agent 派生子智能體處理子任務時,其生命週期使用獨立的事件族上報,而不是 node_tool_use_*

subagent_started

名稱類型說明
node_idstring派生子智能體的節點 ID
tool_use_idstring本次派生的唯一 ID,與 finished 事件配對
started_atint64開始時間(Unix 秒)
goalstring分配給子智能體的目標
promptstring交給子智能體的完整任務提示詞
subagent_idstring子智能體標識,可能省略
toolsarray授予子智能體的工具列表,可能省略

subagent_progress

子智能體每調用一次自己的工具就發送一次,用於在子智能體卡片內實時渲染時間線。

名稱類型說明
node_idstring派生子智能體的節點 ID
parent_tool_call_idstring所屬 subagent_started 事件的 tool_use_id
subagent_tool_namestring子智能體調用的工具名
subagent_tool_argsstring該調用的參數(JSON 字符串)
subagent_statusstring該調用的狀態:running / succeeded / failed
subagent_duration_msint64該調用耗時(毫秒
subagent_iterationint子智能體內部的輪次編號
started_atint64開始時間(Unix 秒)

subagent_finished

名稱類型說明
node_idstring派生子智能體的節點 ID
tool_use_idstringsubagent_startedtool_use_id 一致
statusstringsucceeded / failed
started_atint64開始時間(Unix 秒)
elapsed_timenumber子智能體總耗時(秒)
errorstring失敗時的錯誤描述
outputsobject子智能體結果:通常包含 goalresultsubagent_tools(其工具調用時間線)

Agent 工具事件

Agent 把另一個 Agent 作為工具調用時,該內部運行使用 agent_tool_* 事件族上報,結構與子智能體事件相似。

agent_tool_started

名稱類型說明
node_idstring調用方節點 ID
tool_use_idstring本次調用的唯一 ID,與 finished 事件配對
agent_tool_namestring被調用 Agent 的標識
titlestring展示標題,可能省略
started_atint64開始時間(Unix 秒)
tool_argsstring調用參數(JSON 字符串)
tool_namestring本地化展示名
tipsstring進度文案,可能省略
tip_chipsstring[]短標籤,可能省略
is_thinkingbooltrue 表示發生在思考階段

agent_tool_progress

被委託 Agent 每進行一次內部工具調用就發送一次。

名稱類型說明
node_idstring調用方節點 ID
parent_tool_call_idstring所屬 agent_tool_started 事件的 tool_use_id
agent_tool_namestring被調用 Agent 的標識
inner_tool_namestring被委託 Agent 調用的內部工具名
inner_tool_argsstring該內部調用的參數(JSON 字符串)
statusstring內部調用的狀態:running / succeeded / failed
duration_msint64內部調用耗時(毫秒
started_atint64開始時間(Unix 秒)
is_thinkingbooltrue 表示發生在思考階段

agent_tool_finished

名稱類型說明
node_idstring調用方節點 ID
tool_use_idstringagent_tool_startedtool_use_id 一致
agent_tool_namestring被調用 Agent 的標識
statusstringsucceeded / failed
started_atint64開始時間(Unix 秒)
elapsed_timenumber總耗時(秒)
errorstring失敗時的錯誤描述
tool_argsstring調用參數(JSON 字符串)
outputsobject被委託 Agent 的結果
tool_typestring工具類別
tipsstring進度文案,可能省略
tip_chipsstring[]短標籤,可能省略
is_thinkingbooltrue 表示發生在思考階段

中斷

human_interaction_required

運行已暫停:Agent 需要你補充信息或確認。收集 questions 的答案後調用繼續對話——答案以 tool_call_id 為鍵。

名稱類型說明
node_idstring觸發中斷的節點 ID
tool_call_idstring本次詢問的 ID,繼續對話時作為 answers_by_tool_call 的外層鍵
questionsobject[]需要回答的問題
∟ questionstring問題文本,繼續對話時作為 answers_by_tool_call 的內層鍵
∟ optionsobject[]選項,為空表示自由輸入
∟∟ descriptionstring選項文本
∟ multi_selectboolean是否可多選
message_idint64被暫停消息的 ID,用於繼續對話接口的 URL
chat_idint64所屬會話的 ID
json
{"event":"human_interaction_required","workflow_run_id":"745910371102313","data":{"node_id":"n_ask_human","tool_call_id":"call_abc123","questions":[{"question":"你想查看哪個時間範圍?","options":[{"description":"近一週"},{"description":"近一月"}],"multi_select":false}],"message_id":43,"chat_id":1001}}

此事件之後流以 chat_finished 結束;被中斷的運行不會發送 workflow_finished

輔助事件

以下事件均為信息性事件,最簡客戶端可全部忽略。

query_masked

用戶提問中的敏感內容在處理前被脫敏。展示時用 masked_query 替換原始提問。

名稱類型說明
raw_querystring原始用戶提問
masked_querystring脫敏後的提問

plan_changed

Agent 創建或更新了任務計劃。

名稱類型說明
node_idstring規劃節點的 ID
started_atint64變更時間(Unix 秒)
outputsobject當前計劃內容

此事件額外攜帶一個頂層 tool_name 字段(與 data 同級),標識規劃工具。

context_compress_started / context_compress_finished

長對話會觸發上下文壓縮,這兩個事件包裹壓縮過程。與其他事件不同,這裡的時間戳是 RFC 3339 字符串。

context_compress_started

名稱類型說明
started_atstring開始時間(RFC 3339)
inputsobject壓縮輸入摘要

context_compress_finished

名稱類型說明
created_atstring結束時間(RFC 3339)
inputsobject壓縮輸入摘要
outputsobject壓縮結果摘要