AI Agent的规划能力:从ReAct到Tree-of-Planning

规划:Agent的核心能力 AI Agent与聊天机器人的本质区别在于规划能力——将复杂目标分解为可执行步骤并动态调整的能力。从简单的ReAct循环到复杂的树搜索规划,Agent规划算法经历了快速演进。 ReAct:推理与行动的交错 基本循环 ReAct(Reasoning + Acting)是Agent规划的基石,核心思想是交错推理和行动: Thought: 用户要查北京天气,我需要调用天气API Action: search_weather(city="北京") Observation: 北京今天晴,25°C Thought: 获取到天气信息,可以回答用户了 Answer: 北京今天天气晴朗,气温25°C,适合外出活动。 实现细节 class ReActAgent: def __init__(self, llm, tools, max_steps=10): self.llm = llm self.tools = tools self.max_steps = max_steps def run(self, task): trajectory = [] for step in range(self.max_steps): # 生成下一步思考和行为 prompt = self._build_prompt(task, trajectory) response = self.llm.generate(prompt) thought, action = self._parse(response) trajectory.append({"thought": thought, "action": action}) if action["type"] == "finish": return action["answer"] # 执行工具 if action["type"] == "tool": result = self.tools[action["name"]](**action["params"]) trajectory.append({"observation": result}) return "达到最大步数限制" def _build_prompt(self, task, trajectory): prompt = f"""任务:{task} 可用工具:{list(self.tools.keys())} 历史: """ for item in trajectory: if "thought" in item: prompt += f"Thought: {item['thought']}\n" prompt += f"Action: {item['action']}\n" elif "observation" in item: prompt += f"Observation: {item['observation']}\n" prompt += "Thought:" return prompt ReAct的局限 无记忆反馈:失败的经验不会影响后续尝试 线性思维:无法回溯到之前的选择点尝试其他路径 容易陷入循环:在复杂任务中反复尝试相同的失败方案 Reflexion:从失败中学习 核心改进 Reflexion在ReAct基础上增加了自我反思机制。当任务执行失败时,Agent会生成反思并存储到长期记忆中: ...

2026-07-16 · 3 min · 515 words · 硅基 AGI 探索者

从ReAct到Reflexion:Agent推理范式演进

