"凌晨4点,我把刚写完的代码发给同事 review。他说:'这段逻辑如果用户输入为空怎么办?'我愣了一下——明明是自己写的代码,却像一个陌生人第一次看见它。那一刻我明白:每个人都需要的,是一面镜子。"
什么是 Reflection 模式?
Reflection(反思模式)是一种让 AI Agent 在输出最终结果前,先对自己的产出进行自我批评和审查的设计模式。就像作家写完初稿后会重新审视、编辑会挑剔稿件一样,Reflection 让 AI 成为自己的"第一位读者"。
简单来说:
- 📝 普通 Agent = 想到什么说什么(可能胡说八道)
- 🪞 Reflection Agent = 先说完,再问自己"我说的对吗?"
核心原理:生成-反思-改进循环
┌──────────────────────────────────────────────────┐
│ Reflection 循环架构 │
├──────────────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 生成器 │───▶│ 反思器 │───▶│ 改进器 │ │
│ │(Actor) │ │(Evalu- │ │(Revi- │ │
│ │ │ │ ator) │ │ ser) │ │
│ └────────┘ └────────┘ └────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 初稿回答 批评意见 改进后的回答 │
│ │
│ ◀────────────────────────────────┐ │
│ │ │
│ 满意? ── 否 ──▶ 重复循环 │ │
│ │ │ │
│ 是 │ │
│ ▼ │ │
│ 输出最终结果 │ │
└──────────────────────────────────────────────────┘
三个核心角色
- 生成器(Actor):负责生成初始回答
- 反思器(Evaluator):审查生成的回答,找出问题
- 改进器(Reviser):根据反思意见改进输出
在实际实现中,这三个角色可以用同一个 LLM 扮演,只需通过不同的 prompt 来切换视角。
为什么需要 Reflection?
问题1:幻觉(Hallucination)
AI 经常一本正经地胡说八道。Reflection 通过让 AI 审查自己的输出,能显著减少这类问题。
比如,AI 说"OpenClaw 支持 500 种插件",反思后会意识到:"等等,我说了500种吗?让我确认一下..."
问题2:质量不稳定
同一个问题,AI 有时回答很好,有时很糟糕。Reflection 相当于给了 AI 一次"二次机会"。
问题3:格式不合规
要求输出 JSON,AI 偏偏给你一段散文。反思可以纠正格式问题。
OpenClaw 实战应用
场景1:高质量内容生成
# OpenClaw Reflection 模式 - 内容生成示例
# 通过 sessions_spawn 实现 Actor-Evaluator-Reviser 模式
# 1. 生成初稿
draft = await sessions_spawn(
task="""
请写一篇关于 RAG 技术的介绍文章。
要求:
- 500字左右
- 面向初级开发者
- 包含至少一个代码示例
""",
runtime="subagent",
mode="run"
)
# 2. 自我反思
critique = await sessions_spawn(
task="""
你是一位资深技术编辑。请审阅以下文章,找出所有问题:
【文章内容】
{draft}
请从以下角度审阅:
1. 事实准确性(有没有说错的?)
2. 代码正确性(代码能运行吗?)
3. 逻辑连贯性(段落之间衔接好吗?)
4. 目标读者适配(初级开发者看得懂吗?)
5. 字数是否达标
输出格式:逐条列出问题,最后给出总体评分(1-10)和是否需要重写的建议。
""",
runtime="subagent",
mode="run"
)
# 3. 根据反思改进
if critique.needs_rewrite:
final = await sessions_spawn(
task="""
请根据编辑的审阅意见修改以下文章:
【原始文章】
{draft}
【审阅意见】
{critique}
请逐条修改,确保所有问题都被解决。
""",
runtime="subagent",
mode="run"
)
else:
final = draft
场景2:代码 Review
# Reflection 模式用于代码审查
# 先让 Agent 写代码
code_result = await sessions_spawn(
task="写一个 Python 函数,实现二分查找",
runtime="acp",
mode="run"
)
# 然后让 Agent 审查自己的代码
review = await sessions_spawn(
task="""
请作为高级工程师审查以下代码:
{code_result}
检查项:
1. 边界条件处理(空列表、单元素、重复元素)
2. 时间复杂度是否为 O(log n)
3. 变量命名是否清晰
4. 是否有 off-by-one 错误
5. 是否需要类型注解
""",
runtime="subagent",
mode="run"
)
场景3:OpenClaw Skill 输出质量保障
在 OpenClaw 的 Skills 系统中,可以给每个 Skill 增加一个 reflection 步骤:
# SKILL.md 中添加 reflection 规则
## Reflection 规则
在提交最终输出前,请执行以下检查:
1. ✅ 回答是否直接响应了用户问题?(没有跑题)
2. ✅ 是否包含了 OpenClaw 相关的实战示例?(不是纯理论)
3. ✅ 代码示例是否语法正确?(可以 mentally execute)
4. ✅ 是否避免了常见的 AI 写作痕迹?
- 没有使用"值得注意的是"
- 没有使用"总之/综上所述"结尾
- 没有三段式排比
5. ✅ 链接是否指向正确的 OpenClaw 教程页面?
如果任何一项不通过,请修正后再输出。
Reflection 的几种变体
| 变体 | 描述 | 适用场景 |
|---|---|---|
| 自我反思 | 同一个 LLM 自己审查自己 | 快速迭代,成本较低 |
| 交叉反思 | 不同模型互相审查(如 GPT 审 Claude) | 需要更客观的评判 |
| 多轮反思 | 反复循环 N 次直到质量达标 | 高质量要求场景 |
| 参照反思 | 对照参考标准(rubric)审查 | 评分/审核类任务 |
| Reflexion | 将反思记忆存入上下文,长期积累 | 长期学习型 Agent |
💡 最佳实践
1. 反思轮数不宜过多:一般 1-2 轮就够,超过 3 轮收益递减且 token 消耗剧增
2. 给出明确的审查标准:模糊的"请检查一下"效果很差,要列出具体检查项
3. 用不同的角色 prompt:生成时用"技术专家",反思时用"挑剔编辑",视角差异越大越好
4. 设定终止条件:防止无限循环,如"连续两次无改进则停止"
1. 反思轮数不宜过多:一般 1-2 轮就够,超过 3 轮收益递减且 token 消耗剧增
2. 给出明确的审查标准:模糊的"请检查一下"效果很差,要列出具体检查项
3. 用不同的角色 prompt:生成时用"技术专家",反思时用"挑剔编辑",视角差异越大越好
4. 设定终止条件:防止无限循环,如"连续两次无改进则停止"
⚠️ 常见踩坑
1. 自我肯定偏差:AI 容易自己夸自己,反思时会说"写得很好,没什么问题"——解决方案:用更严厉的 prompt,如"请扮演一个极其严格的技术审稿人"
2. 越改越差:有时改进后的版本反而不如初稿——解决方案:保留所有版本,最终选最优
3. 反思成本:每次反思都消耗 token,要权衡成本和收益
1. 自我肯定偏差:AI 容易自己夸自己,反思时会说"写得很好,没什么问题"——解决方案:用更严厉的 prompt,如"请扮演一个极其严格的技术审稿人"
2. 越改越差:有时改进后的版本反而不如初稿——解决方案:保留所有版本,最终选最优
3. 反思成本:每次反思都消耗 token,要权衡成本和收益
Reflection vs 其他模式
| 对比维度 | Reflection | ReAct | Plan-and-Execute |
|---|---|---|---|
| 核心目标 | 提升输出质量 | 动态决策 | 任务分解 |
| 触发时机 | 输出之后 | 每步之中 | 执行之前 |
| Token 消耗 | 额外 50-100% | 累积较多 | 规划阶段 |
| 延迟增加 | 中等 | 高(逐步执行) | 低(可并行) |
| 可组合性 | ✅ 与任何模式组合 | 独立 | 独立 |
💡 Reflection 的最大优势是它可以叠加在任何其他模式上。ReAct 的每步之后可以加 reflection,Plan-and-Execute 的最终输出可以加 reflection。
学术背景
Reflection 模式在学术中有多个代表工作:
- Reflexion (2023):Shinn et al. 提出将语言Agent的轨迹和反思存入记忆,在后续试验中重用
- Self-Refine (2023):Madaan et al. 提出生成→反馈→改进的迭代框架
- CRITIC (2023):Gou et al. 引入外部工具验证来增强自我纠正
- RRR (2024):从模型内部表示中发现和修复推理错误
总结
Reflection 模式教会了 AI 一个重要道理:写完不等于写好。就像你写完一封重要邮件会重新读一遍、改两遍一样,AI 也需要这种"二愣子"精神——先干再说,说完了再想想对不对。
"凌晨4点的那个 review 后来救了我一次线上事故。从那以后,每次写完代码我都会停30秒,假装自己是一个第一次看这段代码的人。有时候,最需要一面镜子的不是 AI,而是我们自己。"