Reflection 和 Reflexion 有什么区别?
简化版
两者都是「做完一版 → 得到反馈 → 带着反馈再做一版」,区别在反馈存不存、跨不跨尝试。Reflection(常见的实现叫 Self-Refine)是在一次任务里迭代打磨同一份产出:生成一版,让模型对这一版提出批评,再按批评改一版,反馈只作用于当前这份稿子,改完就结束了。Reflexion 是在多次尝试之间学习:一次尝试结束后,根据评估信号(测试结果、规则校验、环境反馈)把「哪里失败了、下次该怎么做」写成一段文字,存进情景记忆,下一次尝试把这段记忆带进提示词再从头做。简单说,Reflection 改稿子,Reflexion 记教训。工程上 Reflexion 的关键是反馈要具体到能照着改,并且要求没被点名的部分保持不变,否则每次尝试都会推翻重来。
详细版
| 维度 | Reflection(Self-Refine) | Reflexion |
|---|---|---|
| 迭代对象 | 同一份产出,逐版修改 | 多次完整尝试,每次重新执行任务 |
| 反馈来源 | 通常是模型对自己产出的批评 | 评估信号(测试、规则、环境反馈),再转写成文字 |
| 反馈形态 | 针对当前稿子的批评意见 | 「失败原因 + 下次怎么做」的反思文字 |
| 记忆 | 不单独存,批评用完即弃 | 反思文字存入情景记忆,带进下一次尝试 |
| 典型场景 | 写作、纪要、代码的逐段打磨 | 需要多次执行才能成功的任务:编程、决策、规划 |
Reflection: 生成 v1 → 批评 v1 → 按批评改成 v2 → 批评 v2 → …… → 满意或到上限
Reflexion: 尝试 1 → 评估 → 写反思 → 存入记忆
尝试 2(提示词带上反思)→ 评估 → 写反思 → 存入记忆
…… → 成功或到上限
完整版教学
一、两个名字从哪来
这两个词经常被混用,先把来源说清。Self-Refine 这一类方法描述的是:同一个模型先生成,再对自己的输出给出反馈,再根据反馈改写,循环几轮,不需要额外训练。业内常把这种「自己批评、自己修改」的模式统称为 Reflection。
Reflexion 出自一篇 2023 年的论文,它把「反思」用在 Agent 的多次尝试之间:Agent 完成一次尝试后,由评估器给出成败信号,再把这个信号转写成一段语言形式的反思,存进情景记忆;下一次尝试时,把记忆里的反思放进上下文,指导这一次怎么做。论文把这种做法称为「语言形式的强化」:不更新模型参数,靠文字经验改进后续行为。
记忆钩子:Reflection 改稿子,Reflexion 记教训。
二、Reflection:在一份产出上反复打磨
Reflection 的结构很简单,两个角色、一个循环:
产出 ← 生成
↓
批评:这一版哪里不好(最好结构化:位置、问题类型、修改建议)
↓
改写:按批评改出新的一版
↓
复审:没到上限就回到批评
它的特点是反馈和产出绑在一起:批评针对的就是当前这一版,改完之后这些批评就没用了,不需要存下来。适合产出本身可以局部修改的任务,比如一份纪要漏了负责人,补上负责人就行,不用整份重写。
三、Reflexion:在多次尝试之间积累经验
Reflexion 面对的任务往往不能「局部改一下」,而是要重新执行一遍:代码要重新写、行程要重新排、决策要重新做。它多了两样东西:
评估器:给出这次尝试的成败信号
可以是单元测试、规则校验、环境返回的奖励,不一定是模型
反思记忆:把「失败在哪、下次怎么做」写成文字存下来
下一次尝试时放进提示词
关键在于经验被显式保存并带入下一次。第一次尝试超了预算,反思写下「总花费超出 822 元,把花费最高的两项降档」,第二次尝试从头规划时就会带着这条经验。
四、反思文字怎么写才有用
无论哪种模式,反馈写得好不好直接决定下一版能不能改好:
| 反馈写法 | 下一版的表现 |
|---|---|
| 「请优化一下行程」 | 模型拿不到具体动作,只会整体重排,问题照旧 |
| 「第 2 天游玩 660 分钟,超出上限 540 分钟」 | 知道哪里错、错多少,但不知道怎么改 |
| 「第 2 天游玩 660 分钟超出上限 540 分钟:去掉 1 到 2 个可去可不去的点位,或挪到游玩时长较短的那一天,必玩点位优先保留」 | 知道哪里错、错多少、怎么改 |
另一个要点是限定改动范围。反思文字末尾要明确要求「没有被点名的部分尽量保持不变」。缺了这一句,模型每次尝试都可能给出一份面目全非的新结果,前一版已经做对的部分被推翻,多版之间也没法对比「改了什么」。
五、记忆带多少:只带上一次,还是全部累积
Reflexion 的记忆有两种带法:
| 带法 | 做法 | 优缺点 |
|---|---|---|
| 只带上一次 | 下一次尝试只带上一次的反思 | 提示词不会越来越长;已改好的问题自然消失,没改好的会被重新评估出来 |
| 累积全部 | 把历次反思都带上 | 信息更全,但提示词膨胀,旧的、已解决的问题可能误导模型 |
如果每次尝试结束都会重新做完整评估,「只带上一次」往往就够了:上一次还存在的问题一定会被重新判出来,已经解决的问题不会再出现。累积带法要控制条数,比如只保留最近几次、或按问题类型去重。
六、成本与上限
两种模式都会成倍增加调用:
Reflection,上限 3 轮:最多 1 次生成 + 3 次批评 + 3 次改写 = 7 次调用(每轮都改的情况)
Reflexion,上限 3 次尝试:每次尝试本身若要 30 次工具往返,最坏 3 × 30 = 90 次调用,再加每次的评估
所以都必须有上限,并且规定到上限仍不合格时怎么收尾:交付最后一版、交付问题最少的一版,或者交给人工确认。评估器能用代码就用代码,判定可复现、不花调用费用,也能统计「哪类问题最常出现」。评估器用模型还是用代码,见「反思环怎么判定「够好了」:模型自评还是代码硬校验?」;循环本身的上限和交付规则,见「评估—优化循环怎么设计?为什么必须有轮数上限,用完了交付哪一版?」。
七、常见误区与追问
- 误区:Reflection 和 Reflexion 是一回事。 前者在一份产出上迭代改写,后者在多次尝试之间用反思记忆积累经验。
- 误区:Reflexion 必须由模型自己评估。 评估信号可以来自测试、规则校验或环境反馈,模型只负责(或者不负责)把信号转写成反思。
- 误区:反思越多越好,全部带进下一次。 累积会让提示词膨胀、旧问题误导模型,每次重新评估时只带上一次通常就够。
- 误区:反馈写「请改进」就行。 反馈要点名位置、给出数字和可执行的动作,否则下一版只会整体重来。
- 误区:反思能让模型永久学会。 反思是存在外部的文字,不改变模型参数,只在被放进上下文时生效。
- 追问:什么任务更适合 Reflexion? 产出不能局部修改、需要重新完整执行的任务,比如重新规划、重新写代码。
- 追问:怎样避免每一版都推翻重来? 反馈只点名需要改的地方,并在提示词里要求没被点名的部分保持不变。
八、加强记忆
Reflection 和 Reflexion 记「改稿子 vs 记教训」:Reflection(Self-Refine)在同一份产出上生成、批评、改写、复审,批评针对当前稿子、用完即弃,适合能局部修改的产出。Reflexion 在多次完整尝试之间学习,评估信号可以来自测试或规则,转写成「失败在哪、下次怎么做」的反思文字存入情景记忆,下一次尝试带进提示词,适合要重新执行的任务。反馈都要点名位置、给出数字和动作,并要求没被点名的部分保持不变;记忆可以只带上一次(每次都重新评估时足够)或累积但控制条数。两者都要设上限、规定到上限怎么交付,评估尽量用代码。
项目实战落地
项目里怎么做的
《AI Agent旅游行程智能规划平台》的行程编排是 Reflexion 的结构:每一版都是一次完整的编排(模型通过工具重新排一整份行程),排完由代码跑 14 条硬校验当评估器,没过就把问题转成教训,带进下一版:
- 教训怎么写:每条问题写一行
agent_reflection,问题描述由校验器写成「第几天(日期 星期)、哪一项、超了多少」的格式,改进要求fix_instruction由代码按规则编码生成,落到「挪到哪一天」「压到多少分钟以内」「补哪一类明细」这类可执行的动作上; - 怎么带进下一版:反思模板
TRIP_REFLECT_ROUND有{roundNo}和{lessons}两个占位符,每条教训拼成「序号. [问题类型] 问题描述」加一行「改进要求」,整段追加在编排主 Prompt 末尾;模板最后一句是「没有被点名的部分尽量保持不变,不要推翻整个行程重排——用户已经看过上一版」; - 只带上一版:第 3 版的 Prompt 里只有第 2 版的问题;第 2 版已经改掉的问题不会再出现,没改掉的会在第 2 版被重新判出来,照样带过去;
- 一次执行之内:教训只在这一次执行的各版之间传递,下一次重新规划时连同上一次的明细和校验一起清掉。
和经典 Reflexion 不同的一点是,这里的反思文字不是模型写的,而是代码按校验结果生成的。
《AI Agent智能会议纪要辅助系统》的纪要自检是 Reflection 的结构:审查模型对当前这一版纪要给出结构化问题清单,重写模型按清单改出新的一版,下一轮复审改过的这一版;问题清单只作用于当前稿子,没有跨轮次积累的教训。
为什么这样取舍
- 行程用 Reflexion:行程排出来的问题(超预算、闭馆日、时间重叠)要到整版写完才能判断,改的方式是带着问题重新排一版,每一版都是一份独立完整的行程,按轮次号分开存,页面可以并排对比。
- 判据用代码:让模型自己看行程说有没有问题,同一版问两次可能得到不同结论,反思循环就变成了随机扰动;代码判定稳定,还能按规则编码落库和统计。
面试官还会追问
- 必玩清单里标了「必去」的点位没排进去时,改进要求具体怎么写?
- 三版都没通过校验时,这张行程单会被判为规划失败吗?为什么?
- 一版之内的「续排」和反思重排有什么区别?续排会产生教训吗?
学完《AI Agent旅游行程智能规划平台》,上面这些追问你都会迎刃而解。