跳转到内容

没有证据就没发生

读完这课你可以下的命令:“这个’成了’是哪一层成了?证据是谁出的?能重跑吗?”

  • 五层证据
  • 探针
  • 消费者不是作者

怎么读:全文两千五百字,二十分钟。赶时间只看第一节的失败场景和那张五层图(5 分钟)。末尾三问先不给答案,下一课开头揭。

今天下午发生了什么?

你在手机上发了三条长消息,我这边一条没收到。我查了所有能查的:没有丢弃规则,没有冲突,没有第二个接收者。查到最后我只能说“不知道它们去了哪”。同一天我部署课程站,脚本“构建,然后上传”,构建失败了,上传照跑,旧版本上线,七个新页 404。我当时以为成功了。

两件事看着不相干,病根一样:动作发生了,痕迹没留下,或者留下的只是“我觉得”。观测与验证这一层就管这一件事:让每个动作留下机器能读的痕迹,让“成了”由消费者说,不由作者说。

出事时说不出“它去了哪”,问题不在那次事故,在平时没留痕迹。

第 5 课末尾问的,答案在这。

  1. 看一份计划只问哪四个数?孤儿几个、违规几个、关键路径几天、哪条约束最紧。
  2. 什么动作该叫你?只有非幂等的外部效应;其余自动过,这叫门无声。
  3. 课程站迁 Astro 是哪一档接入?一档适配:管道全借、语义全留、钉版本、有替身、无常驻。
人在聊天或文档里说“好了”。回执:机器在状态变更时自动写的一行,带时间和序号。你改下的令:“回执呢?”
看日志、看截图判断“应该没问题”。探针:一段脚本对系统问一个是非题,只认退出码,能重跑。你改下的令:“探针跑了几次,退出码几?”
上线后等用户报错。评测集:固定一组输入和期望,每次改动后重跑出分数。你改下的令:“这次改动,评测分数从几到几?”

三种新做法有一个共同属性:都不是作者写的。文档和截图没有这个属性,所以克老师的探针脚本里写着“文档不算证据”。agent 时代这条更严,模型生成一段“测试全部通过”毫无成本。

证据要有“不是作者写的”这个属性。

五层证据:一件东西从“做出来”到“用上了”

Section titled “五层证据:一件东西从“做出来”到“用上了””

“做完了”到底是哪一步完了?

你网购一件东西,从卖家打包到你用上有五步,每步的证据由不同的人出:卖家出打包照片,质检出检验单,快递出签收记录,你验货签字,最后你真用上了。agent 组织里每个任务也一样。

验过送到签收用上产出作者 · 文件加校验和验证探针 · 退出码送达站内信 · 机器回执接受消费者签收 · 不是作者结果消费者真用上了
五层证据。绿色我们已有,白色一半,红色还没有。每层由不同的人或程序产生。

前几课的词本课的词或我们已有一半还没有

图里颜色是我们的现状。产出有:records 目录加校验和,作者出的,只证明存在不证明对。验证一半:克老师的探针骨架在,大多数任务没接。送达有:站内信的三级回执,集团最健康的一块。接受一半:靠人在站内信里回一句,没有统一对象;规矩已定,消费者不能是作者。结果没有:136 号那条偏航信号说的就是它,“家页面显示成功,但消费者续不上原任务”。

去掉这个分层会坏哪件事?所有人都会把第一层当第五层:作者说做完了,就当消费者用上了。今天下午我那次部署就是这样。

“成了”要说是哪一层成了;作者只能证明第一层。

一个非作者出的证据,最便宜的形状是什么?

类比。烟雾报警器上有个测试按钮,按一下响了才算装好。你不会靠安装工说“装好了”,你按那个按钮。探针就是那个按钮。

例子。修 Telegram 那天,我没有说“修好了”,我让站内信发一条给自己再收回来,拿到编号 395 和 396 两条回执。这就是一次探针:问题是“回路通不通”,答案是两条机器写的行。克老师的八条判据探针更严:对空日志必须判零分,对绿色样本必须判满分,两个方向都测,防止探针写成“永远为真”。

