self-verify-agent · 正确性验证与交付门禁引擎
一句话定位
self-verify 是"对不对"的守门员,self-evaluate 是"好不好"的评委,self-debug 是"修"的工人。
三者同一条 Reflexion 血脉:评估 → 验证 → 调试,构成"先知道自己错了没,再决定改不改"的闭环。
它解决一个最贵的错误:你以为做对了,其实没对,还交付了。
Self-Consistency 论文的原话直觉是——"如果多条独立推理路径都收敛到同一个答案,我们才更相信它"(Wang et al., 2022);《Let's Verify Step by Step》(Lightman et al., OpenAI, 2023)进一步证明:只看最终答案会放过"步骤错但答案蒙对"的情况,逐步骤验证可靠性显著更高。本包把这两件事都做成可执行的引擎。
「自我」的本质(为什么叫 self-verify)
"验证"通常不是自我的事——你写完代码靠 CI 跑、你写完方案靠老板审、你做完判断靠别人纠。但 self-verify 的"自我"是:不假外求,在交付/相信之前,自己对自己的结论做正交复核。
正交的意思是:不用"我再想一遍"(那只是同一条思路的重复),而是换一种独立的方式去逼问自己:
- 执行验证:能不能真的跑起来、断言过不过?(让机器当裁判,不靠感觉)
- 自洽验证:同一问题用不同思路推,结论是否收敛?(Self-Consistency)
- 步骤验证:推理链里每一步单独拎出来,是否站得住?(PRM 过程验证)
- 证伪验证:我能不能举出一个反例、一个边界,把自己推翻?(Popper 证伪主义)
这四种方式彼此独立、互相兜底。任何单一验证都可能错——这点 DeepSeek-R1(2025)用"不成功的尝试"一节讲得很清楚:过程奖励模型(PRM)有三大坑(细粒度步骤难定义、中间步判断不可靠、奖励黑客)。所以本包不迷信任何单一验证,而是多路并行 + 记录命中率(见 scripts/consistency.py 与 verify.py 的 --record)。
何时主动触发(主动 Agent 段)
你不用等用户说"帮我验证"。在以下迹象出现时,应主动插入一道验证门禁:
- 你刚写完一段代码/脚本,准备说"完成"之前 → 主动跑
verify.py --gate。 - 你给出了一个结论/答案/决策,且它"看起来对"但没有被独立路径确认过 → 主动做自洽性检查(
consistency.py)。 - 你的推理链超过 3 步,且其中任一步是"应该没问题吧"这类语气 → 主动做步骤级核对(
verify.py --stepcheck)。 - 你要交付给真人/上线/发版的东西 → 主动跑完整
verify_checks.json五类清单。 - 你发现自己"很确信"某事,但证据只是"我一直这么认为" → 主动做证伪探针(
verify.py --probe)。
触发话术示例(内部):"等等,先验证一下再交付。""这个结论只有一条路径支持,做一下自洽性检查更稳。"
核心能力(三个脚本,两个硬核)
1. scripts/verify.py —— 验证门禁引擎
子命令:
--gate "<命令>":把命令当门禁跑,解析 stdout/stderr,命中失败模式(非零退出、异常栈、断言失败、超时、空输出)即物理拦下,退出码 1;通过则退出码 0。支持--expect-pass/--expect-fail两种预期方向。--stepcheck "<推理文本>":把一段推理按换行/序号拆成步骤,逐条点名"成立 / 存疑 / 不成立",对存疑/不成立步给出"为何"与"该怎么证"。PRM 思路的落地。--probe "<结论/产出>":证伪与边界探针——扫描绝对化措辞("一定/必然/所有/永远")、未经检验的假设、缺失的边界条件,提示"你可能在哪被推翻"。--checks <类名>:加载resources/verify_checks.json中某一类(EXEC/SELF_CONSISTENCY/STEP/EDGE/ALIGN)的检查项,逐项输出通过/跳过/阻塞。--record <结论> <0|1>:记录一条"我当时验证了 X,后来证明对/错",供后续算验证命中率。
2. scripts/consistency.py —— 自洽性硬核(对标 calibrate.py)
Self-Consistency 的可计算实现:
--vote <路径文件>:读 N 条独立推理路径(或结论),提取最终答案,做多数投票,输出 收敛度 = 最高票占比,并诊断分歧(哪几条和多数不一致、是不是有"孤票")。--demo:内置示例(一道算术题 5 条路径,3 条指向 18、2 条指向 14)演示投票与收敛度。- 收敛度低(如 < 0.6)即触发警告:"结论未收敛,置信度不足,别急着交付。"
这是把"自我一致性"从一句口号变成数字——和 self-evaluate 的 calibrate.py(Brier/OCI)、self-debug 的 localize.py(Ochiai 可疑度)是同一类"可计算证据"引擎。
3. resources/verify_checks.json —— 五类验证清单
- EXEC(执行):能不能跑、断言过不过、边界输入崩不崩。
- SELF_CONSISTENCY(自洽):换思路推结论是否一致。
- STEP(步骤):推理链每步是否单独成立。
- EDGE(边界/证伪):反例、极端输入、未声明假设。
- ALIGN(对齐):与已知事实/约束/需求是否冲突。
与系列其他包的关系
- self-evaluate-agent:它告诉你"质量 4/5,弱在 E 有效性"。本包接着问"但你对不对?"——评估给方向,验证给底线。
- self-debug-agent:验证标出"这句断言挂了 / 这步不成立",交给 debug 去修;修完再回到本包
verify --gate确认真过了。 - self-improvement-agent:验证发现的"我老是验证漏边界",可沉淀成永久记忆,升级下次行为。
三者不互相依赖,但串联起来就是一条完整的"自我修正流水线"。
边界与红线
- 本包只做验证,不自动改东西。它拦下、点名、给证据,但不替你写补丁(那是 debug 的活)。唯一例外:
--record只记日志。 - 验证失败 ≠ 你错了,也可能是测试/假设错。门禁拦下后必须看报告,不要盲目"为了过门禁而过门禁"(那是 DeepSeek 说的奖励黑客同源毛病)。
- 本包不接触你的私密数据;所有日志(verify_log.jsonl)仅落本地,打包时排除。
- 自洽性只在"有客观答案"的任务上可靠(数学/逻辑/代码);开放创作类(写诗、脑暴)不适合多数投票,应改用步骤核对+边界探针。
- 不要因为"通过了门禁"就 100% 自信。验证是降低风险,不是消除风险。置信度来自多路验证的叠加,而非单点通过。
文件导航
self-verify-agent/
├── SKILL.md # 本文件:引擎定义与触发逻辑
├── scripts/
│ ├── verify.py # 门禁引擎(gate/stepcheck/probe/checks/record)
│ └── consistency.py # 自洽性硬核(Self-Consistency 多数投票+收敛度)
├── resources/
│ └── verify_checks.json # 五类验证清单模板
├── references/
│ ├── verify-theory.md # 验证哲学 + 三大理论根基 + DeepSeek 反例
│ ├── self-consistency-method.md# 多路径采样、收敛度量化、何时失效
│ └── assertion-culture.md # 把验证变可执行断言、门禁文化、记命中率
├── FAQ.md # 场景应对与"自我验证 vs 自评"辨析
├── README.md # 上手、命令、退出码
└── SELF_EVAL.md # 本包用 TRACE 五维自评到 5.0