Skip to content

什么是 Reflexion?它和 ReAct 有什么区别?如何提升 Agent 的自我纠错能力? ​

  • 标签:AI、大模型、Agent

🏛 业务架构师 ​

Reflexion 是一种带"自我反思"的 Agent 机制:任务失败后,让模型复盘失败原因,生成文字化的"经验教训"(反思记忆),存入上下文后重新尝试——下一次尝试会参考这些教训避坑。与 ReAct 的区别:ReAct 是"思考→行动→观察"的执行循环,出错就换一步试;Reflexion 在其上加了" trial 级别"的外循环——整个尝试失败后先反思再重开,相当于"写错题本"。

提升自我纠错能力的机制拆解:

  1. 失败信号显性化:环境反馈(测试结果、工具报错)被转化为自然语言的失败分析,比原始错误码信息量大得多;
  2. 反思记忆累积:多次尝试的教训持续注入上下文,模型"越挫越懂"——同一类坑不踩第二次;
  3. 评估器引导:可配自评估(模型给自己的中间产出打分)或外部评估器(单元测试作为信号源)。

典型例子:代码 Agent 第一次生成的代码测试没过 → 反思"边界条件漏了空输入" → 重写时显式处理 → 通过。

业务清醒剂:反思每轮都烧 token(重试整个任务),成本翻倍是常态;反思质量依赖模型元认知,弱模型会"假反思"(总结一堆没用的)。落地建议:限重试次数(2~3 次)、只对可验证任务(有测试/校验器兜底)启用、反思结论沉淀到长期记忆让它长期复利。我的实践:带评估器的 Reflexion 在代码生成、数据处理这类"可自动验证"的任务上收益最确定,开放式任务慎用。

🏗 系统架构师 ​

Reflexion = "执行 → 自我反思 → 记忆沉淀 → 重试"的迭代增强范式,在 ReAct 之上加了"从失败中学习"的环节。

与 ReAct 的区别(一句话:ReAct 边走边看,Reflexion 摔倒后写复盘):

  • ReAct:Thought → Action → Observation 循环,失败就失败,下一次任务从头再来;
  • Reflexion:任务失败后增加一个自我评价环节——LLM 分析失败轨迹(哪步错了、为什么、下次怎么改),生成文字化的"反思结论"存入记忆( episodic memory),下一次尝试时把反思注入上下文,避免重蹈覆辙。

工作流程:Actor(ReAct 执行)→ Evaluator(评分/判断失败)→ Self-Reflection(生成失败归因与改进策略)→ 记忆存储 → 下一轮 Actor 带着反思重试,直到成功或轮次上限。

如何提升自我纠错能力(我的生产实践):

  • 给评价标准:自我反思不是自由发挥,注入任务特定的 rubric(正确性判据),否则反思泛泛而谈;
  • 反思具体化:强制输出"哪一步 + 什么原因 + 下一步具体改什么",禁止"我要更仔细"这类无效结论;
  • 失败可验证的任务优先:有测试用例/编译结果/单元测试反馈的任务(代码、数学)反思信号客观,纠错效果最好——HumanEval 上 Reflexion 提升显著就是这类场景;
  • 记忆治理:反思记忆带任务上下文标签,跨任务检索注入,多条反思冲突时按成功率加权。

架构价值:把"重试"从盲目重复升级为带经验的改进——代价是 token 消耗 ×N 轮,适合高价值任务。

💻 全栈开发专家 ​

Reflexion:Agent 失败后生成语言化的自我反思,存入记忆,下次尝试时参考,从而自我纠错。相当于给 ReAct 加了「复盘-再来」的外环。

与 ReAct 的区别:

  • ReAct:思考→行动→观察,一路向前。失败了往往换个措辞再试,没有系统性吸取教训;上下文里只有当前轨迹;
  • Reflexion:轨迹失败(评估器给 fail 或答案错误)后,增加一步 Self-Reflection——LLM 分析「为什么失败:哪步信息没拿到/哪个工具用错/假设错了」,生成结构化反思文本写入 Episodic Memory;重启任务时反思注入上下文,避开已知错误。
Attempt 1: ReAct 轨迹 → 失败 → 反思("失败原因: SQL没按分区过滤导致超时")
Attempt 2: 轨迹+反思 → 改进 → 成功
(反思积累在记忆里,跨任务复用)

怎么用它提升自我纠错(工程落地):

  1. 失败判定器:结果校验(测试通过?答案格式对?)或 LLM evaluator;
  2. 反思 prompt 模板化:「列出失败的具体步骤、根因假设、下一次的规避动作」——模板化防止反思变流水账;
  3. 反思条目带场景标签检索复用(同类任务自动带上历史教训);
  4. 设置尝试上限(2~3 次),反思解决不了就升级人工。

我的实测感受:代码修复、数据查询这类「有明确成败信号」的任务,Reflexion 提升显著(成功率 +15~25%);开放性任务失败信号模糊,效果打折——先有可靠 evaluator 再上 Reflexion。