DeepAgents · 从入门到精通 目录

§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"。漏了就只见主代理。

下一章,讲最该认真对待的能力:人机协同。