自反思规划器(Reflexion):如何从失败的执行轨迹中自主提取经验

发布时间:2026/9/4 20:21:31
自反思规划器(Reflexion):如何从失败的执行轨迹中自主提取经验 自反思规划器Reflexion如何从失败的执行轨迹中自主提取经验在单智能体向多智能体演进的长链路任务中一个核心的工程痛点是大模型一旦在某一步操作中遭遇外部工具报错或结果不符合预期往往会机械地在同一个错误上重复尝试直到耗尽所有重试次数。例如Agent 在查询某数据库表时由于字段名写错返回了Column user_id not found没有反思能力的传统 ReAct 规划器可能会连续 3 次带着完全一模一样的 SQL 语句继续发起调用陷入无意义的死循环。Reflexion自反思规划范式通过在规划闭环中引入“经验记忆池Episodic Memory”与“自我批评推理Self-Reflection”赋予了 Agent 像人类工程师一样从报错日志中提取教训、动态修正规划策略的能力。一、Reflexion 架构的三大核心组件与数据流[ 用户目标 / 业务任务 ] │ ▼ ┌────────────────────────────────────────────────────────┐ │ 1. 执行行动者 (Actor / Planner) │ │ 结合目标、当前状态与历史反思经验生成具体的 Action 序列 │ └──────────────────────────┬─────────────────────────────┘ │ (产生执行轨迹 Trajectory) ▼ ┌────────────────────────────────────────────────────────┐ │ 2. 状态评估器 (Evaluator / Guard) │ │ 校验执行结果是否成功若失败则触发反思信号 │ └──────────────────────────┬─────────────────────────────┘ │ (当任务失败或结果偏差时) ▼ ┌────────────────────────────────────────────────────────┐ │ 3. 自反思生成器 (Self-Reflection Generator) │ │ 分析“为什么失败”、“关键教训是什么”生成自然语言反思总结 │ └──────────────────────────┬─────────────────────────────┘ │ (写入短期记忆池) ▼ ┌────────────────────────────────────────────────────────┐ │ 4. 经验记忆池 (Episodic Reflection Buffer) │ │ 将反思总结动态注入到下一次尝试的 System Prompt 中 │ └────────────────────────────────────────────────────────┘二、生产级 Reflexion 规划器的 Python 实现from typing import List, Dict, Any, Optional from pydantic import BaseModel, Field class ReflectionMemory(BaseModel): attempt_round: int failed_trajectory: str critique_lesson: str class ReflexionPlanner: def __init__(self, llm_client, max_trials: int 3): self.llm llm_client self.max_trials max_trials self.reflections: List[ReflectionMemory] [] def execute_with_reflection(self, goal: str, environment_executor) - Dict[str, Any]: for trial in range(1, self.max_trials 1): # 1. 组装包含历史反思经验的 Prompt prompt self._build_prompt_with_reflections(goal) # 2. 执行行动 (Actor 生成计划并由环境运行) plan self.llm.generate(prompt) trajectory, is_success, error_observation environment_executor.run(plan) if is_success: return {status: SUCCESS, trials: trial, final_plan: plan} # 3. 失败触发自反思 (Critique) if trial self.max_trials: lesson self._generate_critique(goal, plan, error_observation) self.reflections.append(ReflectionMemory( attempt_roundtrial, failed_trajectorystr(trajectory), critique_lessonlesson )) print(f【Reflexion 自反思 第 {trial} 轮教训】: {lesson}) return {status: FAILED, reason: 超过最大反思尝试上限} def _generate_critique(self, goal: str, failed_plan: str, error_msg: str) - str: prompt f 你是一名严谨的智能体反思专家。你在执行以下任务时遭遇了失败。 【目标】: {goal} 【刚才尝试的方案】: {failed_plan} 【环境返回的错误观察】: {error_msg} 【反思要求】: 请用 2~3 句话精准提炼出失败的核心原因并给出在下一次尝试中绝对不应该再犯的具体避坑指引。不要客套。 return self.llm.generate(prompt).strip() def _build_prompt_with_reflections(self, goal: str) - str: prompt f【当前目标】: {goal}\n if self.reflections: prompt \n【前序失败尝试与反思避坑经验】:\n for ref in self.reflections: prompt f- 第 {ref.attempt_round} 次失败教训: {ref.critique_lesson}\n prompt \n请根据以上经验制定全新的执行方案并调用工具:\n return prompt三、生产实践中的关键调优经验反思必须“短小、具体、可行动”如果反思生成器输出了一大段形而上的哲学讨论如“由于对复杂系统理解不充分”这种反思对下一步规划毫无价值。必须在 Prompt 中强约束反思必须指出具体的参数名、工具调用顺序或字段映射。限制反思记忆池容量Ring Buffer保留最近 2~3 次核心失败的反思教训即可。无限制追加历史反思会导致 Prompt 长度失控反过来稀释大模型的主线注意力。结合短期确定性规则硬过滤如果已经反思明确了某个字段is_deleted不存在可以在工具拦截器层直接设置临时黑名单防止模型偶尔再次犯抽。四、工程总结反思机制是将大模型从“机械执行的脚本工具”升华至“具备自主调优与自适应韧性智能体”的分水岭。用错误沉淀经验用经验重塑规划Reflexion 范式让复杂长链路系统在面对不可预测的环境扰动时真正拥有了自愈的底气。