Python构建AI智能体:ReAct、Plan-and-Solve与Reflection三大范式实战
1. 智能体开发基础与核心概念在当今AI技术快速发展的背景下构建能够自主思考和行动的智能体已成为开发者关注的热点。作为一名长期从事AI开发的工程师我将分享如何用Python构建三类典型智能体的实战经验。1.1 智能体的本质特征智能体的核心在于其自主性。一个真正的智能体应当具备感知能力通过传感器获取环境信息决策能力基于感知信息进行推理和规划执行能力通过执行器对环境产生影响学习能力从经验中改进自身行为在代码层面这通常表现为一个持续运行的循环不断接收输入、处理信息、产生输出。现代LLM大语言模型为智能体提供了强大的认知基础但需要开发者精心设计交互机制。1.2 开发环境准备构建智能体首先需要配置开发环境。以下是关键组件# 基础环境配置 python -m venv agent-env source agent-env/bin/activate # Linux/Mac # agent-env\Scripts\activate # Windows # 核心依赖安装 pip install google-generativeai openai python-dotenv typing-extensions ollama不同模型API的调用方式存在差异这是新手常见的踩坑点。例如# Gemini调用示例 import google.generativeai as genai genai.configure(api_keyYOUR_API_KEY) model genai.GenerativeModel(gemini-1.5-flash) # OpenAI标准调用 from openai import OpenAI client OpenAI(api_keysk-xxx) # 第三方中转API调用需注意base_url client OpenAI( api_keysk-xxxx, base_urlhttps://api.xxx.com/v1 # 必须以/v1结尾 ) # 本地Ollama调用无需API key import ollama response ollama.chat(modelllama3, messages[...])关键提示API密钥等敏感信息应存储在.env文件中通过python-dotenv加载切勿硬编码在脚本中。2. 智能体三大范式实现2.1 ReAct范式动态思考与行动ReActReasoning and Acting是最接近人类思考过程的智能体范式。其核心在于建立思考-行动-观察的循环class ReActAgent: def __init__(self, llm_client, tool_executor, max_steps5): self.llm_client llm_client self.tool_executor tool_executor self.max_steps max_steps self.history [] def run(self, question: str): while len(self.history) self.max_steps: # 1. 生成思考 prompt self._build_prompt(question) response self.llm_client.think(prompt) # 2. 解析行动 thought, action self._parse_response(response) if action.startswith(Finish): return self._handle_finish(action) # 3. 执行工具 tool_name, tool_input self._parse_action(action) observation self._execute_tool(tool_name, tool_input) # 4. 更新历史 self._update_history(thought, action, observation)2.1.1 提示词工程ReAct的成功很大程度上依赖于精心设计的提示词模板REACT_PROMPT_TEMPLATE 你是一个可以调用外部工具的智能助手。可用工具 {tools} 请严格按以下格式回应 Thought: 你的思考过程 Action: 要采取的行动格式为 - {{tool}}[{{input}}] 调用工具 - Finish[{{answer}}] 结束任务 当前问题{question} 历史记录{history} 2.1.2 实战技巧历史压缩当历史记录过长时可以总结前几步的关键信息避免超出模型上下文限制错误恢复当工具调用失败时应让模型有机会尝试替代方案超时控制设置最大步数防止无限循环2.2 Plan-and-Solve先规划后执行与ReAct的动态调整不同Plan-and-Solve强调先制定完整计划再执行class PlanAndSolveAgent: def __init__(self, llm_client): self.planner Planner(llm_client) self.executor Executor(llm_client) def run(self, question: str): plan self.planner.plan(question) return self.executor.execute(question, plan)2.2.1 规划阶段规划器的核心是让模型将复杂任务分解为可执行的子步骤PLANNER_PROMPT 你是一个规划专家。请将问题分解为可执行的步骤列表。 输出必须为Python列表格式 python [步骤1, 步骤2, ...]问题{question} #### 2.2.2 执行阶段 每个步骤执行时都会获得完整上下文 python EXECUTOR_PROMPT 你是一个执行专家。请解决当前步骤 问题{question} 计划{plan} 已完成步骤{history} 当前步骤{current_step} 只需回答当前步骤的结果 2.3 Reflection迭代优化Reflection范式通过自我评审不断改进输出质量class ReflectionAgent: def __init__(self, llm_client, max_iters3): self.llm_client llm_client self.memory Memory() self.max_iters max_iters def run(self, task: str): code self._initial_execute(task) for _ in range(self.max_iters): feedback self._reflect(task, code) if 无需改进 in feedback: break code self._refine(task, code, feedback) return code2.3.1 记忆管理记忆模块记录完整的迭代轨迹class Memory: def __init__(self): self.records [] def add_record(self, record_type: str, content: str): self.records.append({type: record_type, content: content}) def get_trajectory(self) - str: return \n.join( f{r[type]}: {r[content]} for r in self.records )3. 实战问题与解决方案3.1 常见错误排查API调用失败检查API密钥是否正确验证网络连接是否正常确认服务端是否可用解析错误添加更健壮的解析逻辑在提示词中强调输出格式要求实现自动修正机制无限循环设置最大迭代次数检测重复操作实现超时机制3.2 性能优化技巧缓存机制对相同工具的重复调用结果进行缓存并行执行当多个步骤无依赖关系时可并行处理精简上下文定期清理无关的历史记录模型选择简单任务使用轻量级模型3.3 高级应用模式多智能体协作不同特长的智能体分工合作混合范式结合ReAct的灵活性和Plan-and-Solve的系统性长期记忆引入向量数据库存储历史经验工具学习让智能体自主发现和掌握新工具4. 开发心得与建议在实际开发中有几个关键点值得注意逐步验证先构建最小可行智能体再逐步添加复杂功能监控指标跟踪每一步的成功率、耗时等关键指标异常处理为每个可能失败的点设计恢复策略用户反馈收集最终用户对智能体决策的反馈用于改进一个典型的开发迭代周期包括设计智能体架构实现核心循环构建测试用例运行评估指标分析失败案例优化提示词和逻辑对于资源有限的团队建议从Ollama本地模型开始待验证核心逻辑后再接入商用API。同时可以复用开源的智能体框架如LangChain、AutoGen加速开发。