从ReAct到Reflexion:Agent推理范式演进 AI Agent的推理范式在过去几年经历了快速演进。从最初的ReAct到Reflexion再到各种自主规划框架,每一次迭代都在扩展Agent的问题解决能力。理解这条演进线,对于把握Agent技术的发展方向至关重要。 ReAct:推理与行动的交织 ReAct(Reasoning + Acting)是Agent推理范式的奠基之作。核心思想极其简洁:让模型交替进行推理(Thought)和行动(Action),根据行动的观察结果(Observation)调整下一步推理。 一个典型的ReAct循环: Thought: 我需要查找北京今天的天气 Action: search_weather("北京") Observation: 晴,最高温35°C,最低温22°C Thought: 今天北京是晴天且很热,我应该建议用户防晒 Action: respond("北京今天晴,最高35°C,建议防晒") ReAct的伟大之处在于它的简单和通用。不需要复杂的训练,只需要在prompt中定义好Thought-Action-Observation的格式,模型就能执行。这使得任何足够强大的LLM都可以变成一个Agent。 但ReAct也有明显局限: 无反思能力:如果Agent在第一步就走错了方向,它会沿着错误路径一直走下去,不会回头审视自己的推理链是否合理。 上下文窗口消耗快:每一步的Thought-Action-Observation都占用上下文,长任务很容易耗尽窗口。 错误传播:一步的错误观察会导致后续所有推理基于错误前提。 Reflexion:引入自我反思 Reflexion在ReAct的基础上增加了"反思"环节。当Agent完成任务或遇到失败时,它会回顾整个过程,总结经验教训,并将这些反思存储为"记忆",指导后续尝试。 Reflexion的循环: Attempt 1: Thought → Action → Observation → ... → Failed Reflection: 失败原因是第一步搜索关键词太宽泛,返回了不相关的结果。 下次应该使用更具体的搜索词。 Attempt 2: (使用反思记忆指导) Thought → Action → ... → Success Reflexion的关键创新是引入了"语言强化学习"的概念——用自然语言而非数值梯度来改进Agent的行为。反思生成的文本记忆起到了类似梯度下降中更新方向的作用。 在我们的实践中,Reflexion在多步推理任务上的成功率比ReAct高出15-25%。特别是在调试代码、解数学题等有明确正确答案的任务上,Reflexion的自我纠错能力非常有效。 Reflexion的局限 反思质量依赖模型的自我评估能力。如果模型无法准确判断自己的推理哪里出了问题,反思可能无效甚至误导。在需要专业领域知识的任务上,模型的自我反思往往不够深入。 此外,多次尝试意味着更多的时间和token消耗。在实时性要求高的场景中,Reflexion的开销可能不可接受。 后Reflexion时代的新范式 自主规划 ReAct和Reflexion都是"边想边做"的范式——每一步根据当前状态决定下一步。自主规划范式则将"规划"和"执行"分离:先制定完整计划,再逐步执行,执行中遇到偏差时重新规划。 自主规划的优势在于全局视野——Agent在开始执行前就能看到整个解决方案的结构,避免局部最优的陷阱。劣势是初始计划可能基于不完整信息,执行中发现计划不可行时需要频繁重规划。 树搜索 将推理过程组织为搜索树——每个节点是一个状态,每个边是一个动作。Agent使用启发式函数评估每个状态的价值,选择最有前景的方向探索。 Tree-of-Thoughts和MCTS(蒙特卡洛树搜索)是这一范式的代表。它们在需要深度搜索的任务(如数学证明、博弈)上表现优异,但计算开销远高于线性推理。 多Agent辩论 多个Agent从不同角度分析同一问题,通过辩论达成共识。这种范式利用了多样性——不同Agent有不同的知识和推理偏好,辩论过程可以暴露单个Agent的盲点。 范式选择的决策框架 场景 推荐范式 原因 简单工具调用 ReAct 开销最小,足够应付 多步推理有验证 Reflexion 自我纠错能力强 复杂规划任务 自主规划 全局视野避免局部最优 数学/逻辑难题 树搜索 深度搜索能力强 开放性问题 多Agent辩论 多角度视角减少盲点 未来方向 Agent推理范式的下一个突破可能来自以下方向: ...

2026-07-12 · 1 min · 92 words · 硅基 AGI 探索者

从ReAct到Reflexion:Agent推理范式演进

