一 智能体经典范式构建

一 智能体经典范式构建 智能体经典范式构建 — 学习笔记来源《Hello Agents》第四章 | 核心主题从零实现 ReAct、Plan-and-Solve、Reflection 三大智能体范式一、章节定位与学习目标本章承上启下上一章讲解了 LLM 的 Transformer 架构与交互方法本章将这些理论转化为实践——亲手构建智能体。为什么要重复造轮子直接使用高度抽象的框架LangChain、LlamaIndex不利于理解底层设计机制亲手处理工程问题输出解析、重试、防死循环是培养系统设计能力最直接的方式掌握设计原理后才能从使用者转变为创造者具备深度定制能力本章三大范式一览范式核心策略比喻ReAct边想边做动态调整经验丰富的侦探随线索调整方向Plan-and-Solve先规划后执行建筑师先画蓝图再施工Reflection自我反思与迭代优化完成初稿后校对、验算二、环境准备与基础工具4.12.1 依赖安装pip install openai python-dotenv2.2 API 配置项目根目录创建.env文件LLM_API_KEYYOUR-API-KEY LLM_MODEL_IDYOUR-MODEL LLM_BASE_URLYOUR-URL2.3 HelloAgentsLLM 客户端封装设计要点统一封装模型服务交互细节主逻辑更专注智能体构建优先使用传入参数未提供则从环境变量加载默认使用流式响应streamTrue核心方法think(messages, temperature)返回完整响应文本关键代码结构__init__初始化校验必要参数think调用chat.completions.create处理流式响应逐块拼接返回三、ReAct 范式4.23.1 核心思想ReAct Reasoning Acting由 Shunyu Yao 于 2022 年提出。解决的问题纯思考型如 CoT无法与外部世界交互易产生幻觉纯行动型缺乏规划和纠错能力。ReAct 将两者结合。3.2 工作流程Thought → Action → Observation 循环问题 q │ ▼ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ Thought │───▶│ Action │───▶│ Observation │ │ (内心独白) │ │ (调用工具) │ │ (工具返回结果) │ └─────────┘ └─────────┘ └─────────────┘ ▲ │ └──────────── 追加到历史记录 ◀──────────────────┘ │ ▼ (循环直到 Thought 判断任务完成) Finish[最终答案]形式化表达第 t 步(th_t, a_t) π(q, (a_1,o_1),...,(a_{t-1},o_{t-1}))环境执行o_t T(a_t)循环直到模型判断任务完成3.3 关键组件(1) 工具定义一个良好定义的工具包含三个核心要素名称Name唯一标识符如Search描述Description自然语言说明用途最关键LLM 据此判断何时使用执行逻辑Execution Logic真正执行任务的函数search 工具的智能解析策略优先返回answer_boxGoogle 答案摘要框其次返回knowledge_graph知识图谱描述最后返回前 3 条organic_results摘要(2) ToolExecutor 工具管理器registerTool(name, description, func)注册工具getTool(name)获取工具执行函数getAvailableTools()格式化输出所有工具描述(3) ReActAgent 核心类系统提示词设计要点角色定义有能力调用外部工具的智能助手动态注入工具清单{tools}强制输出格式Thought:Action:Action 格式ToolName[input]或Finish[最终答案]核心循环逻辑run 方法格式化提示词工具描述 问题 历史调用 LLM 进行思考解析输出正则提取 Thought 和 Action执行 ActionFinish 则结束否则调用工具将 Action Observation 追加到 history循环直到 Finish 或达到 max_steps输出解析器_parse_output正则rThought:\s*(.*?)(?\nAction:|$)提取 Thought_parse_action正则r(\w)\[(.*)\]提取工具名和输入3.4 特点与局限性维度特点优势高可解释性Thought 链透明、动态规划与纠错、工具协同能力局限强依赖 LLM 能力、串行执行效率低、提示词脆弱、可能陷入局部最优3.5 调试技巧打印完整提示词追溯 LLM 决策源头分析原始输出判断是 LLM 未遵循格式还是解析逻辑有误验证工具输入输出检查格式兼容性添加 Few-shot 示例引导模型遵循格式调整模型或参数更换更强模型temperature 设为 0四、Plan-and-Solve 范式4.34.1 核心思想Plan-and-Solve由 Lei Wang 于 2023 年提出。解决 CoT 在多步骤复杂任务中偏离轨道的问题。与 ReAct 的本质区别ReAct 走一步看一步Plan-and-Solve 先画完整蓝图再施工。4.2 两阶段工作流┌──────────────────────────────────────────┐ │ 阶段一规划 (Plan) │ │ 输入原始问题 q │ │ 输出计划 P (p1, p2, ..., pn) │ │ 公式P π_plan(q) │ └──────────────────┬───────────────────────┘ ▼ ┌──────────────────────────────────────────┐ │ 阶段二执行 (Solve) │ │ 逐步执行每步依赖原始问题完整计划历史结果 │ │ 公式s_i π_solve(q, P, (s1,...,s_{i-1}))│ │ 最终答案 s_n │ └──────────────────────────────────────────┘4.3 关键组件(1) Planner规划器提示词设计要点角色顶级的AI规划专家任务将复杂问题分解为简单步骤格式约束强制输出 Python 列表字符串python ...极大简化解析解析方法ast.literal_eval安全执行字符串转列表(2) Executor执行器提示词包含四要素原始问题保持目标 awareness完整计划了解当前位置历史步骤与结果作为当前步骤输入当前步骤明确指示状态管理每步执行后更新history字符串格式为步骤 N: {step}\n结果: {result}(3) PlanAndSolveAgent采用组合优于继承原则自身不含复杂逻辑作为协调者调用 Planner 和 Executorrun(question)→planner.plan()→executor.execute()4.4 适用场景多步数学应用题先列步骤再逐一求解需整合多信息源的报告撰写先规划结构再填充代码生成任务先构思结构再逐一实现五、Reflection 范式4.45.1 核心思想为智能体引入事后自我校正循环。灵感来自 Shinn, Noah 的 Reflexion 框架2023。与前两种范式的区别ReAct 依赖外部工具反馈Reflection 提供内部纠错回路能修正更高层次的逻辑和策略错误。5.2 三步循环执行 → 反思 → 优化┌─────────────┐ │ 执行初稿 O₀ │ └──────┬──────┘ ▼ ┌─────────────┐ │ 反思 F₀ │ ◀── 评审员角色多维度评估 │ π_reflect │ └──────┬──────┘ ▼ ┌─────────────┐ │ 优化 O₁ │ ◀── 结合初稿反馈生成修订稿 │ π_refine │ └──────┬──────┘ ▼ (循环直到无需改进或达到最大迭代次数)形式化表达反思F_i π_reflect(Task, O_i)优化O_{i1} π_refine(Task, O_i, F_i)反思维度包括事实性错误、逻辑漏洞、效率问题、遗漏信息5.3 记忆模块Memory为什么需要记忆Reflection 对应信息的存储和提取直接传入所有信息会产生冗余。Memory 类核心方法add_record(type, content)添加记录execution 或 reflectionget_trajectory()将所有记录序列化为文本插入提示词get_last_execution()获取最新执行结果供反思5.4 三种提示词设计提示词角色目标INITIAL_PROMPT资深程序员首次生成代码初稿REFLECT_PROMPT极其严格的代码评审专家专注算法效率提出改进建议REFINE_PROMPT资深程序员根据反馈优化代码REFLECT_PROMPT 的关键设计角色设定为极其严格的代码评审专家和资深算法工程师专注算法效率维度要求分析时间复杂度如果已最优则回答无需改进作为终止信号5.5 ReflectionAgent 工作流初始执行生成初版代码存入 Memory迭代循环max_iterations 次a. 反思获取最新代码 → 生成反馈 → 存入 Memoryb. 检查终止反馈包含无需改进则结束c. 优化结合代码反馈 → 生成优化版 → 存入 Memory返回最终代码5.6 成本收益分析维度内容成本模型调用开销倍增每轮至少 2 次额外调用、任务延迟显著提高、提示工程复杂度上升收益解决方案质量跃迁从合格到优秀、鲁棒性与可靠性增强适用对质量/准确性/可靠性要求极高、对实时性要求宽松的场景关键业务代码、科研推演、决策支持不适用需要快速响应或大致正确即可的场景此时 ReAct 或 Plan-and-Solve 更具性价比六、三种范式对比总结6.1 核心差异维度ReActPlan-and-SolveReflection策略走一步看一步先规划后执行自我反思迭代规划方式动态、步进式静态、全局式无独立规划纠错来源外部工具反馈无按计划执行内部自我批判执行效率串行多次调用串行多次调用串行多次调用更多轮可解释性高Thought 链透明中计划清晰执行过程简单高迭代轨迹完整质量上限中高中高迭代优化适用任务探索性、需外部工具结构化、逻辑路径确定高质量要求、需深度优化6.2 选择策略需要外部信息/工具交互→ ReAct任务可清晰分解、逻辑路径确定→ Plan-and-Solve对结果质量有极高要求→ Reflection复杂综合任务→ 组合使用如 ReAct Reflection七、核心知识点速查7.1 公式速查范式核心公式ReAct(th_t, a_t) π(q, (a_1,o_1),...,(a_{t-1},o_{t-1}))o_t T(a_t)Plan-and-SolveP π_plan(q)s_i π_solve(q, P, (s_1,...,s_{i-1}))ReflectionF_i π_reflect(Task, O_i)O_{i1} π_refine(Task, O_i, F_i)7.2 关键类速查类名职责核心方法HelloAgentsLLMLLM 客户端封装think(messages, temperature)ToolExecutor工具管理器registerTool,getTool,getAvailableToolsReActAgentReAct 智能体run(question),_parse_output,_parse_actionPlanner规划器plan(question)Executor执行器execute(question, plan)PlanAndSolveAgentPlan-and-Solve 智能体run(question)Memory短期记忆模块add_record,get_trajectory,get_last_executionReflectionAgentReflection 智能体run(task),_get_llm_response7.3 参考论文[1] Yao S, et al. ReAct: Synergizing reasoning and acting in language models. ICLR 2023.[2] Wang L, et al. Plan-and-Solve Prompting. arXiv:2305.04091, 2023.[3] Shinn N, et al. Reflexion: Language agents with verbal reinforcement learning. NeurIPS 2023.八、习题要点提示三种范式的本质区别思考与行动的组织方式不同——ReAct 交织、Plan-and-Solve 分离、Reflection 叠加智能家居控制助手推荐 ReAct需实时感知动态调整或 Plan-and-Solve Reflection 组合解析方法脆弱性正则依赖固定格式LLM 输出不稳定时易失败替代方案JSON 格式输出、Function Calling工具扩展添加计算器工具、工具选择失败处理、大规模工具的组织与检索可考虑向量检索/分层分类动态重规划执行阶段发现步骤不可完成时将当前状态反馈给 Planner 重新生成计划Reflection 多模型强模型反思快模型执行可提升反思质量但增加协调复杂度客服智能体设计ReAct Reflection 组合工具包括订单查询、物流查询、邮件发送、退款政策查询