厨房里,一个从没下过厨的小白对着菜谱发愁。他手忙脚乱地做了第一盘红烧肉,尝了一口——咸得可以齁死人。他没有扔掉锅铲,而是撕下一张便利贴,写上“盐放一半,别手抖!”,贴在灶台上。第二次,他照着便利贴来做,味道好多了,只是糖又少了。他又补了一笔:“糖要一勺半。”第三次、第四次……灶台上的便利贴越贴越多,他的红烧肉也越来越香。这就是 Reflexion 反思机制最朴素的直觉——让 AI 也像这位新手厨师一样,尝一口,记一笔,再做一次,越做越好。Reflexion 由三个角色构成:负责“做菜”的 Actor、负责“尝菜”的评估器、负责“写反思”的自我反思模块。它不需要重新训练模型,只需要在推理时加入“反思 + 记忆 + 重试”的循环。

岗位关联

学习 Reflexion,你将掌握一种不更新模型参数、仅靠自我批评与短期记忆就能显著提升 AI 推理能力的低成本方案,这是构建强健 AI Agent 的核心技能。

目录
  1. 可视化演示
  2. 一、机制概述:做菜、尝味、写纸条的分工
  3. 二、自我批评:把失败翻译成文字教训
  4. 三、短期记忆:灶台上的便利贴墙
  5. 四、迭代尝试:一轮更比一轮好吃
  6. 五、评估信号:凭什么说这盘菜合格了
  7. 六、应用场景:学会红烧肉,再做满汉全席
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示Reflexion反思机制让的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Reflexion反思机制让:Refl Reflexion反思机制的设 Actor-Critic-Re 核心机制可视化 Reflexion反思机制让整体架构与关键组件

一、机制概述:做菜、尝味、写纸条的分工

想象一下,厨房里的小白第一次做红烧肉,手忙脚乱地把菜谱上“适量盐”理解成三大勺,结果整锅菜咸到发苦。他没有沮丧,而是冷静地写下一张便利贴——“盐只放半勺”——贴在灶台边。第二次做菜时,他记住了纸条上的提醒,又发现糖放少了,于是再补一张纸条。这个“做菜—尝味—写纸条—再做”的循环,正是 Reflexion 反思机制的核心模样:让 AI 在每一轮尝试后,主动总结失败原因,把它记在短期记忆里,下一轮带着教训重新出发。

Reflexion 框架把角色拆分成三个明确的分工。第一是 Actor,相当于厨师,负责根据当前任务生成答案或行动;第二是评估器,相当于试菜的评委,负责判断结果好不好;第三是自我反思模块,相当于写便利贴的人,负责把失败原因转化成文字教训。三个模块协作完成一次循环,然后在记忆的辅助下开启下一轮。

在整个过程中,模型参数始终不变。Actor 不需要做任何梯度计算或微调,它只是把“问题 + 反思笔记”拼在一起作为输入,然后照常生成文本。真正的“提升”来自输入内容的变化:每一次反思都让模型在下一次生成时了解到自己上次错在哪,从而更有可能避开同样的坑。这就像厨师的技术没变,但灶台上的便利贴让他记得少放盐——信息的改变带来了行为质量的改变。

所以,Reflexion 的第一步不是更换厨师,也不是重新培训他,而是在他的灶台上摆一张会越写越厚的便利贴墙。厨师还是那个厨师,但只要每一次失败都能被记下来、被用上,下一盘菜就永远值得期待。

尝试t+1=厨师(x⊕备忘t)\displaystyle \text{尝试}_{t+1} = \text{厨师}\big(x \oplus \text{备忘}_t\big)
这条公式可以读作:新一轮的答案 = 厨师拿着“菜单 + 一叠便利贴”做出来的菜。
  1. 新一轮答案表示第 t+1 轮生成的答案或行动,即厨师端出的最新一盘菜。
    尝试t+1\text{尝试}_{t+1}
  2. 厨师主角模型 Actor,负责根据当前问题与记忆生成结果。
    厨师(⋅)\text{厨师}(\cdot)
  3. 菜单 x用户提出的原始问题,相当于顾客下的单。
    xx
  4. 拼接符把“菜单”和“便利贴”拼成一份完整提示词的操作。
    ⊕\oplus
  5. 便利贴集合前 t 轮积累的反思笔记,相当于灶台上那叠便利贴。
    备忘t\text{备忘}_t

