把"反思"写进提示词:廉价模型上的内省工程
结论先行:廉价模型不会自发内省,但可以被"条款 + 近因注入 + 可核查记录"逼出可用的检查行为。它不等于诚实,也不等于真实思维链;它是一副注意力的脚手架。
1. 为什么要把反思外化
便宜模型最常见的失败不是"不会做",而是"做得太快":
- 读到最后一个工具输出,就把它当成最终结论;
- 检查了当前这一步,就宣称整个任务通过;
- 发现了偏差,先写一句"已修正",再继续往下走;
- 把"复述一遍要求"当成"已经核对过"。
这些行为的共同点是:缺少一个先于结论的检查回路。对强模型,这个回路可能来自模型侧更长的思考;对廉价模型,只能由外部提示词强制。
2. Claude 的扩展思考,与廉价模型的差距
Claude 的扩展思考发生在模型侧;外部看到的是摘要与结果,不是可审计的推理链。它带来的一个副作用是:模型在给出结论前,已经"想过一遍"。
更小、更便宜的模型没有稳定的这一层。它们更倾向于直答、就近取证据、把最后一次工具输出当结论。所以工程上的选择不是"让廉价模型学会内省",而是把内省拆成外部可执行的动作,写进提示词,并在每轮结尾提醒。
这里必须先划清边界:以下全部是设计假设与工程经验,不是对某个具体模型内部机制的断言。
3. 条款化:把内省拆成可执行动作
现行条款(节选,src/prompts.ts:55):
二、反思:声称完成、通过或修复之前,必须执行反思,反思必须先于结论输出;反思必须覆盖任务全程,覆盖范围包括此前轮次、当前轮次、中间结论、工具调用、外部证据;禁止仅审视当前轮次而忽略此前轮次;反思必须包含重述要求、复核中间结论、枚举替代路径、证伪当前结论、指出不足、总结教训、识别偏差与纠正措施。
拆开看,它规定了四件事:
- 时点:先于结论,不是事后解释。
- 范围:跨轮,含工具调用与外部证据。
- 动作:重述、复核、枚举、证伪、不足、教训、纠偏。
- 收口:偏差未纠正前禁止报完成,禁止隐瞒。
4. 反作弊:三个禁止、一个记录
最容易被跳过的动作是"证伪"和"指出不足";最容易造假的是"重述要求"。所以条款还有三句反作弊:
- 禁止以复述要求、复述过程、复述结论代替偏差识别、证伪与纠正;
- 偏差未纠正前,禁止报告完成/通过/修复,禁止隐瞒未纠正状态;
- 过程记录必须含检查项、结论、偏差、纠正措施、证据位置,且必须接受核查;
- 但记录不能替代证据。
最后一句很关键:反思记录是"检查过程的账",不是"结论为真的证明"。证据仍然要 [READ:path:line] 或 [BASH:cmd:output]。
5. 近因注入:让最后一眼看到反思
主清单与子清单都把反思放在最后一项(src/prompts.ts:252、:266),清单由 force_suffix 追加到每条插件注入消息的末尾(src/prompts.ts:277)。原因见第二篇:模型对结尾的注意力更高。
清单不复述全部细则,只保留四个高风险触发器:
- 反思必须先于结论输出;
- 禁止只审视当前轮次;
- 禁止以复述代替反思;
- 过程记录必须含五字段并接受核查,且不得替代实质证据。
6. 提示词也要做变异测试
条款不是写完就算。tests/test-prompts.mjs 对条款做结构断言,再用变异验证断言是否真的有效:
| 变异 | 预期 |
|---|---|
| 删掉"反思"款 | 测试红 |
| 把"必须"改成"应当" | 测试红 |
| 删掉"未纠正禁止报告" | 测试红 |
| 删掉清单末款 | 测试红 |
| 把反思款从末位移走 | 测试红 |
| 给清单加回冗余边界句 | 测试红 |
当前结果:test-prompts 569 项通过、0 失败;条款级与清单级变异分别验证,最近一次清单级 15 项全部变红。改坏仍绿就是假测试,必须重写——这条规则同样适用于提示词。
7. 优点
- 跨轮:把"最后一步对不对"扩展成"整条链路对不对"。
- 可执行:七个动作都是动词,不需要模型理解"内省"这种抽象词。
- 可核查:记录有固定字段,能被人和工具复核。
- 便宜:一段文本,不需要额外模型调用或第二遍推理。
- 可测试:条款本身可以被断言与变异锁定,防止后续改动把它软化。
8. 局限
- 不是真内省。模型看不到自己的权重和完整思维链;记录是事后重构,可能自洽但错误。
- 可以表演。写出漂亮的"检查项/结论/偏差"不等于真的发现了偏差;门只能查形式与证据,查不了诚实。
- 注意力竞争。条款越长,中间部分越容易被忽略;所以才需要近因注入与去重。
- 未知的未知。"枚举替代路径"仍受模型想象力限制。
- 同刻歧义要靠外部判据。时间戳无法区分的同刻事件,只能 fail-closed。
- 遵循度波动。同一模型在不同上下文长度、不同任务下表现不同;条款降低方差,但不消除。
9. 工程清单
- 用命令式,不用建议式;只用"必须/禁止"。
- 时点写死:先于结论。
- 范围写死:跨轮,含工具与外部证据。
- 反作弊三件套:禁止复述、未纠正禁报、记录可核查。
- 记录字段固定五元组:检查项、结论、偏差、纠正措施、证据位置。
- 近因位置:清单末项。
- 用测试锁条款,用变异证明测试不是假绿。
- 记录不替代证据。
10. 结语
反思条款不是让廉价模型变成 Claude,而是给它一副拐杖:在它最想直接下结论的时候,逼它先回答七个问题。拐杖不能保证它不摔,但能让它摔得可复现、可纠正、可审计。
证据与边界
- 条款原文:
src/prompts.ts:55;清单末款:src/prompts.ts:252、:266;注入函数:src/prompts.ts:277。 - 验证命令:
node tests/test-prompts.mjs(569/0)。 - 变异脚本:
%TEMP%/opencode/mut-reflect3.mjs(条款级与清单级两批)。 - 边界:本文把"廉价模型缺少自发内省"作为工程假设,未做跨模型对照实验;"位置效应"的证据见第二篇。
- 行号以本文写作时的
main = bdffa37为准。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/liulilittle/article/details/170132409




