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


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


#### A. 同步调用 (Call)

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

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

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

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

#### B. 流式输出 (Stream)

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


```java
// 获取流式输出块（基于 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 ActionEndChunk) {
            System.out.println("[动作]: 调用工具完成...");
        } else if (chunk instanceof ReActChunk) {
            System.out.println("[结果]: " + chunk.getContent());
        }
    })
    .blockLast(); // 阻塞直至流结束
```

### 2、同步调用结果（AgentResponse）



| 响应类型 | 描述 | 
| -------- | -------- | 
| SimpleResponse     | 简单智能体，同步调用结果     | 
| ReActResponse     | 反思型智能体，同步调用结果     | 
| TeamResponse     | 协作型智能体，同步调用结果     | 


#### AgentResponse 主要属性（实现类，可能会有扩展属性）：



| 方法 | 描述 | 
| -------- | -------- | 
| `getTrace`     | 获取跟踪     | 
| `getSession`     | 获取当前会话     | 
| `getContext`     | 获取计算图上下文（即任务状态快照）     | 
| `getMetrics`     | 获取执行指标（如 Token 消耗、耗时等）     | 
| `getMessage`     | 获取消息     | 
| `getContent`     | 获取消息内容     | 
| `toBean`          | 将消息内容转换为结构化对象（通常用于解析 JSON 格式的 Final Answer）     | 





### 3、流式响应内容块 (AgentChunk) 的层级与分类

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


| 归属智能体 | 输出块类型 | 描述 |
| -------- | -------- | -------- |
| Agent     | AgentChunk     | 智能体流块接口（定义公共的基础方法）     |
| | |
| SimpleAgent     | ChatChunk     | 基础对话内容块     |
|       | SimpleChunk     | 最终聚合的内容块（智能体生成的最终答案）     |
| ReActAgent     | PlanChunk     | 规划阶段的文本     |
|       | ReasonChunk     | 推理/思考 “过程” 块 (Reason)     |
|       | ThoughtChunk     | 想法聚合块 (Thought)，相当于是 ReasonChunk 的聚合    |
|       | ActionStartChunk     | 工具调用开始 (Action)，如果工具执行很久可先提示用户。v3.9.6 后支持     |
|       | ActionEndChunk     | 工具调用结束 (Action)     |
|       | ReActChunk     | 推理循环的聚合块（智能体生成的最终答案）     |
| TeamAgent     | NodeChunk     | 子节点智能体的输出块     |
|       | SupervisorChunk     | 指导者/调度者的输出块     |
|       | TeamChunk     | 团队协作的最终聚合块（整个团队生成的最终答案）     |


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


#### AgentChunk 主要属性（实现类，可能会有扩展属性）：


| 方法                | 描述          | 
| ------------ | -------- | 
| `getAgentName`     | 获取当前产生块的智能体名字     | 
| `getSession`          | 获取所属会话           | 
| `getMessage`        | 获取当前块的消息       | 
| `getMeta`             | 获取当前块的元数据    | 
| `hasMeta`             | 是否当前块有元数据     | 
| `hasContent`        | 是否有当前块内容       | 
| `getContent`         | 获取当前块的消息内容     | 



#### 开发建议

* 类型判断：

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

* 异常处理

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

* 性能调优

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