二、自我批评:把失败翻译成文字教训

新手厨师最珍贵的品质,是敢于尝自己做的菜。红烧肉出锅,夹起一块放进嘴里,眉头一皱——咸了。这个“尝”的动作就是自我批评的起点:不回避失败,而是主动去感受失败的具体样子。Reflexion 里的自我批评模块做的正是这件事,它把“这盘菜咸了”这种感受,翻译成模型能理解和复用的文字。

自我批评在论文中被称为 Self-Reflection,它的输入是上一轮的完整轨迹——包括问题、模型生成的答案、评估器的结果,然后输出一段文本反思。这段文本不是简单的“我错了”,而是具体的错误分析和改进方向。就像便利贴上写的不是“做失败了”,而是“盐放多了,下次放半勺”。

为什么非要用文字而不直接用一个分数?因为文字是模型最擅长的表达形式。一个“40 分”无法告诉模型错在哪里,而一句“你在计算到第二步时进位错了”则能精确地引导下一次生成。这也是 Reflexion 区别于传统强化学习的核心:它用语言作为强化信号,而不是数值奖励。

所以自我批评不是让 AI 自责,而是让 AI 当自己的美食评论家。它把模糊的失败变成一句句具体、可执行的整改意见,为下一次开火做饭备好说明书。

rt=批评(结果t, 信号t)\displaystyle r_t = \text{批评}\big(\text{结果}_t,\ \text{信号}_t\big)
这条公式表示:反思文本 = 批评模块读一遍刚出炉的结果和评委反馈,写出一段改进建议。
  1. 反思文本第 t 轮产生的文字教训,相当于一条新写的便利贴。
    rtr_t
  2. 批评模块自我反思模块,通常就是大模型本身,负责阅读结果后写批评。
    批评(⋅)\text{批评}(\cdot)
  3. 候选结果第 t 轮 Actor 生成的答案或动作,即刚出锅的那盘菜。
    结果t\text{结果}_t
  4. 评估信号评估器给出的反馈信息,相当于“太咸”这个味觉信号。
    信号t\text{信号}_t

三、短期记忆:灶台上的便利贴墙

便利贴如果不贴起来,转头就忘;贴在哪里、怎么用,同样有讲究。Reflexion 的短期记忆模块就是那面灶台墙——它专门负责保存每一轮产生的反思文本,并在下一轮尝试时,把关键的几张纸条重新递到模型眼前。

这个短期记忆在实现上通常就是一个缓存列表,存的是字符串形式的反思笔记。与模型的上下文窗口不同,它不是把所有历史对话都塞回去,而是有选择地注入反思内容。这就像厨师不会把整个厨房的杂物都摊在灶台上,只挑跟自己这道菜最相关的几张纸条。

当 Actor 开始新一轮尝试时,系统会把原始问题与所有反思笔记拼接起来,构造成新的提示词。这样,模型每次生成时都“看得见”自己过去踩过的坑。随着迭代进行,记忆越来越厚,模型的行为也越来越稳健。论文中把这种机制类比为语言强化学习——把“语言奖励”存储在外部记忆里,供未来的策略参考。

记忆是迭代的土壤。要是每轮尝试都从零开始,模型永远像第一天学做菜的新手;而有了会累积的便利贴墙,每一次失败都变成了通往成功的台阶。

