Streaming Pipeline
流式传输采用端到端 SSE 透传:Python 后端生成事件 → Next.js API 代理转发 → 前端 StreamProcessor 消费。Event Types
Core Events
| SSE 事件 | 触发时机 | 关键字段 |
|---|---|---|
text | LLM 每输出一个 token | content, role |
tool_call | LLM 决定调用工具 | tool_name, parameters, requires_approval |
tool_call_result | 工具执行完成 | tool_name, result, is_error |
complete | Agent 执行结束 | content, summary |
error | 发生异常 | error, error_code, details |
token_usage | LLM 调用结束后 | prompt_tokens, completion_tokens |
sandbox_exec_py、sandbox_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 流,将事件路由到对应的状态管理:
Chunking & Batching
消息批处理
前端合并快速连续的文本更新,以约 60fps 的频率批量刷新 UI,避免过度渲染。虚拟滚动
对长对话使用虚拟滚动,只渲染可视区域的消息卡片,提升滚动性能。选择性状态持久化
只持久化必要的状态(如sessionId 和 messageIds),完整消息内容从服务器按需加载。