00 · 起点

Reflexion:把失败翻译成语言,写进记忆

一个 LLM agent 做错了一次,怎么在不改动任何权重的前提下,第二次做得更好?Reflexion(Shinn et al., 2023)给出的答案是:让模型把这次失败用自然语言总结成一条教训,存进记忆,下一次把这条教训读进上下文。这篇 hands-on 教程从机制讲到能跑通的代码,再到何时不该用它。

·适合谁

这篇教程面向已经摸过 LLM agent、想把"自我反思 / 自我纠错"这件事彻底搞清楚的工程师。读者最好满足:

  • 已理解 ReAct(交错 reason + act + observe)、CoT 和基本的 agent loop——这些是 Reflexion 的地基,不会再从头讲;
  • 能读写 Python,用过至少一个 LLM API(OpenAI / Anthropic 等任意一个即可);
  • 想要的不是"会调一个库的函数",而是理解循环里每个组件为什么存在、reward 信号到底从哪来。

如果 ReAct 和 CoT 对你还陌生,先看兄弟教程 agent-reasoning-patterns 把推理模式补齐,再回到这里。

·不适合谁

  • 完全没接触过 LLM agent 的人:这里假设 agent loop、prompt、tool call 都是已知概念,缺这块会读得吃力——先补 agent 基础。
  • 只想要纯理论 RL 推导的人:Reflexion 借用了"reinforcement"这个词,但本教程讲的是工程机制与可运行代码,不做 policy gradient 的数学推导。想要 RL 形式化证明的,这里不是合适的入口。

·读完之后你能做到什么

读完你能说清:Reflexion 的"学习"不在权重里、而在上下文里——并能判断一个任务到底配不配用它(有没有可靠的 Evaluator、初始正确率是不是够低)。具体地,你将能够:

  • 拆解 Reflexion 的三个组件 Actor / Evaluator / Self-Reflection,说出每个的输入输出,以及它们如何接成一个跨 trial 的循环;
  • 解释为什么自然语言反思能替代梯度更新——标量 reward 做不了 credit assignment,而语言能定位"哪一步错了、该改成什么";
  • 跑通一个纯标准库、无需 API key 的最小 Reflexion 循环(用脚本化 mock 模拟 Actor 从 buggy 到 fixed 的演化),并把每行映射回概念;
  • 判定一个任务是否适合 Reflexion:检查它有没有可靠的验证信号、初始正确率是否落在受益区间、是否需要大量探索;
  • 辨析 Reflexion 与 Self-Refine、ReAct、Tree of Thoughts、RLHF 的分界轴,在选型时讲清"为什么没选别的"。

·一句话本质

本教程要钉进你脑子里的那一句

  • Reflexion 不更新权重——它让一个 LLM 把"失败"这个标量信号翻译成"哪一步错了、下次该怎么改"的自然语言教训,写进记忆;下次尝试把这段教训读进上下文。所以"学习"发生在 context window 里,policy 就是记忆里那段文本,而不是模型参数。
  • 推论一 · 语言反思 ≠ 重试:把上次轨迹原样塞回去(blind retry)反而更差;起作用的是"反思"这一步做的 credit assignment。论文消融显示,加反思比只给历史轨迹再 +8% 绝对值;盲目 refinement 的 52% 还低于不 refine 的 60%。
  • 推论二 · 没有可靠的验证信号就会退化:缺少能判对错的 Evaluator(测试 / 环境 reward / oracle),Reflexion 会失效甚至比不反思更差——它的全部杠杆都压在那个 Evaluator 上。

·现状速览(截至 2026-06)

Frontier · 2026-06

核心的 verbal-RL 机制自 2023 年论文以来稳定、未被推翻。真正在变的是两件事:

(1) 框架层 API 大改。 LangGraph 1.0(2025-10)把反思能力收进了通用的 create_agent,独立的 langgraph-reflection 包已于 2026-04 归档为只读。AutoGen、LlamaIndex 也都把这个循环实现成了通用"reflection"设计模式——值得注意的是,它们都不再引用 Reflexion 这个名字,idea 被吸收,品牌没留下。

(2) 前沿从"prompt 式反思"转向"把反思能力训进权重"。 SCoRe(DeepMind,2024-09)用多轮 RL 在自生成数据上训练,得到真正的内在自我纠错(MATH +15.6%)。关于"o1 / R1 这类推理模型是否取代外部反思循环"的争论,2025–2026 的共识是互补而非替代——外部反思循环存在 3–7 轮的能力天花板(CMU,2026-02)。早期那种"让模型没有外部验证、自己 review 自己"的做法已被证伪(Huang et al., ICLR 2024),不要学。

流畅感警告

