Solon v3.9.3

agent - 同步与流式响应(call 与 stream)

</> markdown
2026年2月2日 下午7:42:20

在 Solon AI 中,智能体(Agent)提供了两种主要的交互模式:同步等待的 call() 和异步流式的 stream()。这两种接口分别对应了不同的业务场景。

1、交互模式对比与应用示例

A. 同步调用 (Call)

适用于后台任务处理、数据抓取或不需要实时展示推理过程的场景。

ReActAgent agent = ReActAgent.of(chatModel)
        .defaultToolAdd(new WeatherTools())
        .build();

// 同步获取最终结果
AgentResponse resp = agent.prompt("北京天气怎么样?")
        .call();

System.out.println(resp.getContent());

B. 流式输出 (Stream)

适用于 Web 交互界面、实时对话机器人。它能即时反馈智能体的“思考”过程(Thought/Reasoning),显著提升用户体验。

// 获取流式输出块(基于 Project Reactor 的 Flux)
Flux<AgentChunk> chunks = agent.prompt("北京天气怎么样?")
        .stream();

chunks.doOnNext(chunk -> {
        if (chunk instanceof ReasonChunk) {
            System.out.println("[思考]: " + chunk.getContent());
        } else if (chunk instanceof ActionChunk) {
            actionFound.set(true);
            System.out.println("[动作]: 正在调用工具...");
        } else if (chunk instanceof ReActChunk) {
            System.out.println("[结果]: " + chunk.getContent());
        }
    })
    .blockLast(); // 阻塞直至流结束

2、响应内容块 (AgentChunk) 的层级与分类

在流式输出中,不同的智能体会根据其内部逻辑发送不同类型的 AgentChunk。通过识别这些类型,你可以精确控制 UI 界面上的展现形式。

归属智能体输出块类型描述
SimpleAgentChatChunk基础对话内容块
SimpleChunk最终聚合的内容块(智能体生成的最终答案)
ReActAgentPlanChunk规划阶段的文本
ReasonChunk推理/思考过程 (Thought)
ActionChunk工具调用动作信息 (Action)
ReActChunk推理循环的聚合块(智能体生成的最终答案)
TeamAgentNodeChunk子节点智能体的输出块
SupervisorChunk指导者/调度者的输出块
TeamChunk团队协作的最终聚合块(整个团队生成的最终答案)

在 TeamAgent 智能体里,可能会输出上面所有的块类型(未来的定制智能体,可能还会输出其它块)。

3、开发建议

  • 类型判断:

在流式处理中,建议使用 instanceof 来区分推理过程和最终答案。通常 UI 界面会将 ReasonChunk 渲染为“灰色思考文字”,而将最终答案渲染为正式气泡。

  • 异常处理

call() 接口会直接抛出异常,而 stream() 接口的异常需要通过 Flux 的 onError 逻辑进行捕获。

  • 性能调优

对于 ReActAgent,设置合适的 maxSteps 是防止推理死循环(Tool Loop)的关键保障。