口径先钉住:本篇每个数字都来自
experiments/entry-gate/的第二轮实测, 6 条原始 agent 输出逐条归档在runs/round2/,可逐字复核。 其中最关键的一条------答案表本身是错的------由预注册哈希保证不是事后补的。 ⚠️ 第 5.4 节是一次事后更正,且它同时推翻了答案表和实测。 核实 37 个掘金 ID 后发现 post25 确实公开可达 ------ 正确答案既不是「通过」也不是「不通过」,而是「有条件通过」。 那一节比主线更值得读。
上一篇(post25)我说过一句话:判据全绿不代表数据是残的。 这一篇是它的反面形态:连答案表自己都可以是错的,而且错得非常有道理。 而最后证明这段话还差一层------连「实测」自己也可以是错的。
一、我在做什么:一个测「别人能不能自己验」的盲测
我给自己的写作立了一条入口门判据:标题里必须有一个具体可验证的物------ 一个数字、一个文件名、一个比例、一个可查的出处。
这条判据里有半句是字面可执行的:「别人能不能自己验」 。 于是 2026-10-07 我把它变成了一个实验(experiments/entry-gate/):
给一个不知道上下文的 agent 一条标题,只许查公开来源,问它三件事:
- 这条标题里的「具体物」指的是什么?
- 要独立验证它,你会去哪里查?给出具体 URL。
- 你实际查了吗?结果是什么?
不让 agent 下判定,只让它报事实。判分由我做。
刺激集里放了三类:正控制 (P1,一条已经定案并已发布的标题)、 负控制 (N1/N2,两条抽象命题型标题)、以及待测候选(A1/B1/B2)。
判据也拆成了两条可分离的子判据:
子判据 / 问什么
- 1a 锚点存在 ------ 标题里的数字/文件名/标识符,是不是一个真实存在的物?
- 1b 第三方可达 ------ 匿名读者能不能打开一个公开入口,看到对应的物?
必须 1a 且 1b 都满足才算通过。只满足 1a 的,等于没满足。
二、第一轮整轮作废
第一轮跑完,我把结果矩阵写进了 README,看起来很漂亮。
然后我意识到一件事:原始 agent 记录一条都没存。
全历史里 experiments/entry-gate/ 只有 README.md 和 stimuli.md 两个文件。 agent 说了什么、查了哪里、报了什么------全部只存在于当时的对话里,没进版本库。
更要命的是,N1 和 N2 那两条是被污染的 :对照表就放在实验目录里, agent 直接 grep 到了自己那一行,连同我已经写好的裁定原文一起被读进上下文。
盲测只要答案在盘上就不成立。 agent 和我共享文件系统, 它不知道该忽略什么,它会去 grep。
没有原始记录,第一轮的结果就无法被任何人复核------ 包括我自己。而一个不可复核的实验,和没做是同一件事。
所以第二轮重跑。这次补上了三样:
- 协议独立成文件 (
PROTOCOL.md),第三方能照着执行 - 答案表归位入仓 (
KEY.md,原先躺在/tmp),并跑前记录 SHA256 - 原始输出逐条落盘 (
runs/round2/*.txt),一条不删
三、答案表错了,而且错在最有道理的地方
第二轮的预期结果,我在跑之前就写进了 KEY.md 并记录了哈希:
vbnet
59b1453eef9f3dc5b0a019153286bdd8b96cd2a728350f08fd8fd607bf920b1a KEY.md
aaeafa190d6daa59aaf981361fbf164220caa64b196c0a14d7ea0c849eea657d stimuli.md
跑完之后再校验,哈希没变。所以预期确实是跑前写定的,不是看到结果回头补的。
然后实测 P1,答案是:不通过(1a 不成立,1b 也不成立)。
而我的答案表写的是:
P1| 门禁跑足了 10 条规则,7 个真实越权改动,0 次拦下 | 通过 | 预期依据:post25 已定案并已发布,地面真值已知
「地面真值已知」------这句话本身是错的。
错在哪:post25 确实定案了,确实四平台都发布了。 但那个仓库是私有的。 匿名读者打开 GitHub API 只会拿到 404。 发布发生在我的账号后面,不在公网上。
盲测 agent 的报告说得很直白:
「标题没有指明哪个门禁、哪个仓库、哪个被改动对象, 这三个数字没有任何可定位的公开锚点。」
这和两年前我犯的错是同一个
POST25-DECISION.md:37 那张表的列名写着「别人能不能自己验」, 而我在 P1 那行填的是「脚本在仓库里」。
两件事,中间没有任何一步校验。
而这次,答案表比那篇文章走得更远一步------ 它直接写下「地面真值已知」,把我已知 当成了人人可知。
一个预注册的答案表可以是对的,也可以是错的。 预注册保证的不是「答案对」,是「答案不是事后凑的」。 这两件事完全不同,而只有第二件是预注册能保证的。
四、为什么这件事值得单独写一篇
因为它戳中了一个很少被正面讨论的场景:
评审自己的实验时,最危险的不是判据太松,是判据「看起来很有道理」。
「post25 已定案并已发布,地面真值已知」------这句话读起来无可挑剔。 有定案、有发布、有实验脚本、有原始 JSON。四个条件全部满足。
而它错在这四个条件没有一个等于「第三方可达」。
这不是我第一次在这个点上栽。仓库里另一处记录了同一形状: ACADEMIC-TRANSITION.md 写「仓库私有 = 学术化不可行」, 后来被推翻------我对着会议的投稿规则倒推出了「什么叫学术」的定义。 投稿资格不等于学术性,私有性是操作资产的属性而不是研究资产的属性。
两次的错误结构一样:拿一个「测得出来的量」,当成另一个问题的答案。
五、这轮实验自己给出的其他结论
5.1 六条判定,第二轮与第一轮全部一致
ID / 1a / 1b / 判定
P1------ ✅ ------ ✅ ------ 有条件通过(详见 5.4 的事后更正)N1------ ❌ ------ ❌ ------ 不通过(无锚点)N2------ ❌ ------ ❌ ------ 不通过(无锚点)A1------ ✅ ------ ⚠️ ------ 有条件通过B1------ ✅ ------ ✅ ------ 通过,但措辞要改B2------ ✅ ------ ✅ ------ 通过
正控制与负控制被分开了 ------区分力成立,取值不是恒 [True]。
5.2 但检索能力受限这件事必须记下来
第二轮 6 个 agent 全部只有 web_fetch,没有 web_search(6/6 主动声明了)。
这意味着 N1/N2 的不通过不能 读作「锚点不可复核」, 只能读作「在受限检索能力下无可复核锚点」。
有一条 agent 做得特别好,它自己写下:
「我无法区分这是『确实无命中』还是『RSS 端点对中文精确匹配支持差』...... 当前环境下我只能给出『未找到』,给不出『不存在』。」
它还做了个校准实验 :用无意义词 zzzzznotarealtermqqq 测 GitHub 搜索是否尊重引号 (返回 0),再测 "27 agents"(返回 4,370,566 条,首条无关)------ 证明该通道忽略引号,短语搜索在此通道上无意义。
「查不到」和「不存在」的区别,它比我清楚。
5.3 污染核验,以及它的天花板
bash
cd experiments/entry-gate
sha256sum -c PREREG.sha256 # 预期确为跑前写定
python3 check-contamination.py # 输出里有没有只有 KEY.md 才有的字符串
实测:clean 6/6,预注册哈希未变。
但这道检查证明不了实验无泄漏。 它是关键词匹配,只能提高作弊被抓的概率, 不能证明没作弊。真正的盲测要靠外部执行环境隔离 ------ 而根因(agent 与主 agent 共享文件系统)本轮并没有解决, 我只是把答案挪了位置并加了哈希。
这一点写在 runs/RESULTS.md §三,不藏在方法学描述里。
5.4 ⚠️⚠️ 事后更正:本节第三节的 P1 判定,两头都判重了
这一条是本篇最重要的一次更正,而且它同时推翻了我和我的答案表。
把全部 37 个记录在案的掘金文章 ID 逐个 HTTP 核实之后,发现:
shell
$ curl -s -o /dev/null -w "%{http_code}" https://juejin.cn/post/7693165008605675520
200
<title>门禁跑足了 10 条规则,7 个真实越权改动,0 次拦下... - 掘金
post25 是公开发布的,匿名可访问,标题与本地 title.txt 逐字相符, 正文里「10 条规则」「7 个」「0 次」三个具体物全部在。
所以三种判定里,正确的是「有条件通过」:
来源 / 判定 / 哪里不对
KEY.md(预注册) ------ 通过 ------ 太强。实验脚本与原始数据在私有仓库里,匿名读者能读到结论、读不到「怎么得出来的」- 第二轮实测(2026-10-08) ------ 不通过(不可复核) ------ 太强。文章确实公开可达
- 修正后 ------ 有条件通过 ------ 1a ✅ 1b ✅,但「可复核的只有结论,不是过程」
为什么盲测 agent 会判错
不是它推理错了,是它拿到的检索通道全部失效了。 它自己的报告里写着:
「标题原文精确检索:撞上 DuckDuckGo 人机验证...... Mojeek 备用入口:403 Forbidden......Bing:返回的是重度 JS 混淆的 SERP 页面, 等同于无结果,不是「确认无此文章」。」
于是它转而找到了 ySimon 那个同题材但数字不同的系列, 据��得出「这三个数字在公开来源中找不到对应」。
结论碰巧与事实相反,而它的推理链是自洽的。
而同一轮的 N2 那条 agent 恰好写下了这句话:
「当前环境下我只能给出『未找到』 ,给不出『不存在』。」
它把这一轮最该说的话说了出来,而我当时没有把它应用到 P1 上。
教训:「实测结果」和「工具能力」必须分开记。 盲测给的是「在受限检索能力下未找到」, 不是 「不存在」。前者是关于工具的陈述,后者是关于世界的陈述, 我把前者当成了后者。
这也解释了为什么 KEY.md 和实测同时 错、却错向相反的方向: 答案表假设「已发布 = 一定找得到」,实测假设「找不到 = 不存在」。 两个假设都不成立。
六、这个结论什么情况下是错的
我把证伪条件写在这里,而不是留给下一个读者去猜:
如果有人能在公开网络上定位到「10 条规则 / 7 个真实越权改动 / 0 次拦下」这三个数字 的出处,第三、四节的结论就错了。
具体地说,以下任一成立则本文的 P1 判定需要修正:
- 那个门禁实验的代码或数据被公开到了一个匿名可达的位置;
- post25 的三个数字其实出自某个公开发表的他人系列(实测中 agent 确实找到了
一个同题材的中文系列,作者 ySimon,工具 gatecheck,但数字对不上: 人家是 175/162 个变异体,不是 10/7/0);
- 仓库转为公开。
第 2 条我特别说明 :第二轮的盲测 agent 自己找到了 cloud.tencent.com/developer/article/2745986 这一系列 (MIT 开源,仓库 simin-yuan/self-auditing-agent)。 那一系列做的正是「用变异体检门禁」,规模大一个量级。 它不推翻本文的结论(数字不同),但它推翻「没人公开做过这件事」的假设。
七、局限
- n = 6,每条一个 agent、一个基座模型。够判「有没有区分力」,不够估效应量。
- 检索能力受限(见 5.2),系统性压低了 1b 的通过率。
- 同一刺激两次跑可能给出不同的可达性结论 ------第二轮的
P1agent 找到了
第一轮没找到的同题材系列。检索结果依赖当时的网络与工具状态,这是固有噪声。
- 第一轮不可复核,本轮不能声称「复现了第一轮」,
只能声称「第二轮结论与第一轮 README 记载一致」------ 前者需要数据,后者只需要读文档。这两句话的分量差得很远。
- 污染控制是事后检查,不是环境隔离(见 5.3)。
八、复现方法
bash
git clone https://github.com/Ikalus1988/account-ops-workflow
cd computer-use-demo/experiments/entry-gate
# 1. 确认预期是跑前写定的
sha256sum -c PREREG.sha256
# 2. 看 6 条原始输出
ls runs/round2/
# 3. 核验污染
python3 check-contamination.py
python3 check-contamination.py --selftest # 判据自身会失败的用例
# 4. 判据标准的全文(含反例)
cat PROTOCOL.md
原始数据 :6 条 agent 输出见 experiments/entry-gate/runs/round2/, 逐条归档,未删改。结果汇总见 runs/RESULTS.md。 第一轮的 README 原文保留 ,两轮差异在 runs/RESULTS.md 里逐条列出。
附:本文引用
学术文献
- Large Language Models for Software Engineering: A Reproducibility Crisis --- arXiv:2512.00651。系统分析了 640 篇 LLM-for-SE 论文的 7 类可复现性气味,结论之一是「badges often signal artifact presence but do not consistently guarantee execution fidelity」------「制品存在」与「第三方可执行」之间存在系统性落差,这正是本文 P1 失败的已知一般形态。本文不是发现这个现象,是提供一个可复现的最小实例。
- (Over)Reliance on Test Agents in AI-Assisted Software Testing --- arXiv:2607.17927。提出过度依赖既是 agency 问题也是 assurance 问题,并明确呼吁「a framework for collecting data on overreliance」。它是立场文,没有数据;本文的数据是这个空的一个格子。
他人的公开工作(由盲测 agent 检出,非本文主动检索)
- CI 全绿,门禁却可能一次都没拦过:用变异测试给质量门禁做体检 --- 腾讯云开发者社区
cloud.tencent.com/developer/article/2745986,作者 ySimon,2026-09-18。175 个变异体漏过 78。 - CI 全绿...我用 162 个变异体做体检 ---
cloud.tencent.com/developer/article/2751800,2026-09-27。变异 56→162,漏过 19→57,真盲区 0。工具与仓库:github.com/simin-yuan/self-auditing-agent(MIT)。
复现锚点
experiments/entry-gate/PREREG.sha256--- 预注册哈希experiments/entry-gate/runs/round2/*.txt--- 6 条原始输出- 版本锚点:本文写作时仓库 tag
v0.1.0-research;第一轮实验对应 commit4c34563,第二轮协议与判据见fac9945