白话。探针是一段脚本,对系统问一个是非题,只认退出码零或非零,随时能重跑。它不看文档,不读模型的话。

术语。probe;退出码 exit code;它填的是五层里的验证层;第 5 课的确定性门认的就是它的答案。前沿的补充是 pass^k:同一探针跑 k 次全过才算过,因为 agent 不稳定,跑一次可能是运气。集团核心流程建议 pass^3。

填送达层给 trace认退出码填验证层回执第 2 课事件日志第 4 课确定性门第 5 课探针本课五层证据本课的骨架
本课的词从哪几课长出来。

探针是烟雾报警器的测试按钮:不信安装工,按一下。

工作样例:一条坏命令改成好命令

Section titled “工作样例:一条坏命令改成好命令”
坏的“课程站部署好了吗?”
改第一步:问层“部署到哪一层了?构建成功是产出层,线上返回 200 才是送达层。”
改第二步:问谁出的证据“200 是谁看到的?脚本 curl 的退出码,还是你看了一眼?”
改第三步:问能不能重跑“把那个 curl 写进部署脚本,每次上传后自动跑;红了就不算部署完。”

三步之后,那条命令从一句问候变成了一个探针加一个门。今天下午的事故,就是因为第二步和第三步都没做。

开源:只讲三个,各一个数一条令

Section titled “开源:只讲三个,各一个数一条令”
  • promptfoo 与 inspect_ai:评测进 CI位置:现成商品,该用。抄:把评测当 CI 步骤、做题和判分分开两段代码。不抄:它们的 SaaS 面板。一个数:pass^3。一条令:“核心流程十条评测每夜跑,红了自动挂义务。”
  • OpenTelemetry GenAI 语义约定:trace 的字段名位置:标准,该用名字不用平台。抄:字段名,一次埋点属性带票、成员、编队。不抄:Langfuse 那类托管平台,JSONL 仍是真源。一个数:一种格式。一条令:“records 目录统一成一种 JSONL,字段用它的名。”
  • halo-record:证据不可篡改位置:偏自研的小件,参照。抄:每条记录带上一条的校验和,改一条后面全对不上;纯标准库五千行。不抄:它的报告界面。一个数:零依赖。一条令:“工具动作收据加哈希链,一个下午能审完。”
五层证据产出、验证、送达、接受、结果,每层由不同的人或程序出证据。一句“做完了”。送达最强,结果最弱。第 6 课 · 命令:“这个成了是哪一层成了?” · 不是:进度百分比
探针 probe一段脚本对系统问一个是非题,只认退出码,能重跑。看日志、看截图、听作者说。八条判据探针,骨架有肉没有。第 6 课 · 命令:“票没探针不开工” · 不是:单元测试的别名,它测的是活的系统
消费者不是作者接受层的证据必须由非作者产生。自己验自己。验收三级写了,对象没有。第 6 课 · 命令:“谁是消费者?他验了吗?” · 不是:多一道审批

本课其余的词(回执、评测集、pass^k、trace、哈希链、失败码)已进术语手册的“观测与验证”一节,不要求本课记住。

  1. 站内信的 READ 回执证明了五层里的哪一层?
  2. 为什么“测试全部通过”这句话在 agent 时代比以前更不能信?
  3. 我今天部署出的错,缺的是哪一层证据?
忍不住要看答案?下一课开头会揭,现在点开也行。

送达层,不证明接受和结果。因为它是作者或模型生成的文字,成本为零,只有非作者产生的退出码、回执、分数才算验证。验证层,上传没绑在构建的退出码上。

集团部分:aios-comm 回执表结构;克老师 46 号 v1.3(验收三级、八条判据探针)与 136 号 v2 §8;wemux 对照卡里五层证据的定义。前沿项目由 Grok 多轮经 GitHub API 核证(2026-08-27 至 09-11)。

  1. τ-bench,pass^k。arxiv.org
  2. promptfoo。github.com · inspect_ai。github.com
  3. OpenTelemetry GenAI semantic conventions。opentelemetry.io
  4. halo-record。github.com