厨房里,一个从没下过厨的小白对着菜谱发愁。他手忙脚乱地做了第一盘红烧肉,尝了一口——咸得可以齁死人。他没有扔掉锅铲,而是撕下一张便利贴,写上“盐放一半,别手抖!”,贴在灶台上。第二次,他照着便利贴来做,味道好多了,只是糖又少了。他又补了一笔:“糖要一勺半。”第三次、第四次……灶台上的便利贴越贴越多,他的红烧肉也越来越香。这就是 Reflexion 反思机制最朴素的直觉——让 AI 也像这位新手厨师一样,尝一口,记一笔,再做一次,越做越好。Reflexion 由三个角色构成:负责“做菜”的 Actor、负责“尝菜”的评估器、负责“写反思”的自我反思模块。它不需要重新训练模型,只需要在推理时加入“反思 + 记忆 + 重试”的循环。
学习 Reflexion,你将掌握一种不更新模型参数、仅靠自我批评与短期记忆就能显著提升 AI 推理能力的低成本方案,这是构建强健 AI Agent 的核心技能。
目录
可视化演示
动态演示Reflexion反思机制让的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Reflexion反思机制让:Refl Reflexion反思机制的设 Actor-Critic-Re 核心机制可视化 Reflexion反思机制让整体架构与关键组件
一、机制概述:做菜、尝味、写纸条的分工
想象一下,厨房里的小白第一次做红烧肉,手忙脚乱地把菜谱上“适量盐”理解成三大勺,结果整锅菜咸到发苦。他没有沮丧,而是冷静地写下一张便利贴——“盐只放半勺”——贴在灶台边。第二次做菜时,他记住了纸条上的提醒,又发现糖放少了,于是再补一张纸条。这个“做菜—尝味—写纸条—再做”的循环,正是 Reflexion 反思机制的核心模样:让 AI 在每一轮尝试后,主动总结失败原因,把它记在短期记忆里,下一轮带着教训重新出发。
Reflexion 框架把角色拆分成三个明确的分工。第一是 Actor,相当于厨师,负责根据当前任务生成答案或行动;第二是评估器,相当于试菜的评委,负责判断结果好不好;第三是自我反思模块,相当于写便利贴的人,负责把失败原因转化成文字教训。三个模块协作完成一次循环,然后在记忆的辅助下开启下一轮。
在整个过程中,模型参数始终不变。Actor 不需要做任何梯度计算或微调,它只是把“问题 + 反思笔记”拼在一起作为输入,然后照常生成文本。真正的“提升”来自输入内容的变化:每一次反思都让模型在下一次生成时了解到自己上次错在哪,从而更有可能避开同样的坑。这就像厨师的技术没变,但灶台上的便利贴让他记得少放盐——信息的改变带来了行为质量的改变。
所以,Reflexion 的第一步不是更换厨师,也不是重新培训他,而是在他的灶台上摆一张会越写越厚的便利贴墙。厨师还是那个厨师,但只要每一次失败都能被记下来、被用上,下一盘菜就永远值得期待。
- 新一轮答案表示第 t+1 轮生成的答案或行动,即厨师端出的最新一盘菜。
- 厨师主角模型 Actor,负责根据当前问题与记忆生成结果。
- 菜单 x用户提出的原始问题,相当于顾客下的单。
- 拼接符把“菜单”和“便利贴”拼成一份完整提示词的操作。
- 便利贴集合前 t 轮积累的反思笔记,相当于灶台上那叠便利贴。
二、自我批评:把失败翻译成文字教训
新手厨师最珍贵的品质,是敢于尝自己做的菜。红烧肉出锅,夹起一块放进嘴里,眉头一皱——咸了。这个“尝”的动作就是自我批评的起点:不回避失败,而是主动去感受失败的具体样子。Reflexion 里的自我批评模块做的正是这件事,它把“这盘菜咸了”这种感受,翻译成模型能理解和复用的文字。
自我批评在论文中被称为 Self-Reflection,它的输入是上一轮的完整轨迹——包括问题、模型生成的答案、评估器的结果,然后输出一段文本反思。这段文本不是简单的“我错了”,而是具体的错误分析和改进方向。就像便利贴上写的不是“做失败了”,而是“盐放多了,下次放半勺”。
为什么非要用文字而不直接用一个分数?因为文字是模型最擅长的表达形式。一个“40 分”无法告诉模型错在哪里,而一句“你在计算到第二步时进位错了”则能精确地引导下一次生成。这也是 Reflexion 区别于传统强化学习的核心:它用语言作为强化信号,而不是数值奖励。
所以自我批评不是让 AI 自责,而是让 AI 当自己的美食评论家。它把模糊的失败变成一句句具体、可执行的整改意见,为下一次开火做饭备好说明书。
- 反思文本第 t 轮产生的文字教训,相当于一条新写的便利贴。
- 批评模块自我反思模块,通常就是大模型本身,负责阅读结果后写批评。
- 候选结果第 t 轮 Actor 生成的答案或动作,即刚出锅的那盘菜。
- 评估信号评估器给出的反馈信息,相当于“太咸”这个味觉信号。
三、短期记忆:灶台上的便利贴墙
便利贴如果不贴起来,转头就忘;贴在哪里、怎么用,同样有讲究。Reflexion 的短期记忆模块就是那面灶台墙——它专门负责保存每一轮产生的反思文本,并在下一轮尝试时,把关键的几张纸条重新递到模型眼前。
这个短期记忆在实现上通常就是一个缓存列表,存的是字符串形式的反思笔记。与模型的上下文窗口不同,它不是把所有历史对话都塞回去,而是有选择地注入反思内容。这就像厨师不会把整个厨房的杂物都摊在灶台上,只挑跟自己这道菜最相关的几张纸条。
当 Actor 开始新一轮尝试时,系统会把原始问题与所有反思笔记拼接起来,构造成新的提示词。这样,模型每次生成时都“看得见”自己过去踩过的坑。随着迭代进行,记忆越来越厚,模型的行为也越来越稳健。论文中把这种机制类比为语言强化学习——把“语言奖励”存储在外部记忆里,供未来的策略参考。
记忆是迭代的土壤。要是每轮尝试都从零开始,模型永远像第一天学做菜的新手;而有了会累积的便利贴墙,每一次失败都变成了通往成功的台阶。
- 旧记忆集合当前积累的反思笔记,相当于灶台上已有的便利贴。
- 新反思纸条刚产生的反思文本,即写完准备贴上去的新纸条。
- 并集运算把新纸条加入旧纸条堆,已有的经验全部保留。
- 更新后记忆下一轮尝试时会被注入输入的新记忆集合。
四、迭代尝试:一轮更比一轮好吃
一道菜要做到让全家满意,很少一蹴而就。第一轮咸,第二轮淡,第三轮终于恰到好处。这个过程听起来平凡,却是 Reflexion 最强大的地方——它把“失败—反思—再试”的循环制度化,让模型有边界地、持续地向正确答案逼近。
每一轮完整循环包括:Actor 根据当前记忆生成候选答案,评估器判断答案是否正确,反思模块在失败时写下教训,然后带着更新后的记忆进入下一轮。这个循环会一直持续到评估器给出通过信号,或达到预设的最大轮数。
收敛条件是循环设计的关键。Reflexion 一般设置一个最大尝试次数,避免无限重试浪费算力。同时,由于反思笔记是文本,模型在下一轮不一定采纳建议,因此论文还引入了“重复尝试的多样性”技巧——如温度采样或多次独立生成——确保模型不是简单复制之前的错误答案。
Reflexion 的迭代不是漫无目的地瞎试,而是像一位有记性的厨师,每翻一次锅都离色香味俱全更近一步。停止条件一到,他就能自信地端出那盘合格的菜。
- 首次成功轮数循环可以停止的时刻,即第一次做出满意成品的轮次。
- 取最小值找到“最早的那一次通过”,不等到最后一轮。
- 通过条件第 t 轮的结果通过了评估器,等同于评委点头说“行”。
五、评估信号:凭什么说这盘菜合格了
菜好不好吃,不能光靠厨师自己说。评分标准可以来自家人的表情、美食评委的打分,甚至是一台测咸度的仪器。在 Reflexion 里,评估信号就是这样的外部裁判,它负责告诉系统:这一轮到底成了没有。
评估信号因任务而异。在代码生成任务中,最常用的是单元测试——把生成的代码跑一遍,全部用例通过才算成功;在数学推理任务中,可以比对最终答案与标准答案是否一致;在决策规划任务里,则看环境是否返回了成功的奖励信号。
高质量评估信号是 Reflexion 有效的前提。如果信号本身不准确,反思就会建立在错误的前提上。论文还探索了训练一个专门的评分模型来对结果打分,让 Reflexion 能扩展到没有现成测试用例的开放任务中。这个评分模型相当于一位更专业的评委,能给出更细腻的反馈。
评估器的存在,让“好吃”不再是一家之言。有了这台靠谱的测咸仪,厨师才知道该往哪个方向调整调料——反思也因此有了坚实的依据。
- 打分函数评估器对候选答案 a 的判定结果,只输出 1 或 0。
- 通过分支当所有单元测试都通过时,信号值为 1。
- 失败分支只要有一个用例没通过,信号值就是 0。
六、应用场景:学会红烧肉,再做满汉全席
当一位厨师通过便利贴和反复试做掌握了红烧肉,他学到的其实不是一道菜,而是一套方法论——尝味、记录、调整、再试。这套方法论放在代码世界、数学世界和决策世界里,同样好使。
在代码生成中,Reflexion 是目前最常用的自我修复框架之一:模型先写一版代码,测试失败后反思原因,再带着反思修第二版,往往几轮内就能通过所有测试。在数学推理中,Reflexion 让模型检查自己解题步骤中的逻辑漏洞,减少低级计算错误。
在更复杂的决策规划任务中,Reflexion 也被用来增强 Agent 的行为策略:Agent 在环境中尝试,失败后生成文本反思,例如“不要走会撞到障碍物的路径”,然后在新一轮行动中避开相同错误。这种不更新权重的“语言强化学习”特别适合大模型时代——因为模型的参数太昂贵,而文字反思几乎零成本。
今天,Reflexion 已在许多 AI Agent 产品中扮演“事后诸葛亮”的角色:让模型在犯错后停下来想一想,把教训写进记忆里,再出发。学做菜的新手最终会成为大厨,而会反思的 AI,也会在一次又一次尝试中走向更强。
- 最终答案精挑细选后端上桌的那道菜,是整个流程的交付成果。
- 取最大值在所有候选里找出得分最高的那一个。
- 候选答案每一轮尝试生成的结果。
- 评估得分每个答案对应的分数,相当于评委给每道菜的评分。
AI 应用场景
智能代码调试助手
阶段:推理增强
解决的问题:传统 debug 工具只能报错,无法给出修改建议;程序员手写用例成本高。AI 用 Reflexion 循环让模型自己写代码、跑测试、记下失败原因、再改一次,把“报错—人工分析—修改”压缩成自动循环,大幅减少人工介入。
具体案例:一个电商后端要写“列表去重返回长度”的函数。Reflexion Agent 第一轮给出 return len(nums) 的错误代码,评估器用单元测试发现失败,反思记录“需要先用 set 去重”,第二轮生成 len(set(nums)),3 轮内完成修复并输出测试报告。
数学解题教练
阶段:推理增强
解决的问题:大模型做数学题经常思路对、计算错,传统提示词技巧只能碰运气。Reflexion 让模型对每一步生成自我检查,并写下“计算时要小心进位”之类的文字提醒,在下一轮逐步校验,显著提升多步推理的准确率。
具体案例:一道多步应用题,模型第一轮在第三行算错结果,反思模块指出“第二步的乘法忘加了进位”,第二轮模型带着这条教训重新求解,并主动写出分步验算,最终输出正确答案。
Python 演示
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)
self.memory = []短期记忆缓存,相当于灶台上的便利贴墙,记录每轮反思文本。self.attempts = 0记录尝试轮数,与控制迭代次数有关。def act(self, task)Actor 模块:根据任务和记忆生成候选答案,首次不读记忆所以出错。for note in self.memory:经验回放:在生成前逐条翻阅反思笔记,把“用 set 去重”的教训应用进代码。def evaluate(self, answer)评估器模块:模拟单元测试,检查答案是否包含set去重逻辑。def reflect(self, task, answer, passed)反思模块:失败时输出改进建议,成功时不写反思。if passed: return True, result, self.attempts收敛判断:评估通过立即停止循环,返回最终代码。agent.run("去除列表重复元素并返回长度")主入口:完整跑一轮 Reflexion 迭代流程。
常见误区
误区我听说“让 AI 学会反思”一定是把反思能力训练进了模型参数里,那肯定要花很多钱做微调,普通人根本用不起。
正解Reflexion 完全不更新模型参数。它只是在推理时增加一个“生成→评估→反思→再生成”的循环,把反思文本存进外部记忆供下一轮参考。成本只是多几次模型调用,相比训练几乎可以忽略。这就好比厨师没有报名培训课,只是在自己灶台上贴便利贴。
为何常见:听到“机制”就联想到训练流程,实际上 Reflexion 属于提示词和推理层面的技巧,与微调是两条完全不同的路线。
误区模型能记住信息不就是靠上下文窗口吗?Reflexion 说的短期记忆,应该就是上下文窗口换个说法。
正解上下文窗口是模型每轮能看到的全部输入文本,内容庞杂且位置有限;Reflexion 的短期记忆是一个独立的显式缓存,只存放反思笔记,由系统在下一轮精心拼接后再注入上下文起点。两者都让模型“看到”历史,但管理方式、内容边界完全不同。
为何常见:日常聊大模型时“记忆”和“上下文”经常混用,容易把内部机制与外部缓存混为一谈。
误区自己批评自己肯定不客观,应该专门训练一个很强的裁判模型来挑毛病,否则反思没效果。
正解论文中的做法灵活多样,既可以用单独的评分模型,也可以让同一个模型扮演 Actor 和自我反思两个角色。关键不是“谁在批评”,而是评估信号是否可靠——测试用例、环境反馈等外部信号才决定批评的方向。
为何常见:人凭直觉认为“旁观者清”,但实验证明同一个模型也能从自己犯的错误中提炼出有效教训。
误区Reflexion 听起来这么强大,那所有难题交给它多试几轮不就都能解出来了吗?
正解Reflexion 提升的是成功概率的上限,但不保证一定成功。如果模型本身的推理能力不足,或评估信号有噪声,反思也可能得出错误结论。它只是给模型一个从错误中学习的机会,而不是万能的“失败保险”。
为何常见:看到论文和案例中一轮比一轮好的曲线,容易把机制神化,忽略了评估质量和模型基础能力的天花板。
面试题
Q1. Reflexion 机制的核心思想是什么?
- A.用更大的模型重新训练
- B.自我批评并短期记忆迭代改进← 正确答案
- C.增加模型的参数量
- D.用强化学习微调模型
答案:B。Reflexion 的核心是自我批评 + 短期记忆回放 + 迭代重试。A 和 C 涉及训练/参数变化,D 是另一种方法。可以用“做菜尝一口并贴便利贴”来记忆——不换厨师,只积累经验。
Q2. 在厨房做菜比喻中,“备忘纸条”对应 Reflexion 的哪个组件?
- A.Actor 生成模块
- B.尝菜评估模块
- C.备忘纸条记忆← 正确答案
- D.奖励函数模块
答案:C。备忘纸条对应短期记忆,负责存反思笔记。Actor 是厨师,评估模块是试菜的评委。模拟题旨在区分 Reflexion 三模块分工。
Q3. Reflexion 中 Actor 模块的主要职责是什么?
- A.生成答案或行动← 正确答案
- B.计算模型梯度
- C.评估结果好坏
- D.存储反思笔记
答案:A。Actor 相当于厨师,负责根据“问题 + 反思记忆”生成答案或行动。评估结果靠评估器、存笔记靠短期记忆,B 属于训练流程,与 Reflexion 无关。
Q4. 以下哪项不是 Reflexion 需要的评估信号来源?
- A.单元测试用例
- B.环境反馈信号
- C.手工反思笔记← 正确答案
- D.启发式规则判断
答案:C。评估信号是判断结果好坏的“裁判”,来自测试用例、环境反馈或规则。手工反思笔记是模型自己生成的输出,不是评估信号的来源,把因果倒置了。
Q5. Reflexion 中短期记忆发挥的作用包括哪些?
- A.存储反思文字笔记← 正确答案
- B.注入上下文供参考← 正确答案
- C.替代模型的参数
- D.避免重复的错误← 正确答案
答案:ABD。短期记忆存反思文本、在下一轮注入上下文、帮助模型避免重复犯错。它不替代模型参数——参数始终固定,记住这一点就不会被“记忆”这个词误导。
Q6. 当任务没有现成测试用例时,Reflexion 还可以怎么做?
- A.直接用随机猜测
- B.用评分模型代评估← 正确答案
- C.放弃迭代循环
- D.增加训练数据量
答案:B。论文提出训练一个专门的评分模型来评估结果质量,让 Reflexion 能处理开放任务。随机猜测和无评估都不是机制的本意,增加训练数据属于另一条路线。
Q7. 与传统微调方法相比,Reflexion 的优势有哪些?
- A.无需更新参数← 正确答案
- B.推理成本更低← 正确答案
- C.迁移多类任务← 正确答案
- D.必定成功无误
答案:ABC。Reflexion 不更新参数、成本低、可迁移到不同任务。但它不保证成功,收敛依赖评估信号质量和模型能力,D 是常见误解。
Q8. 在迭代尝试中,“收敛”指的是什么?
- A.模型参数不再变化
- B.达到满意结果停止← 正确答案
- C.上下文窗口变大
- D.反思记忆写入完成
答案:B。收敛指循环达到停止条件——要么评估通过,要么跑到最大轮数。Reflexion 不训练参数,所以 A 不对;C 和 D 与收敛概念无关。
Q9. Reflexion 中的“语言反馈”指的是什么?
- A.数值型损失得分
- B.文本批评与建议← 正确答案
- C.图像类型的反馈
- D.音频类型的反馈
答案:B。Reflexion 的特点是用文字而非数值作为强化信号,比如“盐放多了,下次少放半勺”。这正是它与传统强化学习的核心区别。
Q10. 使用 Reflexion 时,以下哪些任务更适合采用反思循环?
- A.代码修复类问题← 正确答案
- B.数学推理类问题← 正确答案
- C.单轮简单问答
- D.决策规划类任务← 正确答案
答案:ABD。代码修复、数学推理、决策规划都有明确的评估信号且允许重试,适合反思迭代。单轮简单问答没有“再来一次”的场景,用 Reflexion 反而增加无效开销。