Plan-ReAct，好像也有叫： Plan-and-Solve，也有叫：Plan-Execute


在复杂的 AI 任务中，如果直接让智能体进行推理（Reasoning），它可能会因为任务目标过大而陷入“逻辑混乱”或执行路径偏移。为了解决这一问题，Solon AI 为 ReActAgent 引入了 **规划（Planning）** 能力。

通过启用规划，智能体在正式进入 Reason -> Act 循环之前，会先根据用户指令生成一份全局的执行计划。



### 1、为什么需要规划？

普通的 ReAct 模式是“局部决策”，而规划模式是“全局统筹”：

* 抗干扰性：即便中间某个工具调用（Action）返回了无关信息，全局计划能像导航仪一样纠正路径。
* 进度感知：智能体在每一轮推理时，都清楚自己处于 `Step N/M`，从而避免重复工作。
* 逻辑拆解：自动将模糊的大目标（如“写一份研报”）拆解为确定性的子任务（搜集数据 -> 对比 -> 总结）。

### 2、如何启用规划？

只需通过 `.planningMode(true)` 即可激活该能力。

```java
ReActAgent agent = ReActAgent.of(chatModel)
        .name("researcher")
        .role("高级研究助手")
        // 1. 开启规划能力
        .planningMode(true) 
        // 2. (可选) 自定义规划指令。Solon AI 已内置高效默认模板，通常无需修改
        .planningInstruction(trace -> "请将任务分解为详细的步骤，并按顺序执行。")
        .defaultToolAdd(new SearchTools())
        .build();

// 发起调用：此时 Agent 会先输出 [Plans]，再开始推理
ReActResponse resp = agent.prompt("调查 Solon 框架在 2025 年的技术趋势并写一份报告").call();
```

也可在调用时启用：

```
ReActResponse resp = agent.prompt("调查 Solon 框架在 2025 年的技术趋势并写一份报告").options(o->o.planningMode(true)).call();
```


### 3、规划数据的透明化

启用规划后，`ReActTrace` 内部会维护一个计划栈，开发者可以随时访问这些数据：



| 属性/方法 | 描述 | 业务价值 |
| -------- | -------- | -------- |
| `getPlans()`                   | 获取当前的计划列表     | 用于在前端 UI 展示任务清单。     |
| `getFormattedPlans()`     | 格式化的计划文本        | 将计划列表转换为 Markdown 数字列表注入提示词。     |
| `getPlanProgress()`         | 当前进度描述             | 告诉 LLM：“你现在正在处理 5 个步骤中的第 2 步”。     |



### 4、最佳实践建议

* 模型匹配：规划属于“重逻辑”操作，建议配合具备强推理能力的模型（如 Claude 3.5, GPT-4o, DeepSeek-V3）。
* UI 增强：利用 resp.getTrace().getPlans()，可以在对话界面实时打勾显示已完成的步骤，极大缓解用户的等待焦虑。
* 任务边界：如果任务非常简单（如“现在几点了？”），开启规划会增加一次 LLM 调用成本，建议通过业务逻辑动态决定是否启用。


