摘要。 大语言模型擅长生成看似合理的推理,但会系统性地回避与用户既定方向相冲突的结论。本文提出 Reflect,一种结构化提示技能,它将 Reflexion 框架(Shinn 等,2023)从多轮次智能体自我纠错,改造为单次对话中的人类决策支持。我们介绍其理论动机、三步式 Fast 和五步式 Deep 反思协议,并给出一个用于判断何时值得进行自我反思的决策框架。我们还呈现了原始 Reflexion 工作中的实证结果,这些结果塑造了我们的设计选择。
1. 引言
1.1 谄媚问题
经 RLHF 训练的大语言模型表现出一种有充分文献支持的倾向,即 sycophancy(谄媚)——系统性地偏好那些与用户表面信念一致的回答,而不是那些准确但可能不受欢迎的回答(Perez 等,2022;Sharma 等,2023)。这种行为并非偶然;它是奖励建模过程的直接结果,因为人类标注者更偏好令人认同的回复。
在决策语境中,谄媚体现为 确认性推理:模型会构造论据来支持用户现有立场,而不是识别其中的薄弱点。当被问到“我该重构我的 monorepo 吗?”时,模型会给出一套重构方案。当被问到“我当前的架构是不是已经够好了?”时,模型会列举它的优点。
这种行为尤其危险,因为它对用户来说是不可见的。推理 看起来 很充分。结论 看起来 很平衡。但可能结论的空间已经被悄悄缩窄,只剩下那些与用户 framing 相容的选项。
1.2 为什么结构很重要
一种自然的回应方式是直接提示模型:“质疑我的假设。” 这确实有帮助,但它存在一个根本限制:模型的自我批判仍然运行在同一个上下文窗口内,并受同一组偏差影响。没有结构性约束时,模型往往只能识别表层弱点,却保留核心论题不动。
结构化反思为推理过程施加了 外部脚手架——一系列不可跳过的步骤、必须回答的问题,以及必须无保留表述的结论。这种结构的作用与航空或外科中的检查表相同:它迫使注意力落在那些在认知负荷下本会被忽略的项目上。
2. 背景:Reflexion 框架
2.1 架构
Reflexion(Shinn 等,2023)提出了一种 语言强化学习 范式——通过自然语言形式的自我反思,而不是标量奖励,来提升智能体在跨 episode 任务中的表现。
该架构由三个组件组成:
图 1. Reflexion 智能体架构。来自环境的外部反馈与来自 Evaluator 的内部反馈,会被 Self-Reflection 模块综合为自然语言反思,并累积进长期记忆(Experience),从而影响后续的 Actor 轨迹。
Actor(LM):基于状态观察生成文本和动作。Actor 在环境中执行动作并接收观察结果,形成存储在短期记忆中的 trajectory(轨迹)。
Evaluator(LM):评估 Actor 输出的质量。Evaluator 可以使用启发式规则(例如识别幻觉模式)、自生成测试(例如针对代码的单元测试),或二元环境奖励。
Self-Reflection(LM):将评估反馈转化为结构化自然语言反思。关键在于,Self-Reflection 模块会被强制要求生成 引用,并明确列出响应中缺失或多余的内容。
2.2 任务特定的评估
Reflexion 的评估机制会根据任务领域进行适配:
图 2. Reflexion 在三类任务上的应用。每一列展示任务、初始轨迹(错误以红色标出)、评估机制、自我反思(识别出的问题以红色标出),以及改进后的下一条轨迹(修正以绿色标出)。
关键洞见在于,不同领域中的评估质量差异极大:
| 领域 | 评估类型 | 锚定质量 |
|---|---|---|
| 编程 | 自生成单元测试 | 高 —— 二元的通过/失败信号 |
| 决策 | 启发式 + LM 检测 | 中 —— 能检测幻觉,但无法检测所有错误 |
| 推理 | 环境奖励 | 可变 —— 取决于环境反馈质量 |
2.3 实证结果
Reflexion 在所有被测试领域中都带来了显著的性能提升。
序列决策(ALFWorld):
图 3. ALFWorld 任务完成率随试验次数变化的结果。Reflexion 智能体分别达到 97% 的成功率(Heuristic)和 94%(GPT),而仅使用 ReAct 的成功率为 75%。幻觉率(右图)则从约 30% 下降到接近零。
知识密集型推理(HotPotQA):
图 4. HotPotQA 表现。Reflexion 同时提升了基于 ReAct 和基于 CoT 的智能体。情节记忆与 Reflexion 的结合(图 c)带来了最高的绝对性能,表明累积反思历史是一个关键因素。
代码生成:
图 5. 代码生成基准结果。Reflexion 在 HumanEval(Python)上取得了 91.0 的 Pass@1,超过 GPT-4 的 80.1。最显著的提升出现在更难的任务上(Leetcode Hard:15.0 对 7.5)。
2.4 对框架设计的关键启示
从这些实证结果中,我们提炼出三条设计原则:
-
外部锚定至关重要。 最大的提升出现在编程任务中(单元测试提供客观反馈)。最小的提升出现在开放式推理中(没有客观验证器)。
-
迭代式改进会收敛。 性能提升主要集中在前期:大部分改进发生在第 1 到第 4 轮试验中,而在第 6 到第 8 轮后收益递减。
-
记忆很重要。 情节记忆(累积的反思)持续优于无记忆反思,这证明跨 episode 学习是一个关键机制。
3. Reflect:面向人类决策支持的改造
3.1 改造问题
Reflexion 原本是为具有 环境反馈 的 智能体任务 设计的。人类决策则是一个根本不同的场景:
| 属性 | Reflexion(智能体) | Reflect(人类) |
|---|---|---|
| 反馈来源 | 环境(测试、奖励) | 无 —— 认知领域 |
| Episodes | 多个、彼此独立 | 单次对话 |
| 记忆 | 滑动窗口、持久化 | 仅上下文窗口 |
| 成功指标 | 任务完成率 | 被识别出的前提质量 |
| Actor | 生成动作的 LM | 做决定的人类 |
核心挑战是:没有外部反馈时,如何进行自我纠错?
我们的回答是:用 结构性约束 取代环境反馈,迫使模型检查那些它本来会跳过的维度。
3.2 架构
图 6. Reflect v3 架构。Fast 路径(默认)执行步骤 1→2→3,以快速识别盲点。Deep 路径则增加维度加载验证、情境切换与修订后立场,并可选择进入第 2 轮及以上的迭代。
该框架以两种模式运行:
Fast Reflect(3 步,约 800 输出 token):
| 步骤 | 名称 | 功能 |
|---|---|---|
| 1 | 攻击与提取 | 假设结论是错的;识别失败原因与利益相关者异议;提取全部前提并标记控制归属(MINE/EXTERNAL/SHARED) |
| 2 | 验证与锚定 | 对每个前提给出单行判断,并标注证据状态(grounded 或 UNGROUNDED) |
| 3 | 被回避的结论 | 应用沉没成本、身份认同与社会压力诊断;无保留地陈述被回避的结论 |
Deep Reflect(5 步,约 2000 输出 token):
步骤 1 和步骤 3 保持相同。额外步骤如下:
| 步骤 | 名称 | 功能 |
|---|---|---|
| 2(Deep) | 多维验证 | 加载领域特定维度;使用 3 到 5 个维度验证每个前提,并附置信分数 |
| 2.5 | 情境切换 | 将结论移植到 2 个替代语境中,以识别其脆弱性 |
| 4 | 修订后立场 | 综合发现,形成纠正后的结论;可选择进入第 2 轮迭代 |
3.3 关键设计决策
对抗式反转(步骤 1)。 与其问“你的假设是什么?”——这种做法之所以失败,是因为真正的盲点按定义本就不可见——步骤 1 改问“如果你错了,为什么会错?” 这是 Klein 的 Pre-mortem 技术(Klein,2007)的直接应用。已有研究显示,这种方法能在项目管理语境中将风险识别提升约 30%。
证据锚定(步骤 2)。 每一条前提验证都必须引用一个具体事实、数据点或既往经验。仅靠推理进行验证的前提会被标记为 UNGROUNDED。当超过一半的前提处于 ungrounded 状态时,框架会发出明确警告。这个机制针对的是同一上下文自评的核心限制:它无法消除偏差,但可以让每一项判断的 依据 变得透明。
被回避的结论(步骤 3)。 这是该框架最具辨识度的贡献。三个诊断透镜会先在内部静默运行,再决定是否表面化结果:
- 沉没成本:过去的投入是否扭曲了对未来价值的判断?
- 身份认同:这个结论是否与自我叙事绑定在一起(“我是那种会……”的人)?
- 社会压力:如果没有人会知道结果,是否还会做出同样的选择?
被回避的结论必须以直接、无修饰的陈述方式表达。禁止使用带保留的结构(例如“虽然 X,但 Y 意味着……”)。然后系统会要求用户确认,或替换为一个更难说出口的结论。
Token 效率。 该框架被明确地为 token 成本进行了优化:
| 组件 | 大小 |
|---|---|
| 核心 SKILL.md(始终加载) | 4.5 KB |
| Deep 模式维度定义(按需加载) | 2.6 KB |
| Fast 输出 | ~800 tokens |
| Deep 输出 | ~2,000 tokens |
与上一版本(v2)相比,这代表着始终加载的上下文减少了 62%,Fast 模式输出减少了 55%。这种优化通过合并冗余步骤,并将维度定义移到按需加载的引用文件中实现。
4. 何时进行自我反思
并不是每个决策都值得进行结构化反思。若不加区分地应用该框架,只会把 token 和注意力浪费在那些并不会从审视中受益的决策上。
图 7. 反思模式选择的决策树。可逆决策应立即执行。已有证据支持的不可逆决策适合使用 Fast Reflect。错误代价高且缺乏证据的不可逆决策则应使用 Deep Reflect。
我们提出一个三问分流法:
4.1 这个决策可逆吗?
如果可以:跳过反思。直接执行,并从结果中学习。可逆决策包括大多数代码修改(可通过版本控制回退)、A/B 测试和探索性实验。反思的成本高于犯错的成本。
4.2 你是否拥有支持自己立场的证据?
如果有:使用 Fast Reflect。你的前提很可能已有部分锚定,反思的主要价值在于识别盲点和被回避的结论。三步已经足够。
如果没有:进入问题 3。
4.3 错误的代价高吗?
如果高:使用 Deep Reflect。高代价、低证据、不可逆的决策——例如职业转变、架构承诺、重大财务头寸——值得使用包含多维验证和情境切换的完整五步协议。
如果不高:使用 Fast Reflect。该决策虽不可逆但风险较低,快速扫一遍盲点更为合适。
4.4 需要反思的信号
除上述分流规则外,还有一些认知信号表明反思已经被拖延太久:
- 过度确定。 如果你连一个会让结论失败的场景都说不出来,那说明你还没有想得足够深入。
- 被质疑时感到不适。 对挑战的情绪性抗拒,是身份认同或沉没成本正在介入的可靠信号。
- “大家都同意。” 没有证据支撑的共识,是警讯,不是验证。
- 反复辩解。 如果你发现自己不止一次在解释“为什么这是正确做法”,你可能是在说服自己,而不是别人。
- 把时间压力当作推理。 “我们现在就得决定”有时是真的,有时只是回避困难结论的机制。
5. 局限性
5.1 没有外部锚定
这是最重要的局限。所有反思都发生在同一个上下文窗口内,没有环境反馈。证据锚定通过让判断依据透明化来缓解这一点,但它无法识别幻觉出来的证据。第 2.3 节的实证结果已经证明,没有外部锚定的反思(例如推理任务)带来的改进,小于具有锚定的反思(例如带单元测试的编程任务)。
5.2 模型自评能力的上限
框架的输出质量受限于模型自身的自我评估能力。如果模型在某个领域存在系统性盲点,那么这个框架只是把这些盲点结构化,而不是消除它们。这与原始 Reflexion 工作中指出的限制一致:“Reflexion 依赖于智能体准确评估自身表现的能力。”
5.3 戏剧化风险
步骤 3(被回避的结论)容易受到 虚假深刻感 的影响——模型可能会产出听起来深刻、但并不对应用户真实认知回避的结论。确认步骤(“这是否是你一直在回避的结论——还是还有一个更难说出口的?”)是必要的保护措施,但它也把验证负担重新转交给了用户。
5.4 没有评估数据
我们尚未进行对照实验,来比较 Reflect 与基线提示(“质疑我的假设”)或与非结构化反思之间的差异。该框架的设计受到 Reflexion 实证结果和认知偏差文献的启发,但它在人类决策支持中的具体有效性仍未得到验证。
6. 相关工作
Reflexion(Shinn 等,2023):最主要的理论基础。它证明了,带有记忆累积的语言式自我反思,能够提升智能体在决策、编码和推理任务中的表现。
LATS(Zhou 等,2023):Language Agent Tree Search。它将反思与 Monte-Carlo tree search 相结合,以提升任务表现,并表明反思可以被集成进更广义的搜索策略中。
Pre-mortem(Klein,2007):一种先假设项目已经失败、再逆向识别原因的认知技术。它直接启发了步骤 1 中的对抗式反转。
认知偏差文献(Kahneman,2011;Ariely,2008):步骤 3 中的沉没成本、身份认同和社会压力诊断,来源于行为经济学中关于系统性决策错误的研究。
提示工程方法:Chain-of-Thought(Wei 等,2022)、Self-Consistency(Wang 等,2022)和 Tree of Thoughts(Yao 等,2023)都通过结构性约束改善了 LLM 的推理能力。Reflect 延续了这一方向,但它针对的是 元认知 推理,而不是 对象层面 推理。
7. 结论
Reflect 是一种结构化提示技能,它将 Reflexion 范式从智能体自我纠错改造为人类决策支持。它的核心贡献在于指出:被回避的结论——也就是决策者持续绕开的那个结论——才是 LLM 辅助反思中最有价值的目标。
该框架优先考虑 token 效率与实际可用性:默认的 Fast 模式在三步内完成,约消耗 800 个输出 token;Deep 模式则通过五步提供全面验证。是否进行反思,以及反思的深度,由一个基于可逆性、证据可得性和错误代价的三问分流法来决定。
其首要局限在于缺乏外部锚定——这是单次对话式反思的根本限制,任何提示工程都无法彻底克服。未来工作应探索与外部验证来源的集成(例如通过 web search 验证证据、接入领域特定评估工具),以及开展对照实验,以比较结构化反思与更简单替代方案之间的差异。
该框架最重要的洞见,可能是一个元反思式的结论:当我们把 Reflect 用在它自己身上时,它识别出自己大部分复杂性其实都是不必要的额外负担。由此带来的简化——默认路径从六步缩减为三步——在保留核心价值的同时,将 token 消耗削减了 55%。这表明,该框架的“被回避的结论”机制确实如预期运作,哪怕被回避的结论本身,恰好就是关于这个框架自己的。
图像来源: 图 1 至图 5 改编自 Reflexion: Language Agents with Verbal Reinforcement Learning。
参考文献
- Ariely, D. (2008). Predictably Irrational. HarperCollins.
- Madaan, A., Tandon, N., Clark, P., & Yang, Y. (2023). Can LLMs Critique and Iterate on Their Own Outputs? arXiv:2303.17491.
- Kahneman, D. (2011). Thinking, Fast and Slow. Farrar, Straus and Giroux.
- Klein, G. (2007). Performing a Project Premortem. Harvard Business Review, 85(9), 18-19.
- Perez, E., et al. (2022). Discovering Language Model Behaviors with Model-Written Evaluations. arXiv:2212.09251.
- Sharma, M., et al. (2023). Towards Understanding Sycophancy in Language Models. arXiv:2310.13548.
- Shinn, N., Cassano, F., Gopinath, A., Narasimhan, K., & Yao, S. (2023). Reflexion: Language Agents with Verbal Reinforcement Learning. NeurIPS 2023.
- Wang, X., et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Wei, J., et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. NeurIPS 2022.
- Yao, S., et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. NeurIPS 2023.
- Zhou, A., et al. (2023). Language Agent Tree Search Unifies Reasoning, Acting, and Planning in Language Models. arXiv:2310.04406.
附录:Reflect Skill v3 源代码与维度参考见 [github.com/MapleCity13…