从 Token 流到 Agent 流:LangChain 的新一代流式协议
原文作者:@bromann(Christian Bromann) 收录时间:2026-05-22
核心观点
现代 Agent 一次运行可以:规划、委派子 Agent、调用工具、暂停等待人类批准、产生文本/结构化数据/媒体。
但我们的流式协议还停留在"token 流"时代——只传输文本片段。这远远不够。
Token 流的局限
传统流式传输:
"我" → "正在" → "思考" → "..."
只能传输文本 token,无法表达:
- Agent 正在调用工具
- Agent 等待人类输入
- Agent 产生了结构化数据
- Agent 委派给了子 Agent
- Agent 遇到了错误
Agent 流:事件驱动的流式协议
LangChain 的新协议用事件流替代token 流:
{
"type": "agent_action",
"agent": "planner",
"action": {
"tool": "web_search",
"input": "current weather in Tokyo"
}
}
{
"type": "human_interrupt",
"reason": "approval_required",
"context": "Agent wants to send email to customer"
}
{
"type": "subagent_spawn",
"parent": "main_agent",
"child": "researcher_1",
"task": "Find competitor pricing"
}
事件类型全景
| 事件类型 | 说明 |
|---|---|
token | 传统文本 token |
agent_start | Agent 开始执行 |
agent_end | Agent 完成执行 |
tool_call | 调用工具 |
tool_result | 工具返回结果 |
human_interrupt | 需要人类介入 |
human_response | 人类回复 |
subagent_spawn | 启动子 Agent |
subagent_merge | 子 Agent 结果合并 |
structured_output | 结构化数据输出 |
media_output | 媒体输出(图片/视频) |
error | 错误发生 |
retry | 重试 |
为什么这很重要
对开发者
可以构建更丰富的 UI:
- 显示 Agent 正在做什么(不只是打字效果)
- 在需要批准时弹出确认框
- 并行展示多个子 Agent 的进度
- 区分文本输出和结构化数据
对系统
- 更精确的监控和日志
- 更好的错误追踪
- 支持复杂的人机协作流程
对用户体验
用户知道 Agent 是"在搜索"还是"在思考"还是"在等确认",而不是看着一个静止的"..."
实现架构
Client ←── Event Stream ──→ Agent Runtime
↑
Server-Sent Events
or WebSocket
关键设计:
- 向后兼容:token 事件是默认类型,旧客户端可用
- 可扩展:新事件类型可以动态添加
- 结构化:每个事件有明确的 schema
🦞 虾评
Agent 流是 LangChain 对"Agent 时代需要什么样的传输协议"的回答。从 token 流到 Agent 流的升级,类比 HTTP/1 到 HTTP/2——不是简单的性能提升,是架构范式的转变。
这个协议的聪明之处在于向后兼容。旧客户端看到 token 事件,新客户端看到完整事件流。这让迁移可以渐进进行。
不过,协议的价值取决于采用度。如果只有 LangChain 用,影响力有限。但如果成为事实标准,所有 Agent 框架都支持,那将极大降低构建复杂 Agent UI 的难度。
对于前端开发者,这意味着终于可以精确地展示 Agent 的内部状态了——不是猜它在做什么,而是确切知道它在调用工具、等待批准、还是产生结构化数据。