智能体架构范式总结(React、Plan-And-Solve、Reflection)

智能体经典范式

1. 范式概述

智能体的核心是连接 LLM 与外部世界,通过不同的"思考-行动"策略完成任务。三大经典范式代表了三种截然不同的问题解决策略:

  • ReAct:边想边做,动态调整。
  • Plan-and-Solve:三思后行,先规划后执行。
  • Reflection:自我批判,反思迭代优化。

2. ReAct (Reason + Act)

2.1 核心机制

  • 核心思想 :将推理 (Reasoning)行动 (Acting) 显式结合,形成 "思考-行动-观察" 循环。
  • 解决痛点:弥补"纯思考 (CoT)"易幻觉/无交互,与"纯行动"缺规划/无纠错的缺陷。
  • 工作流
    1. Thought (思考):内心独白(分析现状、拆解任务、规划下一步)。
    2. Action (行动) :调用外部工具(如 Search['query'])或输出 Finish[最终答案]
    3. Observation (观察):工具执行后返回的结果。
    4. 循环:将 Action 和 Observation 追加至历史记录,直到得出答案或触发最大步数限制。
  • 适用场景:需外部知识(实时搜索)、需精确计算(计算器)、需 API 交互。

2.2 工程实现要点

  • 工具三要素:名称 (Name)、描述 (Description, LLM 依赖此判断何时调用)、执行逻辑 (Function)。
  • Prompt 模板 :明确角色、注入可用工具清单、强制 Thought/Action 输出格式、动态拼接历史记录。
  • 核心循环:格式化 Prompt → 调用 LLM → 正则解析输出 → 执行工具/结束 → 整合历史上下文。
  • 安全机制 :设置 max_steps 防止智能体陷入无限循环。

2.3 优劣势与调试

维度 优势 局限性
可解释性 Thought 链清晰展示决策"心路历程" -
规划能力 走一步看一步,可根据观察结果动态纠错 缺乏全局观,易陷局部最优或原地打转
能力边界 LLM 规划 + 工具执行,突破知识/计算局限 强依赖 LLM 逻辑推理与格式化输出能力
工程效率 - 串行调用多次,耗时/成本高;Prompt 格式脆弱

调试技巧

  1. 打印完整最终 Prompt(追溯决策源头)。
  2. 打印 LLM 原始输出(判断是模型未遵循格式,还是解析正则有误)。
  3. 验证工具的输入输出格式是否匹配。
  4. 增加 Few-shot 示例(提供成功的 T-A-O 案例)引导模型。
  5. 更换更强模型或设 temperature=0 保证确定性。

3. Plan-and-Solve (先谋后动)

3.1 核心机制

  • 核心思想 :解决复杂多步任务易"偏离轨道"的问题,将流程解耦为规划执行两阶段。
  • 工作流
    1. 规划阶段 (Planning):接收完整问题,输出结构化、分步骤的行动计划。
    2. 执行阶段 (Solving):严格按计划逐条执行,每一步依赖原始问题、完整计划与历史执行结果。
  • 形式化表达
    • 生成计划: P = π p l a n ( q ) P = \pi_{plan}(q) P=πplan(q)
    • 逐步执行: s i = π s o l v e ( q , P , s < i ) s_i = \pi_{solve}(q, P, s_{<i}) si=πsolve(q,P,s<i)
  • 适用场景:结构性强、可清晰分解的任务(多步数学应用题、报告撰写、代码生成)。

3.2 工程实现要点

  • Planner Prompt :强制输出结构化格式(如 Python 列表 ["步骤1", "步骤2"]),极大简化代码解析,提升稳定性。
  • Executor 状态管理:记录每步执行结果,作为上下文传递给后续步骤,确保信息链条不断裂。
  • 执行 Prompt:需包含原始问题、完整计划、历史步骤结果、当前待执行的具体步骤。

3.3 优劣势

维度 优势 局限性
目标一致性 先画蓝图再施工,避免中间步骤迷失方向 依赖初始计划质量,若计划有误则全盘皆错
结构性 任务拆解清晰,适合复杂逻辑推理 执行中不易动态调整,缺乏对外部反馈的灵活响应
稳定性 格式化输出便于解析,执行路径明确 不适合探索性强、需频繁试错的任务

4. Reflection (反思迭代)

这里做了简化,只画了存入"反思文本 (Reflective text)"。但在实际的工程实现和经典的 Reflexion 论文中,长期记忆 (Experience) 通常不仅包含反思,还会(选择性)包含以前几轮的短期记忆 (Trajectory)。