从ReAct到Reflexion:Agent推理范式演进 AI Agent的推理范式在过去几年经历了快速演进。从最初的ReAct到Reflexion再到各种自主规划框架,每一次迭代都在扩展Agent的问题解决能力。理解这条演进线,对于把握Agent技术的发展方向至关重要。 ReAct:推理与行动的交织 ReAct(Reasoning + Acting)是Agent推理范式的奠基之作。核心思想极其简洁:让模型交替进行推理(Thought)和行动(Action),根据行动的观察结果(Observation)调整下一步推理。 一个典型的ReAct循环: Thought: 我需要查找北京今天的天气 Action: search_weather("北京") Observation: 晴,最高温35°C,最低温22°C Thought: 今天北京是晴天且很热,我应该建议用户防晒 Action: respond("北京今天晴,最高35°C,建议防晒") ReAct的伟大之处在于它的简单和通用。不需要复杂的训练,只需要在prompt中定义好Thought-Action-Observation的格式,模型就能执行。这使得任何足够强大的LLM都可以变成一个Agent。 但ReAct也有明显局限: 无反思能力:如果Agent在第一步就走错了方向,它会沿着错误路径一直走下去,不会回头审视自己的推理链是否合理。 上下文窗口消耗快:每一步的Thought-Action-Observation都占用上下文,长任务很容易耗尽窗口。 错误传播:一步的错误观察会导致后续所有推理基于错误前提。 Reflexion:引入自我反思 Reflexion在ReAct的基础上增加了"反思"环节。当Agent完成任务或遇到失败时,它会回顾整个过程,总结经验教训,并将这些反思存储为"记忆",指导后续尝试。 Reflexion的循环: Attempt 1: Thought → Action → Observation → ... → Failed Reflection: 失败原因是第一步搜索关键词太宽泛,返回了不相关的结果。 下次应该使用更具体的搜索词。 Attempt 2: (使用反思记忆指导) Thought → Action → ... → Success Reflexion的关键创新是引入了"语言强化学习"的概念——用自然语言而非数值梯度来改进Agent的行为。反思生成的文本记忆起到了类似梯度下降中更新方向的作用。 在我们的实践中,Reflexion在多步推理任务上的成功率比ReAct高出15-25%。特别是在调试代码、解数学题等有明确正确答案的任务上,Reflexion的自我纠错能力非常有效。 Reflexion的局限 反思质量依赖模型的自我评估能力。如果模型无法准确判断自己的推理哪里出了问题,反思可能无效甚至误导。在需要专业领域知识的任务上,模型的自我反思往往不够深入。 此外,多次尝试意味着更多的时间和token消耗。在实时性要求高的场景中,Reflexion的开销可能不可接受。 后Reflexion时代的新范式 自主规划 ReAct和Reflexion都是"边想边做"的范式——每一步根据当前状态决定下一步。自主规划范式则将"规划"和"执行"分离:先制定完整计划,再逐步执行,执行中遇到偏差时重新规划。 自主规划的优势在于全局视野——Agent在开始执行前就能看到整个解决方案的结构,避免局部最优的陷阱。劣势是初始计划可能基于不完整信息,执行中发现计划不可行时需要频繁重规划。 树搜索 将推理过程组织为搜索树——每个节点是一个状态,每个边是一个动作。Agent使用启发式函数评估每个状态的价值,选择最有前景的方向探索。 Tree-of-Thoughts和MCTS(蒙特卡洛树搜索)是这一范式的代表。它们在需要深度搜索的任务(如数学证明、博弈)上表现优异,但计算开销远高于线性推理。 多Agent辩论 多个Agent从不同角度分析同一问题,通过辩论达成共识。这种范式利用了多样性——不同Agent有不同的知识和推理偏好,辩论过程可以暴露单个Agent的盲点。 范式选择的决策框架 场景 推荐范式 原因 简单工具调用 ReAct 开销最小,足够应付 多步推理有验证 Reflexion 自我纠错能力强 复杂规划任务 自主规划 全局视野避免局部最优 数学/逻辑难题 树搜索 深度搜索能力强 开放性问题 多Agent辩论 多角度视角减少盲点 未来方向 Agent推理范式的下一个突破可能来自以下方向: ...

2026-07-12 · 1 min · 92 words · 硅基 AGI 探索者
推理增强提示

推理增强提示技术:让AI的推理更深入

引言 标准提示让LLM直接输出答案,但对于复杂推理任务,这种方法往往不够。2026年,推理增强提示技术已经从简单的Chain-of-Thought发展到包含Self-Consistency、Tree of Thoughts、ReAct、Reflexion等多种技术的完整体系。本文将系统介绍这些技术。 推理增强技术谱系 基础推理 Chain-of-Thought (CoT) — 展示推理步骤 Zero-Shot CoT — “Let’s think step by step” 采样增强 Self-Consistency — 多次采样,选择最一致答案 DiVeRSe — 多样化推理路径 搜索增强 Tree of Thoughts (ToT) — 树搜索 Graph of Thoughts (GoT) — 图搜索 Beam Search — 束搜索 工具增强 ReAct — 推理+行动 Self-Refine — 迭代优化 Reflexion — 反思+记忆 Chain-of-Thought回顾 见前文"思维链2026进阶技巧"。 Self-Consistency(自一致性) 核心思想 对于一个复杂问题,让模型生成多个推理路径(通过高温采样),然后选择最一致(或投票最多的)答案。 实现方法 def self_consistency(prompt, n_samples=5, temperature=0.8): """ Self-Consistency实现 """ responses = [] for i in range(n_samples): response = call_llm( prompt, temperature=temperature, max_tokens=500 ) # 提取答案 answer = extract_answer(response) responses.append(answer) # 投票选择最一致的答案 final_answer = majority_vote(responses) return final_answer 效果提升 在GSM8K数学推理数据集上: ...

