从 ReAct 框架到底层心智模型彻底理解 AI Agent 是如何思考和行动的。目录4.1 ReAct 框架深度解析ReAct 的核心循环完整的 ReAct 示例ReAct 的代码实现4.2 其他 Agent 工作模式模式 1Chain of Thought (CoT) — 纯推理模式 2Plan-and-Execute — 先计划后执行模式 3Self-Ask — 自问自答4.3 理解 Agent 的三种视角视角 1把 Agent 看作「员工」视角 2把 Agent 看作「循环系统」视角 3把 Agent 看作「大脑 工具」总结三种模式与三种视角的统一4.1 ReAct 框架深度解析什么是 ReActReActReasoning Acting推理 行动是当前 AI Agent 领域最主流的框架范式。它由 Google Research 在 2022 年提出核心思想是让大语言模型在推理Thought和行动Action之间交替循环从而能够处理需要与外部世界交互的复杂任务。ReAct 解决了一个根本问题纯语言模型被困在知识截止日期里而 ReAct 让模型长出双手可以主动获取信息、操作工具、观察反馈再据此调整下一步策略。ReAct 的核心循环ReAct 的工作流程可以用一个经典的Thought → Action → Observation循环来描述图片说明ReAct 核心循环流程图。任务进入后Agent 进入思考 → 行动 → 观察的循环直到判断任务完成输出最终答案。每一步的含义阶段英文核心问题示例 Thought推理我现在知道什么下一步该做什么用户问的是北京天气我需要调用天气 API Action行动我具体执行什么操作用什么工具get_weather(cityBeijing)️ Observation观察工具返回了什么我获得了什么新信息{temp: 25, weather: 晴}完整的 ReAct 示例让我们通过一个实际案例看看 ReAct 如何一步步解决查找北京今天的气温并判断是否需要带伞这个问题图片说明一个完整的 ReAct 两轮循环示例。第一轮获取天气数据第二轮判断不需要带伞并给出最终答案。完整对话流程如下用户: 北京今天需要带伞吗 Thought 1: 用户想知道北京今天是否需要带伞。我需要先查询北京当前的天气情况。 Action 1: get_weather(city北京) ️ Observation 1: { temperature: 25, weather: 多云, humidity: 65% } Thought 2: 当前北京多云温度25°C湿度65%。多云意味着不太可能下雨65%的湿度也不算极端。综合判断不需要带伞。 Final Answer: 今天北京多云气温25°C湿度65%不需要带伞。☀️ReAct 的代码实现下面是一个 ReAct Agent 的最简实现用 Python 展示核心逻辑import json from typing import Any, Callable class ReActAgent: ReAct Agent 的最小实现 核心循环Thought → Action → Observation → 判断是否终止 def __init__(self, llm: Callable, tools: dict[str, Callable], max_steps: int 10): Args: llm: 大语言模型调用函数接收消息列表返回模型响应文本 tools: 工具字典key 是工具名value 是可调用的工具函数 max_steps: 最大循环步数防止无限循环 self.llm llm self.tools tools self.max_steps max_steps def run(self, query: str) - str: 执行 ReAct 循环返回最终答案。 Args: query: 用户的问题 / 任务 Returns: 最终答案文本 # 初始化对话历史system prompt 定义了 ReAct 的行为规范 messages [ { role: system, content: 你是一个 ReAct Agent。请按以下格式响应 Thought: 你的推理过程——分析当前状态决定下一步行动。 Action: 要调用的工具名称 Action Input: 传递给工具的 JSON 参数 Observation: 工具返回的结果由系统填入 当任务完成时请用以下格式给出最终答案 Thought: 我已收集到足够信息。 Final Answer: 最终答案内容 }, {role: user, content: query} ] step 0 # ─────────── ReAct 核心循环 ─────────── while step self.max_steps: step 1 print(f\n{*50}) print(f Step {step}) print(f{*50}) # 1️⃣ 调用 LLM获取模型响应 response self.llm(messages) messages.append({role: assistant, content: response}) print(f LLM 响应:\n{response}) # 2️⃣ 解析判断是 Final Answer 还是 Action if Final Answer: in response: # 任务完成提取并返回最终答案 final response.split(Final Answer:)[-1].strip() print(f✅ 任务完成) return final if Action: in response: # 提取 Action 和 Action Input action self._extract_action(response) action_input self._extract_action_input(response) if action not in self.tools: obs f错误工具 {action} 不存在。可用工具{list(self.tools.keys())} else: try: # 3️⃣ 执行工具调用 print(f 执行 Action: {action}({action_input})) result self.tools[action](**json.loads(action_input)) obs json.dumps(result, ensure_asciiFalse) except Exception as e: obs f工具执行错误{str(e)} print(f️ Observation: {obs}) # 4️⃣ 将 Observation 反馈给 LLM进入下一轮循环 messages.append({ role: user, content: fObservation: {obs} }) continue # 如果既没有 Final Answer 也没有 Action模型可能偏离了格式 messages.append({ role: user, content: 请按格式响应Thought Action 或 Thought Final Answer }) return 达到最大步数限制任务未完成。 def _extract_action(self, response: str) - str: 从响应中提取 Action 名称 for line in response.split(\n): if line.strip().startswith(Action:): return line.split(Action:)[-1].strip() return def _extract_action_input(self, response: str) - str: 从响应中提取 Action Input for line in response.split(\n): if line.strip().startswith(Action Input:): return line.split(Action Input:)[-1].strip() return {} # ─────────── 使用示例 ─────────── # 模拟 LLM 调用实际使用中替换为真实 API 调用 def mock_llm(messages): 简单的 mock LLM仅用于演示 last_user_msg messages[-1][content] if messages else if Observation: in last_user_msg: # 收到工具返回后的第二轮给出最终答案 obs_data last_user_msg.split(Observation:)[-1].strip() return fThought: 我已经获取到了天气数据{obs_data}。 根据这些信息我可以回答用户的问题了。 Final Answer: 根据查询结果{obs_data} else: # 第一轮决定调用工具 return Thought: 用户询问天气我需要调用天气查询工具。 Action: get_weather Action Input: {city: 北京} # 注册工具 tools { get_weather: lambda city: {city: city, temp: 25, weather: 多云}, search_web: lambda query: {results: [f{query} 的搜索结果...]}, } # 运行 Agent agent ReActAgent(llmmock_llm, toolstools) answer agent.run(北京今天天气怎么样需要带伞吗) print(f\n{*50}) print(f 最终答案: {answer})代码关键设计点解读图片说明ReAct Agent 代码实现的核心循环。LLM 的响应被解析后如果是 Action 则执行工具并将结果反馈给 LLM 继续循环如果是 Final Answer 则终止。关键设计要点设计点说明System Prompt 格式约束通过 prompt 严格定义输出格式Thought / Action / Action Input / Final Answer让 LLM 的行为可解析max_steps 上限防止 Agent 在复杂任务中无限循环是一种安全兜底机制Observation 反馈机制工具执行结果以Observation:前缀注入对话历史LLM 能看到外部世界的反馈错误处理工具调用失败时错误信息作为 Observation 返回LLM 可以据此调整策略无状态循环所有记忆都存在 messages 列表中Agent 本身不维护额外状态4.2 其他 Agent 工作模式除了 ReAct还有几种重要的 Agent 工作模式。它们各有侧重适用于不同场景。三种模式对比总览图片说明三种 Agent 工作模式的对比。CoT 是纯链式推理Plan-and-Execute 是先全局规划再分步执行Self-Ask 是通过自问自答拆解复杂问题。模式 1Chain of Thought (CoT) — 纯推理核心思想让模型在给出最终答案之前先输出一步步的推理过程。CoT 是最简单也最基础的推理模式。它不调用外部工具完全依赖模型自身的知识进行思维链推演。图片说明CoT 模式示例。模型将复杂问题拆解为逐步推理每一步都基于上一步的结论最终汇聚为答案。CoT 的适用场景数学推理、逻辑推理需要多步骤思考但不依赖外部信息的任务作为其他 Agent 模式中的思考组件CoT 的局限无法获取外部信息知识截止日期问题不能操作工具推理链一旦出错后续步骤无从纠正模式 2Plan-and-Execute — 先计划后执行核心思想把复杂任务分成两个阶段——先制定完整的执行计划再按计划逐步执行。图片说明Plan-and-Execute 模式流程图。左侧橙色区域为计划阶段生成完整执行计划右侧绿色区域为执行阶段按计划逐步执行每个步骤。Plan-and-Execute 的优势优势说明全局视野先规划全貌避免走一步看一步导致的局部最优可审核性用户可以在执行前审查计划调整方向任务分解复杂任务被拆解为可管理的子任务可控性执行过程有章可循出问题时可以定位到具体步骤与 ReAct 的关键区别ReAct 是边想边做思考一步、执行一步、观察反馈Plan-and-Execute 是想好了再做全局规划后再逐步执行。模式 3Self-Ask — 自问自答核心思想面对复杂问题时模型主动向自己提出子问题逐个回答最后综合所有答案得出结论。图片说明Self-Ask 模式示例。模型将一个复杂的历史问题拆解为 3 个子问题逐一回答后综合得出结论。Self-Ask 与 CoT 的区别维度CoTSelf-Ask推理方式线性链式推理显式提问 回答结构连续的推理步骤树状或图状的问答结构适用场景数学、逻辑推理需要多角度分析的问题是否需要工具否可选择性地调用工具回答子问题Self-Ask 的核心价值它将隐式推理变为显式提问使得思考过程更加结构化也更容易被审查和调试。四种模式全景对比迭代 工具 最强迭代 纯推理线性 纯推理线性 工具ReActPlan-and-ExecuteSelf-AskCoT不依赖工具依赖工具线性推理迭代式推理Agent 工作模式对比图片说明四种 Agent 模式的二维对比图。横轴为依赖工具程度纵轴为迭代式推理程度。ReAct 位于右上角是迭代 工具的最强组合。模式核心机制是否使用工具推理方式典型场景CoT逐步推理链❌线性数学、逻辑题Self-Ask自问自答拆解⚠️ 可选树状分析类问题Plan-and-Execute先规划后执行✅阶段性复杂多步骤任务ReAct推理-行动循环✅迭代循环需要外部交互的任务4.3 理解 Agent 的三种视角理解了 Agent 的工作模式之后我们还需要建立一个心智模型来真正理解 Agent。以下三种视角从不同层次帮你建立这个模型。三种视角的关系图片说明三种理解视角的关系。视角 1员工最直观适合入门视角 2循环系统最工程化适合开发者视角 3大脑工具最底层适合深度理解。三者层层递进。视角 1把 Agent 看作「员工」一句话概括Agent 就像一个刚入职的聪明员工——你给它目标、工具和边界它自己想办法完成。图片说明将 Agent 类比为员工。管理者你分配任务并提供工具Agent 自己完成理解→规划→执行→汇报的完整流程管理者审查后可以调整指令。这个视角帮助你想清楚三个问题问题Agent 对应概念举例它要做什么System Prompt / 任务描述你是一个专业的客服 Agent帮助用户解决售后问题它能用什么Tools工具集订单查询 API、退款接口、知识库搜索它的边界在哪约束条件 / 权限控制退款金额超过 500 元需要人工审核类比例子你老板帮我整理这份合同的风险点 Agent员工 1. 先通读合同全文理解任务 2. 识别关键条款分析 3. 查阅法律知识库调用工具 4. 标注 5 个风险点产出结果 5. 老板我标记了 5 个风险点其中第 3 条我不太确定 需要您确认汇报 请求反馈这个视角的优点直观易懂适合产品经理、业务人员理解 Agent 的定位和边界。局限过于拟人化容易产生不切实际的期待——Agent 不是真的理解它只是在做模式匹配。视角 2把 Agent 看作「循环系统」一句话概括Agent 的本质是一个感知 → 决策 → 执行 → 感知的闭环控制系统。图片说明从循环系统视角看 Agent。输入用户输入 上下文 记忆→ 决策LLM 推理→ 输出动作 / 回复→ 反馈结果 / 错误→ 回到输入形成闭环。把 Agent 拆成四个子系统┌─────────────────────────────────────────────────────┐ │ Agent 系统架构 │ ├───────────┬─────────────────────────────────────────┤ │ 输入层 │ 用户消息、system prompt、工具返回值、 │ │ │ 对话历史、RAG 检索结果 │ ├───────────┼─────────────────────────────────────────┤ │ ⚙️ 决策层 │ 大语言模型LLM │ │ │ → 理解当前状态 │ │ │ → 推断下一步行动 │ │ │ → 生成结构化输出 │ ├───────────┼─────────────────────────────────────────┤ │ 输出层 │ → Action: 调用工具API、数据库、计算器 │ │ │ → Speak: 直接回复用户 │ │ │ → Think: 内部推理不对外 │ ├───────────┼─────────────────────────────────────────┤ │ 反馈层 │ 工具执行结果 → 作为新的输入回到决策层 │ │ │ 错误信息 → 触发重试或策略调整 │ │ │ 用户反馈 → 修正理解或改变方向 │ └───────────┴─────────────────────────────────────────┘这个视角的关键洞察Agent 的强大不在于 LLM 本身而在于 LLM 循环系统的组合。单次 LLM 调用 一个聪明但被困住的大脑。 加上循环系统 大脑长出了眼睛和双手可以在世界中行动。工程上的指导意义设计考量说明循环终止条件何时停止靠 LLM 判断靠步数上限靠外部信号状态管理对话历史怎么裁剪长期记忆怎么存储错误恢复工具调用失败了怎么办重试换工具降级可观测性每轮循环做了什么怎么调试怎么监控视角 3把 Agent 看作「大脑 工具」一句话概括Agent 推理引擎大脑 工具调用能力双手 记忆系统经验。图片说明Agent 大脑 工具 记忆。大脑LLM负责推理和规划工具负责扩展能力边界搜索、计算、操作外部服务记忆系统负责在时间维度上保持上下文连贯。三个组件的功能划分 大脑LLM ├── 世界知识预训练阶段学到的所有知识和模式 ├── 推理能力将复杂问题拆解为可执行的步骤 ├── 语言理解理解用户意图哪怕表达不精确 ├── 规划能力制定多步骤的行动计划 └── 反思能力根据新信息修正自己的判断 工具 ├── 补全大脑的知识缺口搜索最新信息 ├── 补全大脑的能力缺口精确数学计算 ├── 补全大脑的操作缺口发送邮件、操作数据库 └── 原则大脑负责知道做什么工具负责实际做 记忆 ├── 工作记忆当前轮次正在处理的信息类似人脑的工作记忆容量有限 ├── 短期记忆本次对话的所有历史记录 └── 长期记忆关键信息的持久化存储向量数据库、知识图谱等这个视角的核心哲学传统编程 程序员 → 精确的代码逻辑 → 固定输出 Agent 编程 描述目标 → 大脑自行规划 → 工具辅助执行 → 动态输出 关键转变从告诉计算机怎么做到告诉计算机你想要什么为什么需要三者结合只有大脑只有工具大脑 工具知识截止到训练日期需要精确指令才能执行大脑决定调用哪些工具无法操作外部世界无法判断何时使用哪个工具工具扩展大脑的能力边界复杂数学容易出错不能理解模糊的自然语言指令两者互补覆盖更广的场景总结三种模式与三种视角的统一把4.2工作模式和4.3理解视角放在一起你会看到一张完整的 Agent 认知地图图片说明工作模式与理解视角的统一。工作模式How回答Agent 怎么工作理解视角Why回答Agent 为什么这样工作。两者互相印证构成对 Agent 的完整理解。核心要点串讲层次核心问题关键结论ReActAgent 如何思考与行动Thought → Action → Observation 循环是最主流的 Agent 范式其他模式还有哪些工作方式CoT纯推理、Plan-Execute先规划、Self-Ask自问自答各有适用场景三种视角如何建立心智模型员工视角业务层→ 循环视角工程层→ 大脑工具认知层逐层深入最终心法 Agent 不是魔法它只是一个被设计成循环调用的 LLM。它的智能来自于三个要素的组合大模型的推理与语言能力大脑工具系统的扩展能力双手循环反馈的自我纠正能力经验理解了这三者的关系你就真正理解了 Agent。本文为 Agent 工作原理系列的第 4 章。如需进一步了解具体实现建议参考 LangChain、AutoGPT、CrewAI 等框架的源码。