hello-agents第四章智能体经典范式构建学习笔记
本文介绍了智能体构建的两种经典范式:ReAct和Plan-and-Solve。ReAct通过"思考-行动-观察"循环动态完成任务,依赖LLM推理能力与工具调用的紧密结合;Plan-and-Solve则采用"先规划后执行"两阶段方法,适合结构化任务。文章详细阐述了两种范式的核心概念、工作原理、实现细节及注意事项,包括环境配置、工具设计、流程控制和常见问题解决方
·
第四章 智能体经典范式构建 - 学习笔记
一、本章核心目标
- 理解智能体的核心能力:将大语言模型(LLM)的推理能力与外部世界(工具、API等)联通,自主拆解任务、调用工具达成目标。
- 掌握三种经典智能体范式的构建原理与实现:ReAct、Plan-and-Solve、Reflection(本章重点前两者)。
- 理解“重复造轮子”的意义:掌握底层设计机制,应对工程挑战,从“使用者”转变为“创造者”。
二、环境准备与基础工具定义
1. 基础概念
- 开发依赖:Python 3.10+,核心库为
openai(LLM交互)和python-dotenv(环境变量管理)。 - 环境配置:通过
.env文件统一管理模型ID、API密钥、服务地址等敏感信息,避免硬编码。 - LLM客户端封装:将LLM调用细节(如流式响应处理、错误捕获)封装为
HelloAgentsLLM类,简化后续智能体逻辑。
2. 关键原理
- 配置文件设计:
.env文件分离配置与代码,提高灵活性(支持切换OpenAI官方服务或兼容接口的第三方服务)。 - LLM客户端核心功能:
think方法接收消息列表,调用LLM并返回流式响应结果,包含错误处理机制。
3. 注意事项(坑)
- 环境变量缺失会直接导致客户端初始化失败,需确保
.env文件中LLM_MODEL_ID、LLM_API_KEY、LLM_BASE_URL均正确配置。 - 流式响应处理需注意空内容(
chunk.choices[0].delta.content可能为None),避免拼接错误。
三、ReAct范式(Reasoning and Acting)
1. 基础概念
- 核心思想:模仿人类“思考-行动-观察”的循环,将推理(Reasoning)与行动(Acting)紧密结合,动态调整任务处理过程。
- 三要素:
Thought:智能体的“内心独白”,用于分析情况、规划下一步。Action:调用外部工具的具体操作(如Search[查询内容])。Observation:工具执行Action后的返回结果,作为下一轮思考的输入。
2. 关键原理
- 工作流程:
Thought -> Action -> Observation循环,不断积累上下文,直至任务完成。- 形式化表达: ( th t , a t ) = π ( q , ( a 1 , o 1 ) , … , ( a t − 1 , o t − 1 ) ) (\text{th}_t, a_t) = \pi(q, (a_1,o_1),\ldots,(a_{t-1},o_{t-1})) (tht,at)=π(q,(a1,o1),…,(at−1,ot−1))(LLM生成思考与行动); o t = T ( a t ) o_t = T(a_t) ot=T(at)(工具返回观察结果)。
- 工具设计:
- 核心要素:名称(唯一标识)、描述(LLM判断何时使用的依据)、执行逻辑(实际功能实现)。
- 工具管理器(
ToolExecutor):统一注册、调度工具,提供工具列表描述(供LLM参考)。
- 智能体实现:
- 系统提示词:严格定义
Thought/Action格式(如Action: Search[输入]或Action: Finish[答案]),确保LLM输出可解析。 - 核心循环:格式化提示词→调用LLM→解析
Thought/Action→执行工具→整合Observation到历史,重复至任务完成或达最大步数。 - 解析器:通过正则表达式提取
Thought和Action,分离工具名称与输入。
- 系统提示词:严格定义
3. 注意事项(坑)
- 对LLM能力强依赖:LLM若无法遵循格式(如未生成
Action字段),会导致流程中断。 - 提示词脆弱性:模板格式微小变动可能影响LLM输出,需严格维护格式规范。
- 效率问题:多步骤任务需多次调用LLM,耗时且成本高。
- 可能陷入循环:需设置
max_steps限制最大循环次数,避免无限循环。 - 调试技巧:
- 打印完整提示词与LLM原始输出,定位格式错误或推理偏差。
- 验证工具输入输出格式,确保
Observation可被LLM理解。 - 必要时添加示例(Few-shot Prompting)引导LLM遵循格式。
四、Plan-and-Solve范式
1. 基础概念
- 核心思想:“先规划,后执行”,将任务处理分为两个阶段,适用于结构化、多步骤的复杂任务。
- 两阶段划分:
- 规划阶段(Planning Phase):LLM生成完整的分步骤行动计划。
- 执行阶段(Solving Phase):严格按计划逐步执行,直至完成所有步骤。
2. 关键原理
- 工作流程:
- 规划阶段: P = π plan ( q ) P = \pi_{\text{plan}}(q) P=πplan(q)(LLM根据问题生成计划 P = ( p 1 , p 2 , … , p n ) P=(p_1,p_2,\dots,p_n) P=(p1,p2,…,pn))。
- 执行阶段: s i = π solve ( q , P , ( s 1 , … , s i − 1 ) ) s_i = \pi_{\text{solve}}(q, P, (s_1,\dots,s_{i-1})) si=πsolve(q,P,(s1,…,si−1))(按计划步骤依次执行,依赖前序结果)。
- 适用场景:多步数学题、报告撰写(需整合多信息源)、代码生成(需先设计结构)等结构性任务。
3. 注意事项(坑)
- 计划合理性依赖LLM:若初始计划存在疏漏(如步骤缺失或错误),执行阶段会持续偏离目标。
- 灵活性差:计划生成后难以动态调整,不适合需要实时反馈修正的任务(如实时信息查询)。
更多推荐



所有评论(0)