ReAct(Reasoning + Acting)是一种结合推理和行动的 AI 智能体框架。一、ReAct 概述1. 基本概念ReAct是一个让 AI 智能体能够:推理(Reasoning):思考问题和制定计划行动(Acting):执行具体操作获取信息迭代优化:基于反馈调整策略# ReAct 核心思想classReAct:""" ReAct = Reasoning + Acting 通过交替进行推理和行动来解决复杂问题 """defsolve_problem(self,problem):# 推理 → 行动 → 观察 → 再推理 → ...thoughts=[]actions=[]observations=[]whilenotself.is_solved(problem):# 推理阶段thought=self.reason(problem,observations)thoughts.append(thought)# 行动阶段action=self.plan_action(thought)actions.append(action)# 执行和观察observation=self.execute_action(action)observations.append(observation)returnself.synthesize_solution(thoughts,observations)2. 与传统方法的对比# 传统方法 vs ReActclassComparison:traditional_approach=""" 输入问题 → LLM 直接回答 缺点:无法处理需要外部信息的复杂问题 """react_approach=""" 输入问题 → 推理 → 行动 → 观察 → 再推理 → ... → 最终答案 优点:可以处理需要多步推理和外部信息的复杂问题 """二、ReAct 架构原理1. 核心循环┌─────────────────────────────────────────────────────────┐ │ ReAct 循环 │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────┐ │ 推理 │ │ (Reasoning) │ └──────────────┘ │ ▼ ┌──────────────┐ │ 行动 │ │ (Acting) │ └──────────────┘ │ ▼ ┌──────────────┐ │ 观察 │ │ (Observation)│ └──────────────┘ │ ▼ ┌──────────────┐ │ 是否解决? │ └──────────────┘ │ ┌────────┴────────┐ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ 是:输出答案 │ │ 否:继续循环 │ └──────────────┘ └──────────────┘2. 详细实现classReActAgent:def__init__(self,llm,tools):self.llm=llm self.tools=tools self.memory=[]# 存储推理和观察历史defrun(self,question,max_steps=10):""" 运行 ReAct 循环 """step=0current_state={"question":question,"thoughts":[],"actions":[],"observations":[]}whilestepmax_steps:# 1. 推理阶段thought=self._reason(current_state)current_state["thoughts"].append(thought)# 检查是否可以直接回答ifself._can_answer_directly(thought):answer=self._extract_answer(thought)returnself._format_final_answer(answer,current_state)# 2. 规划行动action_plan=self._plan_action(thought,current_state)ifnotaction_plan:# 无法规划行动,尝试直接回答answer=self._attempt_direct_answer(current_state)returnself._format_final_answer(answer,current_state)# 3. 执行行动observation=self._execute_action(action_plan)current_state["actions"].append(action_plan)current_state["observations"].append(observation)# 4. 检查是否解决ifself._is_problem_solved(observation,current_state):answer=self._synthesize_answer(current_state)returnself._format_final_answer(answer,current_state)step+=1# 达到最大步数,返回当前最佳答案returnself._format_timeout_answer(current_state)def_reason(self,state):""" 推理阶段:分析当前情况,决定下一步 """prompt=self._build_reasoning_prompt(state)response=self.llm.generate(prompt)returnself._parse_reasoning(response)def_plan_action(self,thought,state):""" 规划行动:基于推理结果选择工具和参数 """available_tools=self._get_available_tools(state)action_plan=self.llm.plan_action(thought,available_tools)returnself._validate_action(action_plan)def_execute_action(self,action_plan):""" 执行行动:调用相应工具 """tool_name=action_plan["tool"]parameters=action_plan["parameters"]iftool_nameinself.tools:tool=self.tools[tool_name]try:result=tool.execute(**parameters)return{"status":"success","result":result}exceptExceptionase:return{"status