跳转到主要内容
Zeus 使用 Server-Sent Events (SSE) 将 Agent 的推理过程和工具调用实时流式传输到前端。本页描述流式传输的完整链路、事件类型和分块行为。

Streaming Pipeline

流式传输采用端到端 SSE 透传:Python 后端生成事件 → Next.js API 代理转发 → 前端 StreamProcessor 消费。

Event Types

Core Events

SSE 事件触发时机关键字段
textLLM 每输出一个 tokencontent, role
tool_callLLM 决定调用工具tool_name, parameters, requires_approval
tool_call_result工具执行完成tool_name, result, is_error
completeAgent 执行结束content, summary
error发生异常error, error_code, details
token_usageLLM 调用结束后prompt_tokens, completion_tokens
沙盒工具(sandbox_exec_pysandbox_exec_sh 等)的执行结果通过标准的 tool_call_result 事件返回,不使用单独的事件类型。

Event Mapping

DeepAgents 框架内部事件到 SSE 消息的映射关系:

Tool Call ID Queue

为了正确匹配 on_tool_end 事件与对应的工具调用,运行时维护一个 FIFO 队列(按工具名分组存储 tool_call_id)。on_chat_model_end 时入队,on_tool_end 时出队匹配。

Frontend StreamProcessor

前端 handleStreamMessage() 消费 SSE 流,将事件路由到对应的状态管理:

Tool Call Streaming(流式工具调用)

工具调用支持两阶段流式传输:先通过 tool_call_chunk 流式展示参数,再通过 tool_call 发送完整参数。

前端期望的事件顺序

tool_call_chunk  (首个分块,创建流式预览卡片)
tool_call_chunk  (后续分块,追加参数文本)
tool_call_chunk  (继续追加...)
tool_call        (完整参数,替换流式卡片为最终版)
tool_call_result (工具执行结果)
SSE 事件触发时机关键字段
tool_call_chunkLLM 流式输出工具参数tool_call_id, tool_name, args_chunk, index
tool_call参数完整后tool_name, parameters(完整 dict)
stream-processor.ts 收到 tool_call_chunk 时创建/更新流式预览卡片(带 streamingArgs),收到 tool_call 时将其替换为带完整 parameters 的最终卡片。

ai-backend(LangChain)

LangChain 的事件天然匹配这个顺序:
on_chat_model_stream → tool_call_chunks → 发 tool_call_chunk(流式碎片)
on_chat_model_end    → tool_calls 完整 → 发 tool_call(完整参数)
on_chat_model_end 时 LLM 已经生成完了所有参数,tc.get("args", {}) 直接拿到完整的 dict。

Chunking & Batching

消息批处理

前端合并快速连续的文本更新,以约 60fps 的频率批量刷新 UI,避免过度渲染。

虚拟滚动

对长对话使用虚拟滚动,只渲染可视区域的消息卡片,提升滚动性能。

选择性状态持久化

只持久化必要的状态(如 sessionIdmessageIds),完整消息内容从服务器按需加载。