2026-07-02 · 3 min · 444 words · 硅基 AGI 探索者
Agent规划算法对比

Agent规划算法对比:从ReAct到Tree of Thought的演进

引言 规划是智能的核心标志之一。一个Agent能否制定合理的计划、在执行过程中动态调整计划、从失败中学习改进计划,直接决定了它的能力上限。 2026年,Agent规划算法已经从简单的ReAct模式发展出多种变体。每种算法都有其适用的场景和局限。本文将系统对比这些算法,帮助开发者做出合适的选择。 一、规划算法分类 Agent规划算法可以从两个维度分类: 探索深度:单步规划 vs 多步规划 探索广度:线性规划 vs 树形规划 由此形成四象限: 线性 树形 单步 ReAct Self-Consistency 多步 Plan-and-Execute Tree of Thought 二、ReAct:推理+行动 2.1 原理 ReAct(Reasoning + Acting)是最基础的Agent规划模式。Agent在每一步中先推理(Thought),再决定行动(Action),观察结果(Observation),然后进入下一步。 Thought: 用户想知道今天北京的天气。我需要查询天气。 Action: search_weather(city="北京") Observation: 北京今天晴,最高温度35°C。 Thought: 我已经获得了天气信息,可以回答用户了。 Answer: 北京今天晴天,最高温度35°C。 2.2 优势 简单直观,易于实现 每一步都有明确的推理过程,可解释性强 适合大多数日常任务 2.3 劣势 每步只考虑当前最优,缺乏全局视角 容易陷入局部最优 在需要回溯的场景中效率低下 Token消耗随步数线性增长 2.4 适用场景 ReAct适合步骤较少(<10步)、每步决策明确、不需要回溯的任务。如信息查询、简单操作执行。 三、Plan-and-Execute:先规划后执行 3.1 原理 Plan-and-Execute将规划与执行分离。Agent首先制定一个完整的计划,然后逐步执行。执行过程中如果发现计划不可行,可以重新规划。 Plan: 1. 搜索北京今天的天气 2. 搜索北京明天的天气 3. 对比两天天气差异 4. 给出穿衣建议 Execute Step 1: search_weather(city="北京", date="today") → 晴,35°C Execute Step 2: search_weather(city="北京", date="tomorrow") → 雨,28°C Execute Step 3: 对比:今天晴热,明天降温有雨 Execute Step 4: 建议今天穿轻薄衣物,明天带伞穿长袖 3.2 优势 全局视角,避免局部最优 计划可审核,用户可以在执行前确认或修改 并行执行:无依赖的步骤可以并行 3.3 劣势 初始计划可能基于不完整信息,需要频繁重新规划 规划阶段消耗大量Token 对动态变化的环境适应性差 3.4 适用场景 适合步骤较多、需要全局规划、允许提前审核计划的任务。如项目管理、复杂工作流执行。 ...

2026-07-02 · 2 min · 322 words · 硅基 AGI 探索者
react prompting practice

ReAct Prompting实战

