Solon v4.1.0

react - 规划模式(Plan-ReAct)

</> markdown
2026年9月7日 上午9:55:52

Plan-ReAct,好像也有叫: Plan-and-Solve,也有叫:Plan-Execute

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

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

1、为什么需要规划?

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

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

2、如何启用规划?

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

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

// 同步调用:计划可在完成后从 ReActTrace 读取
ReActResponse resp = agent.prompt("调查 Solon 框架在 2025 年的技术趋势并写一份报告").call();

也可在调用时启用:

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

3、规划数据的透明化

启用规划后,ReActTrace 内部会维护计划列表。同步调用完成后可从 Trace 读取;需要实时更新 UI 时,应订阅 PlanEvent,而不是依赖正文中出现 [Plans] 字样:

agent.prompt("调查 Solon 框架在 2025 年的技术趋势并写一份报告")
        .stream()
        .ofType(PlanEvent.class)
        .subscribe(event -> {
            // getPlanStage(): CREATE / PROGRESS / REVISE
            ui.updatePlans(event.getPlanStage(), event.getPlans());
        });
属性/方法描述业务价值
getPlans()获取当前的计划列表用于在前端 UI 展示任务清单。
getFormattedPlans()格式化的计划文本将计划列表转换为 Markdown 数字列表注入提示词。
getPlanProgress()当前进度描述告诉 LLM:“你现在正在处理 5 个步骤中的第 2 步”。

4、最佳实践建议

  • 模型匹配:规划属于“重逻辑”操作,建议配合具备强推理能力的模型(如 Claude 3.5, GPT-4o, DeepSeek-V3)。
  • UI 增强:同步调用结束后可读取 resp.getTrace().getPlans();实时展示应订阅 PlanEvent,它是计划阶段事件,不是整个请求的终态。
  • 任务边界:如果任务非常简单(如“现在几点了?”),开启规划会增加一次 LLM 调用成本,建议通过业务逻辑动态决定是否启用。