Mt+1=Mt∪{ rt }\displaystyle M_{t+1} = M_t \cup \{\, r_t \,\}
这条公式表示:新记忆 = 旧记忆加上新写的反思纸条,旧纸条一张都不撕掉。
  1. 旧记忆集合当前积累的反思笔记,相当于灶台上已有的便利贴。
    MtM_t
  2. 新反思纸条刚产生的反思文本,即写完准备贴上去的新纸条。
    rtr_t
  3. 并集运算把新纸条加入旧纸条堆,已有的经验全部保留。
    ∪\cup
  4. 更新后记忆下一轮尝试时会被注入输入的新记忆集合。
    Mt+1M_{t+1}

四、迭代尝试:一轮更比一轮好吃

一道菜要做到让全家满意,很少一蹴而就。第一轮咸,第二轮淡,第三轮终于恰到好处。这个过程听起来平凡,却是 Reflexion 最强大的地方——它把“失败—反思—再试”的循环制度化,让模型有边界地、持续地向正确答案逼近。

每一轮完整循环包括:Actor 根据当前记忆生成候选答案,评估器判断答案是否正确,反思模块在失败时写下教训,然后带着更新后的记忆进入下一轮。这个循环会一直持续到评估器给出通过信号,或达到预设的最大轮数。

收敛条件是循环设计的关键。Reflexion 一般设置一个最大尝试次数,避免无限重试浪费算力。同时,由于反思笔记是文本,模型在下一轮不一定采纳建议,因此论文还引入了“重复尝试的多样性”技巧——如温度采样或多次独立生成——确保模型不是简单复制之前的错误答案。

Reflexion 的迭代不是漫无目的地瞎试,而是像一位有记性的厨师,每翻一次锅都离色香味俱全更近一步。停止条件一到,他就能自信地端出那盘合格的菜。

t∗=min⁡{ t : 信号t(结果t)=1 }\displaystyle t^{*} = \min \big\{\, t \ :\ \text{信号}_t(\text{结果}_t) = 1 \,\big\}
这条公式表示:循环在最早的“通过轮次”停止——就像做菜做到第一次被全家点赞就收工。
  1. 首次成功轮数循环可以停止的时刻,即第一次做出满意成品的轮次。
    t∗t^{*}
  2. 取最小值找到“最早的那一次通过”,不等到最后一轮。
    min⁡\min
  3. 通过条件第 t 轮的结果通过了评估器,等同于评委点头说“行”。
    信号t(结果t)=1\text{信号}_t(\text{结果}_t) = 1

五、评估信号:凭什么说这盘菜合格了

菜好不好吃,不能光靠厨师自己说。评分标准可以来自家人的表情、美食评委的打分,甚至是一台测咸度的仪器。在 Reflexion 里,评估信号就是这样的外部裁判,它负责告诉系统:这一轮到底成了没有。

评估信号因任务而异。在代码生成任务中,最常用的是单元测试——把生成的代码跑一遍,全部用例通过才算成功;在数学推理任务中,可以比对最终答案与标准答案是否一致;在决策规划任务里,则看环境是否返回了成功的奖励信号。

高质量评估信号是 Reflexion 有效的前提。如果信号本身不准确,反思就会建立在错误的前提上。论文还探索了训练一个专门的评分模型来对结果打分,让 Reflexion 能扩展到没有现成测试用例的开放任务中。这个评分模型相当于一位更专业的评委,能给出更细腻的反馈。

评估器的存在,让“好吃”不再是一家之言。有了这台靠谱的测咸仪,厨师才知道该往哪个方向调整调料——反思也因此有了坚实的依据。