引言 ReAct(Reasoning and Acting)是一种让大语言模型交替进行推理和行动的提示框架。与纯推理型CoT不同,ReAct在推理过程中引入外部工具调用,使模型能够获取实时信息、执行计算和与环境交互。这一框架是现代AI Agent的核心范式之一。本文深入ReAct的原理、模板设计和工程实践。 ReAct的核心思想 推理与行动的交替 ReAct的核心思想是:模型在解决复杂问题时,不应仅依赖内部知识进行推理(可能产生幻觉),也不应盲目调用工具而不思考(可能浪费资源或产生错误操作)。正确的做法是在推理和行动之间交替: Thought:基于当前已知信息进行推理,决定下一步行动 Action:执行推理得出的行动(如搜索、计算、查询) Observation:获取行动结果作为新的已知信息 循环以上步骤直到得出最终答案 与纯CoT的区别 纯CoT的所有推理都在模型内部完成,无法获取外部信息。当问题需要实时数据或精确计算时,纯CoT容易产生事实性错误。ReAct通过工具调用弥补了这一缺陷。 与纯工具调用的区别 纯工具调用模式下,模型直接根据用户请求选择工具并执行,缺乏显式推理过程。这在简单任务中可行,但在需要多步规划和条件判断的复杂任务中容易出错。ReAct的推理步骤提供了决策透明性和可调试性。 ReAct模板设计 基础模板 你是一个能够使用工具解决任务的AI助手。请按照以下格式回答问题: 问题:[用户问题] Thought:[分析当前情况,推理下一步行动] Action:[工具名称] Action Input:[工具输入参数] Observation:[工具返回结果] ...(重复Thought/Action/Observation直到得出答案) Thought:[最终推理] Final Answer:[最终答案] # 可用工具 1. search(query: string): 搜索网络信息 2. calculator(expression: string): 数学计算 3. lookup(keyword: string): 在当前文档中查找信息 # 规则 - 每次只执行一个Action - 必须在Action之前给出Thought - 当有足够信息时给出Final Answer - 如果工具返回错误,分析原因并调整策略 工具描述规范 工具描述的质量直接影响ReAct的效果。一个好的工具描述应包含: 工具名:search_web 描述:搜索互联网获取实时信息。适用于需要最新数据、事实查询、新闻检索的场景。 参数: - query (string, 必填): 搜索关键词,建议使用简洁明确的查询词 返回:搜索结果摘要列表,每条包含标题、摘要和URL 限制:每次搜索最多返回5条结果 示例: Action: search_web Action Input: {"query": "2024年诺贝尔物理学奖获得者"} 复杂推理模板 对于需要深度推理的任务,增强Thought部分的结构: ...

2026-06-27 · 2 min · 301 words · 硅基 AGI 探索者
react vs plan execute

ReAct vs Plan-and-Execute:智能体推理范式对比

两种范式的历史脉络 智能体的核心挑战是:如何让 LLM 从"单次生成"进化为"多步推理与行动"。围绕这一问题,学术界和工业界发展出了两条主要路线——ReAct 和 Plan-and-Execute。它们代表了不同的认知哲学:一个是"边想边做"的直觉派,一个是"谋定后动"的规划派。 理解这两种范式的本质差异,对于智能体架构选型至关重要。选错范式不仅影响性能,更可能导致任务根本无法完成。 ReAct:推理与行动的交织 核心思想 ReAct(Reasoning + Acting)由 Yao 等人于 2022 年提出。其核心思想极其简洁:让 LLM 交替进行推理(Thought)和行动(Action),形成 Thought → Action → Observation → Thought 的循环,直到任务完成。 Thought 1: 用户想查找北京明天的天气,我需要调用天气 API Action 1: search_weather(city="北京", date="tomorrow") Observation 1: 北京明天晴,最高温 35°C,最低温 22°C Thought 2: 我已经获得了天气信息,可以回答用户了 Action 2: finish(result="北京明天晴天,气温 22-35°C") 工作机制 ReAct 的运行循环可以形式化为: loop: thought = LLM(reasoning_prompt + history) action = parse_action(thought) if action.type == "finish": return action.result observation = execute_tool(action) history.append((thought, action, observation)) 关键在于 reasoning_prompt 的设计——它需要引导 LLM 在每一步都显式地"前沿思考":当前状态是什么?下一步应该做什么?为什么这样做? ReAct 的提示模板通常包含以下结构: 你是一个能使用工具的智能体。可用的工具有: {tool_descriptions} 请按以下格式回答: Thought: 你的推理过程 Action: 工具名称[参数] (等待观察结果) Thought: 基于观察结果的推理 Action: 下一步行动或最终回答 问题:{question} ReAct 的优势 1. 强大的自适应能力 ...

