§11 流式输出:看清代理在干嘛
先给结论:DeepAgents 内建流式。三种模式,对应三种观察粒度。
我第一次跑长任务,终端一片静默。十几秒没输出,我以为它挂了。 后来开了流式,才看到它在一步步调工具、写文件。安心多了。
三种模式
| 模式 | 粒度 | 适合 |
|---|---|---|
updates |
节点级进度 | 宏观进度追踪 |
messages |
token 级 | 聊天式打字机 |
custom |
自定义事件 | 进度百分比等 |
updates 模式:看节点
for event in agent.stream(
{"messages": [{"role": "user", "content": "你好"}]},
config={"configurable": {"thread_id": "123"}},
stream_mode="updates",
subgraphs=True, # 看子代理
version="v2",
):
print(event)
messages 模式:打字机
for chunk in agent.stream(input, stream_mode="messages",
subgraphs=True, version="v2"):
if chunk["type"] == "messages":
token, _ = chunk["data"]
if token.type == "tool": # 工具结果
print(f"\n工具结果: {str(token.content)[:150]}")
elif token.type == "ai" and token.content: # 文本
print(token.content, end="", flush=True)
v2 格式与命名空间
新版本用 version="v2"。每个 chunk 带 ns(命名空间):
() → 主 Agent
("tools:abc123",) → task 创建的子 Agent
("tools:abc123", "...") → 子 Agent 内部节点
这样你能分清:这段输出,是主代理还是子代理说的。
标叔的结论:做 UI 用 messages,做后台监控用 updates,做进度条用 custom。按需选。
注意:看子代理细节,必须
subgraphs=True(旧版stream_subgraphs=True)且version="v2"。漏了就只见主代理。
下一章,讲最该认真对待的能力:人机协同。