信号(a)={1,测试全部通过0,其他情况\displaystyle \text{信号}(a) = \begin{cases} 1, & \text{测试全部通过} \\ 0, & \text{其他情况} \end{cases}
这条公式表示:评估器对候选答案的打分只有两个档——通过就是 1,没通过就是 0。
  1. 打分函数评估器对候选答案 a 的判定结果,只输出 1 或 0。
    信号(a)\text{信号}(a)
  2. 通过分支当所有单元测试都通过时,信号值为 1。
    1, 测试全部通过1,\ \text{测试全部通过}
  3. 失败分支只要有一个用例没通过,信号值就是 0。
    0, 其他情况0,\ \text{其他情况}

六、应用场景:学会红烧肉,再做满汉全席

当一位厨师通过便利贴和反复试做掌握了红烧肉,他学到的其实不是一道菜,而是一套方法论——尝味、记录、调整、再试。这套方法论放在代码世界、数学世界和决策世界里,同样好使。

在代码生成中,Reflexion 是目前最常用的自我修复框架之一:模型先写一版代码,测试失败后反思原因,再带着反思修第二版,往往几轮内就能通过所有测试。在数学推理中,Reflexion 让模型检查自己解题步骤中的逻辑漏洞,减少低级计算错误。

在更复杂的决策规划任务中,Reflexion 也被用来增强 Agent 的行为策略:Agent 在环境中尝试,失败后生成文本反思,例如“不要走会撞到障碍物的路径”,然后在新一轮行动中避开相同错误。这种不更新权重的“语言强化学习”特别适合大模型时代——因为模型的参数太昂贵,而文字反思几乎零成本。

今天,Reflexion 已在许多 AI Agent 产品中扮演“事后诸葛亮”的角色:让模型在犯错后停下来想一想,把教训写进记忆里,再出发。学做菜的新手最终会成为大厨,而会反思的 AI,也会在一次又一次尝试中走向更强。

a^=arg⁡max⁡at 信号(at)\displaystyle \hat{a} = \arg\max_{a_t} \ \text{信号}(a_t)
这条公式表示:在所有轮次的候选答案里,挑出评估分最高的那个作为最终交付。
  1. 最终答案精挑细选后端上桌的那道菜,是整个流程的交付成果。
    a^\hat{a}
  2. 取最大值在所有候选里找出得分最高的那一个。
    arg⁡max⁡\arg\max
  3. 候选答案每一轮尝试生成的结果。
    ata_t
  4. 评估得分每个答案对应的分数,相当于评委给每道菜的评分。
    信号(at)\text{信号}(a_t)

AI 应用场景

智能代码调试助手

阶段:推理增强

解决的问题:传统 debug 工具只能报错,无法给出修改建议;程序员手写用例成本高。AI 用 Reflexion 循环让模型自己写代码、跑测试、记下失败原因、再改一次,把“报错—人工分析—修改”压缩成自动循环,大幅减少人工介入。

具体案例:一个电商后端要写“列表去重返回长度”的函数。Reflexion Agent 第一轮给出 return len(nums) 的错误代码,评估器用单元测试发现失败,反思记录“需要先用 set 去重”,第二轮生成 len(set(nums)),3 轮内完成修复并输出测试报告。

数学解题教练

阶段:推理增强

解决的问题:大模型做数学题经常思路对、计算错,传统提示词技巧只能碰运气。Reflexion 让模型对每一步生成自我检查,并写下“计算时要小心进位”之类的文字提醒,在下一轮逐步校验,显著提升多步推理的准确率。

具体案例:一道多步应用题,模型第一轮在第三行算错结果,反思模块指出“第二步的乘法忘加了进位”,第二轮模型带着这条教训重新求解,并主动写出分步验算,最终输出正确答案。

Python 演示

python42 行
class ReflexionAgent:    def __init__(self):        self.memory = []        self.attempts = 0     def act(self, task):        self.attempts += 1        if self.attempts == 1:            return "def solution(nums): return len(nums)"        for note in self.memory:            if "set" in note:                return "def solution(nums): return len(set(nums))"        return "def solution(nums): return len(set(nums))"     def evaluate(self, answer):        return "set" in answer     def reflect(self, task, answer, passed):        if passed:            return ""        return "反思:上次直接返回 len(nums),没有去重;下次应先用 set(nums) 去重。"     def run(self, task, max_rounds=3):        result = None        for _ in range(max_rounds):            result = self.act(task)            passed = self.evaluate(result)            note = self.reflect(task, result, passed)            if note:                self.memory.append(note)            if passed:                return True, result, self.attempts        return False, result, self.attempts  if __name__ == "__main__":    agent = ReflexionAgent()    ok, code, rounds = agent.run("去除列表重复元素并返回长度")    print("是否通过:", ok)    print("最终代码:", code)    print("尝试轮数:", rounds)    print("反思记忆:", agent.memory)
目的:用模拟 LLM 的方式演示 Reflexion 三模块循环——Actor 生成答案、评估器判断对错、反思模块写教训,第二轮借助记忆修复 bug。
  1. self.memory = []短期记忆缓存,相当于灶台上的便利贴墙,记录每轮反思文本。
  2. self.attempts = 0记录尝试轮数,与控制迭代次数有关。
  3. def act(self, task)Actor 模块:根据任务和记忆生成候选答案,首次不读记忆所以出错。
  4. for note in self.memory:经验回放:在生成前逐条翻阅反思笔记,把“用 set 去重”的教训应用进代码。
  5. def evaluate(self, answer)评估器模块:模拟单元测试,检查答案是否包含 set 去重逻辑。
  6. def reflect(self, task, answer, passed)反思模块:失败时输出改进建议,成功时不写反思。
  7. if passed: return True, result, self.attempts收敛判断:评估通过立即停止循环,返回最终代码。
  8. agent.run("去除列表重复元素并返回长度")主入口:完整跑一轮 Reflexion 迭代流程。

常见误区

误区我听说“让 AI 学会反思”一定是把反思能力训练进了模型参数里,那肯定要花很多钱做微调,普通人根本用不起。

正解Reflexion 完全不更新模型参数。它只是在推理时增加一个“生成→评估→反思→再生成”的循环,把反思文本存进外部记忆供下一轮参考。成本只是多几次模型调用,相比训练几乎可以忽略。这就好比厨师没有报名培训课,只是在自己灶台上贴便利贴。

为何常见:听到“机制”就联想到训练流程,实际上 Reflexion 属于提示词和推理层面的技巧,与微调是两条完全不同的路线。

误区模型能记住信息不就是靠上下文窗口吗?Reflexion 说的短期记忆,应该就是上下文窗口换个说法。

正解上下文窗口是模型每轮能看到的全部输入文本,内容庞杂且位置有限;Reflexion 的短期记忆是一个独立的显式缓存,只存放反思笔记,由系统在下一轮精心拼接后再注入上下文起点。两者都让模型“看到”历史,但管理方式、内容边界完全不同。

为何常见:日常聊大模型时“记忆”和“上下文”经常混用,容易把内部机制与外部缓存混为一谈。

误区自己批评自己肯定不客观,应该专门训练一个很强的裁判模型来挑毛病,否则反思没效果。

正解论文中的做法灵活多样,既可以用单独的评分模型,也可以让同一个模型扮演 Actor 和自我反思两个角色。关键不是“谁在批评”,而是评估信号是否可靠——测试用例、环境反馈等外部信号才决定批评的方向。

为何常见:人凭直觉认为“旁观者清”,但实验证明同一个模型也能从自己犯的错误中提炼出有效教训。

误区Reflexion 听起来这么强大,那所有难题交给它多试几轮不就都能解出来了吗?

正解Reflexion 提升的是成功概率的上限,但不保证一定成功。如果模型本身的推理能力不足,或评估信号有噪声,反思也可能得出错误结论。它只是给模型一个从错误中学习的机会,而不是万能的“失败保险”。

为何常见:看到论文和案例中一轮比一轮好的曲线,容易把机制神化,忽略了评估质量和模型基础能力的天花板。

面试题

Q1. Reflexion 机制的核心思想是什么?

单选题 · easy

  • A.用更大的模型重新训练
  • B.自我批评并短期记忆迭代改进← 正确答案
  • C.增加模型的参数量
  • D.用强化学习微调模型

答案:B。Reflexion 的核心是自我批评 + 短期记忆回放 + 迭代重试。A 和 C 涉及训练/参数变化,D 是另一种方法。可以用“做菜尝一口并贴便利贴”来记忆——不换厨师,只积累经验。

Q2. 在厨房做菜比喻中,“备忘纸条”对应 Reflexion 的哪个组件?

单选题 · easy

  • A.Actor 生成模块
  • B.尝菜评估模块
  • C.备忘纸条记忆← 正确答案
  • D.奖励函数模块

答案:C。备忘纸条对应短期记忆,负责存反思笔记。Actor 是厨师,评估模块是试菜的评委。模拟题旨在区分 Reflexion 三模块分工。

Q3. Reflexion 中 Actor 模块的主要职责是什么?

单选题 · mid

  • A.生成答案或行动← 正确答案
  • B.计算模型梯度
  • C.评估结果好坏
  • D.存储反思笔记

答案:A。Actor 相当于厨师,负责根据“问题 + 反思记忆”生成答案或行动。评估结果靠评估器、存笔记靠短期记忆,B 属于训练流程,与 Reflexion 无关。

Q4. 以下哪项不是 Reflexion 需要的评估信号来源?

单选题 · mid

  • A.单元测试用例
  • B.环境反馈信号
  • C.手工反思笔记← 正确答案
  • D.启发式规则判断

答案:C。评估信号是判断结果好坏的“裁判”,来自测试用例、环境反馈或规则。手工反思笔记是模型自己生成的输出,不是评估信号的来源,把因果倒置了。

Q5. Reflexion 中短期记忆发挥的作用包括哪些?

多选题 · mid

  • A.存储反思文字笔记← 正确答案
  • B.注入上下文供参考← 正确答案
  • C.替代模型的参数
  • D.避免重复的错误← 正确答案

答案:ABD。短期记忆存反思文本、在下一轮注入上下文、帮助模型避免重复犯错。它不替代模型参数——参数始终固定,记住这一点就不会被“记忆”这个词误导。

Q6. 当任务没有现成测试用例时,Reflexion 还可以怎么做?

单选题 · hard

  • A.直接用随机猜测
  • B.用评分模型代评估← 正确答案
  • C.放弃迭代循环
  • D.增加训练数据量

答案:B。论文提出训练一个专门的评分模型来评估结果质量,让 Reflexion 能处理开放任务。随机猜测和无评估都不是机制的本意,增加训练数据属于另一条路线。

Q7. 与传统微调方法相比,Reflexion 的优势有哪些?

多选题 · hard

  • A.无需更新参数← 正确答案
  • B.推理成本更低← 正确答案
  • C.迁移多类任务← 正确答案
  • D.必定成功无误

答案:ABC。Reflexion 不更新参数、成本低、可迁移到不同任务。但它不保证成功,收敛依赖评估信号质量和模型能力,D 是常见误解。

Q8. 在迭代尝试中,“收敛”指的是什么?

单选题 · easy

  • A.模型参数不再变化
  • B.达到满意结果停止← 正确答案
  • C.上下文窗口变大
  • D.反思记忆写入完成

答案:B。收敛指循环达到停止条件——要么评估通过,要么跑到最大轮数。Reflexion 不训练参数,所以 A 不对;C 和 D 与收敛概念无关。

Q9. Reflexion 中的“语言反馈”指的是什么?

单选题 · mid

  • A.数值型损失得分
  • B.文本批评与建议← 正确答案
  • C.图像类型的反馈
  • D.音频类型的反馈

答案:B。Reflexion 的特点是用文字而非数值作为强化信号,比如“盐放多了,下次少放半勺”。这正是它与传统强化学习的核心区别。

Q10. 使用 Reflexion 时,以下哪些任务更适合采用反思循环?

多选题 · extreme

  • A.代码修复类问题← 正确答案
  • B.数学推理类问题← 正确答案
  • C.单轮简单问答
  • D.决策规划类任务← 正确答案

答案:ABD。代码修复、数学推理、决策规划都有明确的评估信号且允许重试,适合反思迭代。单轮简单问答没有“再来一次”的场景,用 Reflexion 反而增加无效开销。