第 3 章 反思闭环:让 Agent 学会检查自己的作业
会检查作业的 Agent,才是好 Agent
上一章我们解决了"Agent 容易跑偏"的问题。这一章解决另一个更普遍的问题:Agent 交卷太快。
模型天生是"一次生成"的:你问它一个问题,它啪地给出一个答案。问题是,很多答案里藏着一眼就能看出的问题——边界情况没考虑、引用的数据是编的、代码有个明显的 bug——但模型自己不回头检查,就这么交卷了。
想想学生时代的学霸和普通学生的区别:学霸会检查作业。写完了,回头逐题验算一遍,发现问题当场改掉。
这一章讲的三个模式,就是让 Agent 学会"检查作业",而且是越来越严格的检查:
- Reflection(反思):生成后,让 Agent 对着标准自我检查一遍,有问题就改。
- Self-Critique(自我批判):更进一步,训练一个专门的"评分 Agent",规模化地给输出打分。
- Output Verification(输出核实):最严格——把输出拆成一句句话,逐句去外部证据里核实。
模式一:反思(Reflection)
问题
单次生成的答案,经常漏掉"审查时一眼就能看出"的问题——约束条件没满足、边界情况没覆盖、质量标准没达到。没有反思机制的话,Agent 会把"第一个看着还行的答案"直接交出去,哪怕再轻量地检查一下,就能拿到更好的答案。
方案
生成草稿之后,显式地加一步自我评估:对着定义好的标准检查,把批评意见喂回去,重新生成。如此循环,直到分数达标或预算用尽。
关键点:要用稳定的评分标准(正确性、完整性、安全性、风格),让循环是在提升客观质量,而不是无意义地"换个说法"。想要更公正的话,可以用另一个模型来批评(双模型架构),代价是多花算力。
for 尝试 in range(最多尝试次数):
草稿 = 生成(提示词)
分数, 批评意见 = 评估(草稿, 标准)
if 分数 >= 门槛:
返回草稿
提示词 = 结合(批评意见, 提示词) # 把批评意见喂回去,再试一次证据
- 这个模式源自 2023 年的经典论文 Self-Refine(Shinn 等人)。
- 后续的 Reflexion(NeurIPS 2023)在反思基础上加了"情景记忆"——把每次尝试的经验记下来,供下一次跨试次使用,形成持续的改进。
- 行业里 OpenAI、Anthropic 的产品都用类似思路。
怎么用
适合质量必须达到明确标准的任务:写作、推理、代码生成。
实用经验:
- 2-3 轮迭代通常就够,超过 3 轮收益递减。别让它无限循环。
- 记录每一轮的分数变化,确认多跑的迭代真的带来了可衡量的提升。
- 评分标准要定义清楚,否则反思会原地打转。
取舍
- 好处:用很少的人工监督,就能显著提升输出质量。
- 代价:多花算力;如果评分标准没定好,可能陷入无意义的循环。
模式二:自我批判(Self-Critique Evaluator Loop)
问题
Reflection 的问题是:让同一个模型"自己出题自己答",标准很难客观。那找人类来标数据行不行?行,但太贵了——人工标注的偏好数据贵、更新慢,模型一变就又过时了。
你需要的是:一个能规模化、能跟上模型进化速度的评分信号。
方案
训练一个"自学成才的评分器"(self-taught evaluator),用合成数据一步步培养:
- 对一条指令,生成多个候选输出。
- 让模型自己判断哪个更好,并解释理由(推理轨迹)。
- 用模型自己的判断轨迹去微调它,让这个"裁判"越来越准。如此迭代。
- 把这个裁判当作主 Agent 的评分模型或质量闸门。
- 定期用新的合成"辩论"刷新它,跟上模型漂移。
有一个变体叫 RLAIF(从 AI 反馈中学习):用一个独立的批评模型去评估生成模型,偏见更小,但成本更高。
要防止评分器"学坏"(evaluator collapse),有几个办法:让评估提示词和生成提示词部分解耦、注入对抗性的反例、用一小撮人工标注做锚点定期校准。
证据
- 来自 Meta AI 的 Self-Taught Evaluators(2024)。
- RLAIF 的论文报告:相比人工标注,成本能降低约 100 倍,同时接近人类的评估准确率。
- 学术根基可以追溯到 Reflexion(2023)和 Constitutional AI(2022)。
怎么用
- 先挑一个窄的领域开始,训练前先定好客观的裁判标准。
- 保留一小撮固定的"人工审计集",定期抽查,检测评分器是否漂移。
- 先把评分器当质量闸门用,验证可靠后再考虑用于奖励塑造。
- 记录评分器和人工评审的分歧率。
取舍
- 好处:快速扩大评估覆盖面,摆脱对昂贵人工标注的依赖。
- 代价:可能过度拟合合成偏好;需要小心防"裁判和选手串通"(模型学会了讨好裁判而不是做好任务)。
- 注意:要有对抗性测试和人工锚点兜底。
模式三:输出核实(Output Verification)
问题
Reflection 和 Self-Critique 都是"让模型自己评自己"。但有个盲区:模型对自己的幻觉(hallucination)往往毫无察觉。它可能信誓旦旦地给你一个编造的引用、一个错误的数字,而且发自内心地相信是对的。
更糟的是在多 Agent 流水线里:一个 Agent 的幻觉,会变成下一个 Agent 的输入,错误一路放大。反思循环能抓风格问题,但抓不住"和事实对不上"的问题,因为它没有外部证据可对照。
方案
在"生成"和"行动"之间,插入一个核实步骤,分三步走:
- 提取声明:把 Agent 的输出拆解成一个个独立的、原子化的"声明"(claim)。
- 检索证据:对每个声明,去权威来源(API、知识库、RAG 存储)里找支持或反驳的证据。
- 打分:根据证据吻合度,给每个声明一个信任分数,再汇总成整个输出的置信度。
Agent(或编排器)根据分数决定:直接继续、带着反馈重试、还是升级给人处理。
输出 = Agent.生成(提示词)
核实结果 = 核实(输出, 上下文)
if 核实结果.信任分数 >= 门槛:
继续(输出)
else:
带着反馈重试(核实结果.被标记的声明)在多 Agent 系统里,在每一次 Agent 之间的交接处都做核实,这样错误就不会在流水线里传播。核实结果还可以做成带签名的收据(verification receipt),留下审计轨迹,方便合规。
怎么用
- 在任何会产生他人依赖的事实性声明的 Agent 步骤之后,放一个核实调用。
- 适合:Agent 的输出会进入决策或下游 Agent 的场景;幻觉风险不低的场景;合规要求审计轨迹的场景。
- 不太适合:纯创意输出(没有事实性声明可核实);延迟预算极低(比如 500 毫秒内必须出结果)的场景。
取舍
- 好处:能抓住反思抓不住的事实性错误和编造引用;多 Agent 下防止错误传播;自带审计。
- 代价:多一次检索和打分,增加延迟和成本;需要维护证据来源。
三个模式怎么选
| 场景 | 推荐模式 |
|---|---|
| 质量要达标,但主要靠自我检查 | Reflection |
| 需要规模化打分,人工标注太贵 | Self-Critique |
| 输出有事实性声明,怕幻觉、要审计 | Output Verification |
| 多 Agent 流水线 | 每次交接都做 Output Verification |
三个模式是层层递进的:Reflection 是"自己看一遍",Self-Critique 是"训练一个专业的裁判",Output Verification 是"拿外部证据来对质"。越往后越严格、越贵,也越可靠。
实践清单
- 写一个反思循环:生成 → 评估 → 改 → 再评估,设 2-3 轮上限
- 用稳定、明确的评分标准,而不是"换个说法"
- 需要规模化评估时,考虑训练一个 Self-Critique 评分器
- 评分器要防"学坏":解耦评估/生成提示词、加对抗反例、留人工锚点
- 输出含事实声明时,加 Output Verification,逐句核实
- 多 Agent 流水线:每次交接都核实,防止幻觉传播
- 记录分数变化,确认迭代真的有提升
本章小结
- Reflection:生成后自查,改到达标或预算用尽。
- Self-Critique:用合成数据训练一个专业的"评分 Agent",规模化打分,成本仅为人工标注的百分之一。
- Output Verification:把输出拆成声明,逐句对照外部证据,抓幻觉、留审计。
- 三个模式层层递进,从"自己看"到"专业裁判"再到"外部对质"。
下一章,我们讲"让主 Agent 学会把活分出去"——委派(Sub-Agent Spawning)模式族。