4.1 核心机制

  • 核心思想 :为智能体引入事后自我校正循环,像人类一样审视初稿、发现不足、迭代优化。
  • 解决痛点:初始答案可能存在谬误或效率低下,一次性执行无法保证高质量。
  • 工作流
    1. 执行 (Execution):使用 ReAct/Plan-and-Solve 等方法生成初步解决方案("初稿")。
    2. 反思 (Reflection):调用独立 LLM 扮演"评审员",从事实性、逻辑、效率、遗漏等维度评估,生成结构化反馈。
    3. 优化 (Refinement):将"初稿"和"反馈"作为新上下文,生成修订稿。
    4. 循环:重复迭代,直到不再发现新问题或达到最大迭代次数。
  • 形式化表达
    • 生成反馈: F i = π r e f l e c t ( T a s k , O i ) F_i = \pi_{reflect}(Task, O_i) Fi=πreflect(Task,Oi)
    • 优化输出: O i + 1 = π r e f i n e ( T a s k , O i , F i ) O_{i+1} = \pi_{refine}(Task, O_i, F_i) Oi+1=πrefine(Task,Oi,Fi)
  • 适用场景:对质量/准确性要求极高的任务(关键代码生成、技术报告、复杂逻辑推演、决策支持)。

4.2 工程实现要点

  • 短期记忆模块:存储每次"执行-反思"循环的完整轨迹,避免冗余信息传入评审员。
  • 评审员 Prompt:需严格、有针对性(如"极其严格且专注于算法效率"),驱动深度优化。
  • 终止条件:反思阶段判断"无需改进"或达到最大迭代次数。

4.3 成本收益分析

维度 收益 成本
质量 从"合格"到"优秀"的跃迁,修复逻辑漏洞 每轮迭代至少增加 2 次 LLM 调用
鲁棒性 内部纠错,不依赖外部工具反馈 串行过程,任务延迟显著提高
记忆 形成短期经验记录,支持多模态反思 提示工程复杂度上升,需为不同阶段设计 Prompt

策略定位:典型的"以成本换质量",适合高质量要求、实时性宽松的场景。


5. 三大范式综合对比与选择策略

特性 ReAct Plan-and-Solve Reflection
决策模式 反应式:走一步看一步,动态调整 蓝图式:先全局规划,后严格施工 迭代式:执行-反思-优化,持续改进
纠错方式 根据外部 Observation 动态调整 依赖初始计划质量,执行中不易改道 内部自我批判,事后修正逻辑/策略错误
上下文依赖 历史 Action + Observation 完整 Plan + 历史 Step Results 初稿 + 评审反馈 + 历史迭代轨迹
核心优势 环境适应性强,适合探索性任务 结构稳定,目标一致性高 质量跃迁,鲁棒性强
主要局限 缺全局观,易陷局部最优,效率低 计划有误则全盘皆错,灵活性差 成本高,延迟大,Prompt 复杂
最佳场景 需外部工具交互、实时信息获取 逻辑严密、可清晰拆解的结构性任务 高质量要求、复杂代码/报告生成
成本/延迟 中(多次工具调用) 中(多次步骤执行) 高(多轮反思+优化)

6. 核心总结

  • ReAct 胜在灵活与交互,适合需要不断获取外部信息并调整策略的场景。
  • Plan-and-Solve 胜在稳定与全局观,适合步骤明确、需严格逻辑传递的复杂任务。
  • Reflection 胜在质量与深度,适合对结果准确性、可靠性有极高要求的关键任务。
  • 智能体开发本质Prompt 工程 + 状态管理 + 工具调度 + 迭代策略 的闭环。
  • 选择策略:根据任务的核心需求(探索性/结构性/高质量)和约束(实时性/成本)选择最合适的范式,或组合使用。
相关推荐
qq_4260039615 分钟前
多语言新增语种全量测试策略的测试范围
前端·javascript·python·自动化
frjc26 分钟前
Node.js 与 npm 极简安装教程
前端·npm·node.js
IMPYLH27 分钟前
HTML 的 <main> 元素
前端·html
深念Y30 分钟前
微服务抽取路线图:从胖单体到 ARM 集群
前端·arm开发·数据库·后端·微服务·云原生·架构
雪芽蓝域zzs1 小时前
Vue3 + Vite本地模拟数据(读取 JSON 数据)
前端
亿元程序员1 小时前
还有高手?用Shader让图片中的3D圆环转起来!
前端
灯澜忆梦1 小时前
【基于GO的Web开发14】gin请求重定向
前端·后端·golang·gin
qq_452396231 小时前
第十一篇:《前端性能优化体系:从加载到交互的全链路》
前端·性能优化·交互
Mh1 小时前
听说我兄弟喜欢跑车,所以必须安排上
前端·javascript·vue.js