2026-06-26 · 3 min · 469 words · 硅基 AGI 探索者
react prompt pattern

ReAct Prompt 模式:推理与行动的交织

ReAct 原理 ReAct(Reasoning + Acting)让 LLM 交替进行推理(Thought)和行动(Action),通过环境反馈(Observation)驱动推理链前进。 问题 → Thought → Action → Observation → Thought → Action → ... → Answer ↑ ↑ 内部推理 环境反馈 为什么 ReAct 有效 纯推理(CoT) 纯行动 ReAct 基于错误事实推理 盲目尝试 推理指导行动,行动修正推理 无法获取外部信息 无法利用中间结论 动态获取并整合信息 错误沿链传播 每步独立 观察反馈纠正方向 Thought-Action-Observation 循环 Thought 1: 分析问题,决定第一步 Action 1: 调用工具 Observation 1: 工具返回结果 Thought 2: 基于观察决定下一步 Action 2: 调用工具 Observation 2: 工具返回结果 Thought N: 已有足够信息 Action: FINISH Answer: 最终答案 示例 问题: 2024年奥斯卡最佳影片导演出生城市人口? Thought 1: 先找最佳影片和导演 Action 1: search("2024 Oscar best picture") Observation 1: 《奥本海默》获最佳影片,导演诺兰。 Thought 2: 诺兰出生城市 Action 2: search("Nolan birthplace") Observation 2: 出生于伦敦。 Thought 3: 伦敦人口 Action 3: search("London population") Observation 3: 约898万。 Thought 4: 信息齐全 Action 4: FINISH Answer: 诺兰出生于伦敦,人口约898万。 ReAct vs CoT 维度 CoT ReAct 外部信息 ❌ ✅ 错误纠正 ❌ ✅ 延迟 低 高 成本 低 高 适用场景 数学/逻辑 需外部信息的复杂任务 工具调用集成 工具定义 from dataclasses import dataclass from typing import Callable @dataclass class Tool: name: str description: str func: Callable parameters: dict def execute(self, **kwargs) -> str: try: return str(self.func(**kwargs)) except Exception as e: return f"Error: {e}" tools = [ Tool("search", "搜索网络", search_web, {"query": {"type": "string"}}), Tool("calculate", "数学计算", calculate, {"expression": {"type": "string"}}), ] ReAct Prompt 模板 REACT_PROMPT = """你是能使用工具的智能助手。 可用工具: {tools_description} 格式: Thought: 推理过程 Action: 工具名称 Action Input: JSON参数 Observation: (系统自动填入) 完成后: Thought: 最终推理 Action: FINISH Final Answer: 最终答案 最多 {max_iterations} 轮。 问题: {question} Thought 1:""" ReAct 引擎核心 class ReActEngine: def __init__(self, llm, tools, max_iter=10): self.llm = llm self.tools = {t.name: t for t in tools} self.max_iter = max_iter def run(self, question: str) -> dict: history = "" for i in range(self.max_iter): response = self.llm.generate(self._build_prompt(question, history), temperature=0) parsed = self._parse(response) if parsed.get('action') == 'FINISH': return {'answer': parsed.get('final_answer', ''), 'iterations': i+1} name = parsed.get('action', '') obs = self.tools[name].execute(**parsed.get('input', {})) if name in self.tools else f"未知工具: {name}" history += f"\nThought: {parsed['thought']}\nAction: {name}\nObservation: {obs}\n" return {'answer': '达到最大迭代', 'timeout': True} 高级优化 class RobustReActEngine(ReActEngine): def _check_loop(self, trace, window=3) -> bool: if len(trace) < window * 2: return False recent = trace[-window:] for i in range(len(trace) - window): if all(r['action'] == s['action'] for r, s in zip(recent, trace[i:i+window])): return True return False 适用场景 场景 适用性 原因 多跳问答 ⭐⭐⭐⭐⭐ 需逐步获取信息 数据分析 ⭐⭐⭐⭐⭐ 需查询+计算+分析 代码调试 ⭐⭐⭐⭐ 需执行代码看结果 创意写作 ⭐ 不需外部信息 数学证明 ⭐⭐ CoT 更高效 客服系统 ⭐⭐⭐⭐ 需查知识库+执行操作 研究助手 ⭐⭐⭐⭐⭐ 信息收集+综合分析 实战建议 工具描述要精确:选错工具的原因是描述模糊 限制迭代次数:设 8-10 轮上限 温度设为 0:ReAct 需要确定性 结构化输出:用 JSON 模式替代正则解析 缓存工具结果:减少 API 调用 日志全量记录:trace 是调试金矿 成本监控:多轮调用容易产生意外成本 用 function calling:LLM 支持时用它替代文本解析 ReAct 给 LLM 装上"手和眼"——不只是用脑子想,还能动手做。 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-06-24 · 2 min · 404 words · 硅基 AGI 探索者
agent loop design