这个主题最大的陷阱不是难,而是看起来太顺。"反思一下再重试"听上去理所当然,于是很容易在没真正理解机制的情况下滑过去。下面三句话,只要在读这篇教程时冒出过任何一句,就是信号——停下,回到对应章节动手验证,别让流畅感骗了你:

  • "我读得很顺"——那就合上教程,试着不看原文复述:reward 是标量,为什么标量做不了 credit assignment,而语言可以?说不清,就是没真懂。
  • "我做题很快"——那道判别题真考的是"这个任务配不配用 Reflexion",不是"Reflexion 是什么"。答快了,检查你有没有真的去验证 Evaluator 是否可靠。
  • "我没卡壳"——没卡壳常常意味着没碰到真正反直觉的点:Actor 不是新模型、episodic memory 不是向量库、blind retry 比反思更糟。这三个里有一个让你意外,才说明读进去了。

·概念地图

先建立一张整体图。Reflexion 的全部活动围绕一个跨 trial 的循环展开,三个组件协作、两层记忆分工,而最外圈那一条虚线——LLM 权重全程冻结——才是理解一切的钥匙。

Reflexion 概念地图:中心辐射式 LLM 权重全程冻结 Reflexion verbal reinforcement Actor CoT / ReAct 策略 trajectory 短期记忆 Evaluator 打分 → reward Self-Reflection 失败 → 语言教训 episodic memory 长期记忆 · Ω 窗口 reads produces scores reward appends reflects
图 0-1Reflexion 的中心辐射结构:Actor 读记忆并产出 trajectory,Evaluator 打分给出 reward,Self-Reflection 把失败转成语言教训追加进 episodic memory,下一轮再被 Actor 读回。注意:整张图的外圈是一条虚线——权重从不改变。学习发生在记忆里那几行文本里,不在权重里。

·学习路径建议

这篇教程是六章 hands-on,全读一遍当然最扎实。但不同目的有不同的最短路径:

只想搞懂机制

目标是"在会上能把 Reflexion 讲清楚、能判断别人的方案对不对"。路线:01 概念(建立词汇与三组件循环)→ 02 原理(吃透为什么语言能替代权重、credit assignment、反思 ≠ 重试)→ 06 自测 验收。03 的代码可以略读,但 02 的 #why-language 和 #ablation 两节必须停下来想透。

要动手实现 → 直奔 03

目标是"今天就跑通一个反思循环、明天接到自己的项目里"。路线:先扫一遍 01 概念 对齐术语 → 重点做 03 实操(完整 worked example,纯标准库、无需 API key,直接 python3 reflexion.py 跑通)→ 做 #partial 的两个留白(memory 怎么注入、reflection prompt 怎么写)→ 上 05 综合 把循环扩成带早停护栏的真实形态。

做选型辨析 → 02 + 05

目标是"在 Reflexion / Self-Refine / ReAct / RLHF 之间替团队拍板"。路线:直接看 02 原理的备选方案对比表(讲清每条分界轴、为什么没选别的)→ 做 05 综合的判别决策点(在具体场景里走一遍决策树)。04 陷阱 的"何时不要用 Reflexion"是选型的反面清单,一并看。

·目录

  • 01 概念——Reflexion 的词汇表:verbal reinforcement、Actor、trajectory(短期记忆)、Evaluator、Self-Reflection、episodic memory(长期记忆),用一个"写函数失败 → 反思 → 重试"的场景在每个概念上落锚。
  • 02 原理——从"会用"到"理解":为什么语言能替代权重更新、credit assignment 怎么发生、reward 分任务从哪来、反思如何拼进下一轮上下文,以及与 ReAct / CoT / Self-Refine / ToT / CRITIC / RLHF 的分界。
  • 03 实操——环境准备 → 可直接运行的最小 Reflexion 循环(逐行映射回概念)→ 两个关键留白 → 开放练习。纯标准库,mock 跑通逻辑,换真实 API 即可上生产。
  • 04 陷阱——五个以上失败模式:Evaluator 依赖(没 oracle 就崩)、反思幻觉(correct→incorrect 翻转)、memory 膨胀、成本 ≈ self-consistency、收敛天花板、任务不匹配。每个都给症状 / 根因 / 修复。
  • 05 综合——一个真实场景(给代码助手加 CI 反馈下的反思循环),三个以上判别决策点,在 03 骨架上扩展 + 验收 checklist + 参考实现。
  • 06 自测——三层梯度题库:概念层、原理层、应用判别层。答案集中在文末,先自己答完再对。

·学完之后

把这篇吃透后,自然的下一步是把 Reflexion 放回更大的 agent 图景里:

  • Reflexion 内部的 Actor 长什么样:Actor 的内核就是 ReAct / CoT。想把那一层也讲透,看 agent-reasoning-patterns——理解了 ReAct 的单轨迹推理,才更能体会 Reflexion 是在它外面套了一层跨 trial 的学习。
  • 反思在"agent 自我改进"谱系里的位置:Reflexion 只是 agent 规划与自我改进的一种。agent-planning 的搜索与反思章把它和其它规划/反思策略放在一起对比。
  • 把反思能力训进权重:顺着 frontier 的第二条线,去读 SCoRe 这类用 RL 做内在自我纠错的工作——它正面回应了"prompt 式反思的天花板"。
  • 长期记忆的工程化:论文把"反思存进向量库 / SQL"列为 future work;当 episodic memory 从滑动窗口长成持久检索系统,就接上了 agent memory 与 RAG 的话题。

参考资料