news 2026/9/4 20:21:07

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自反思规划器(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_round=trial, failed_trajectory=str(trajectory), critique_lesson=lesson )) 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

三、生产实践中的关键调优经验

  1. 反思必须“短小、具体、可行动”
    如果反思生成器输出了一大段形而上的哲学讨论(如“由于对复杂系统理解不充分”),这种反思对下一步规划毫无价值。必须在 Prompt 中强约束反思必须指出具体的参数名、工具调用顺序或字段映射。
  2. 限制反思记忆池容量(Ring Buffer)
    保留最近 2~3 次核心失败的反思教训即可。无限制追加历史反思会导致 Prompt 长度失控,反过来稀释大模型的主线注意力。
  3. 结合短期确定性规则硬过滤
    如果已经反思明确了某个字段is_deleted不存在,可以在工具拦截器层直接设置临时黑名单,防止模型偶尔再次犯抽。

四、工程总结

反思机制是将大模型从“机械执行的脚本工具”升华至“具备自主调优与自适应韧性智能体”的分水岭。用错误沉淀经验,用经验重塑规划,Reflexion 范式让复杂长链路系统在面对不可预测的环境扰动时真正拥有了自愈的底气。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 20:21:03

从关系型数据库到向量数据库:架构师必须掌握的存储新范式

从关系型数据库到向量数据库&#xff1a;架构师必须掌握的存储新范式在过去的三十余年里&#xff0c;关系型数据库&#xff08;RDBMS&#xff0c;如 MySQL、PostgreSQL、Oracle&#xff09;是整个软件工程世界的数据基石。每一位后端架构师的知识体系&#xff0c;都是建立在“B…

作者头像 李华
网站建设 2026/9/4 20:18:49

运动跟踪基准全面解析:从评估框架到工程实现

最近在调研人体运动分析与视频理解方向时&#xff0c;被 HumanTracker 这个题目吸引了。它并不是又一个姿态估计模型&#xff0c;而是一类更值得仔细拆解的工作&#xff1a; Motion Tracking Benchmark 。放在当前的研究节奏里&#xff0c;其实很多团队的模型精度已经不低&am…

作者头像 李华
网站建设 2026/9/4 20:18:42

从print(list)到PDF打印:拆解“打印列表”三类场景与排查思路

如果你在一个技术群里问“Printing Lists”&#xff0c;大概率会收到两种回答。一种人以为你问的是 Python 里怎么用print函数打印一个列表&#xff1b;另一种人以为是打印机、PDF、设备列表之类的东西出了问题。这两个回答都有道理&#xff0c;但也说明“打印列表”这个词从一…

作者头像 李华
网站建设 2026/9/4 20:18:18

Python轨道交通客流预测系统:从数据到模型的全流程实践

简介&#xff1a;本资源是一套面向本科毕业设计与课程实践的轨道交通客流预测系统完整实现&#xff0c;基于Python构建&#xff0c;聚焦城市轨交场景下的短时客流趋势建模与可视化分析&#xff0c;适用于计算机、交通工程、智能科学等专业学生开展毕业设计、期末大作业或课程设…

作者头像 李华
网站建设 2026/9/4 20:17:55

C#船舶升级设计源码框架:工业通信、协议解析与船级社认证实践

简介&#xff1a;本资源是一套面向船舶工程技术人员与C#开发者的船舶现代化升级设计源码解决方案&#xff0c;聚焦老旧船舶动力、导航、安全及通信系统的软件层面技术改造与功能增强。压缩包共307个文件&#xff0c;总大小21.09MB&#xff0c;包含137个核心C#源文件&#xff08…

作者头像 李华