Agent 循环机制设计:从 ReAct 到 Plan-and-Execute 的演进

Agent 的本质是循环 所有 Agent 都在做同一件事:感知 → 推理 → 行动 → 观察结果 → 重复。这个循环怎么设计,决定了 Agent 的能力上限。 第一代:ReAct 循环 ReAct(Reasoning + Acting)是最经典的 Agent 模式: Thought: 用户想了解今天的天气,我需要搜索 Action: search_weather("北京 今天") Observation: 北京今天晴,最高温32°C Thought: 搜索结果已获得,可以回答用户 Answer: 北京今天晴天,最高温度32°C。 核心代码 def react_loop(query, max_iterations=5): messages = [{"role": "user", "content": query}] for i in range(max_iterations): response = llm.invoke(messages + [ {"role": "system", "content": REACT_PROMPT} ]) if "Final Answer:" in response: return parse_answer(response) action = parse_action(response) observation = execute_tool(action) messages.append({"role": "assistant", "content": response}) messages.append({"role": "user", "content": f"Observation: {observation}"}) return "达到最大迭代次数" ReAct 的问题 短视决策:每一步只考虑当前最优,缺乏全局规划 Token 浪费:每轮都把完整历史发给 LLM 容易跑偏:一旦某步出错,后续步骤连锁偏移 无法并行:严格串行,效率低 第二代:Plan-and-Execute Plan-and-Execute 将循环拆为两个阶段: 阶段一:规划 def plan(query): prompt = f"""将以下任务分解为具体步骤: 任务:{query} 输出JSON格式的步骤列表。""" plan = llm.invoke(prompt) return json.loads(plan) # 输出示例 { "steps": [ {"id": 1, "action": "search", "params": {"query": "2026年AI Agent市场规模"}}, {"id": 2, "action": "search", "params": {"query": "主要Agent框架市场份额"}}, {"id": 3, "action": "analyze", "params": {"source": "step1+step2"}}, {"id": 4, "action": "write_report", "params": {"source": "step3"}} ] } 阶段二:执行 def execute_plan(steps): results = {} for step in steps: result = execute_step(step, results) results[step["id"]] = result # 动态重规划 if step.get("replan"): new_steps = replan(query, results) steps = merge_plan(steps, new_steps) return results 优势对比 维度 ReAct Plan-and-Execute 全局视野 无 有 可并行 ❌ ✅(无依赖步骤) 错误恢复 依赖LLM自行纠正 可重新规划 Token 效率 低(重复发送历史) 高(只发当前步骤) 复杂任务 容易失败 表现稳定 第三代:自适应循环 2026 年最新的研究趋向于动态选择策略: ...

2026-06-23 · 2 min · 393 words · 硅基 AGI 探索者
鲁ICP备2026018361号