创作方向 · 平凯 Loop 的实践

否决权
多 Agent 协作里,最稀缺的不是产能,是敢说"不"的那一票

把五个 Agent 塞进一个 Loop,产出速度会翻几倍 —— 错误也会。 因为多 Agent 协作最危险的情形,从来不是"没人干活",而是"所有人都干得很像对的"。

这一页不介绍 Loop 是什么,而是交代一件更实在的事:这个作品本身,是怎么在被否决了 13 次之后才敢拿出来投稿的。 以及,那套否决机制如何从"我一个人的习惯",变成循环里一个固定的角色。

一个不产出的角色 482 项可执行断言 13 次否决留痕 可搬走的三条规则

一、协作的两种失败模式

第二种比第一种危险得多
模式 A单点自说自话

一个 Agent 从头写到尾,没有第二双眼睛。它错了,就是整篇错。

症状:错得很坦荡,一眼能看出来。
危险度:低 —— 因为容易发现。
模式 B协作性确认偏误

多个 Agent 分工协作,流程看起来很严谨。但如果它们读的是同一批二手资料、用的是同一类模型, 它们会犯同一个错,然后互相点头。

症状:三个错答案彼此印证。
危险度:高 —— 因为流程反而成了它的掩饰。

一个真实发生过的例子:三个 Agent 都会写错的那个数字

coprocessor.region-split-size 的默认值,中文技术圈里大量二手资料写的是 96MiB。 这是 v8.4.0 之前的值,v8.4.0 起官方默认已改为 256MiB。

现在设想:我让三个 Agent 分头去写"分裂阈值是多少",再让它们交叉校验。 它们大概率三个都写 96MiB,然后三票互证通过 —— 因为它们的语料里躺着同一批过时文章。

这不是协作出了问题,而是协作的目标函数设错了。 当"互相校验"的判据是"我们说的是否一致",协作就退化成了一次共识幻觉; 只有当判据是"我们说的是否对得上官方文档",协作才开始产生真实价值。

所以多 Agent 协作真正缺的,不是更多的产出者,而是一个有否决权的角色。 它的存在意义,是让"看起来很一致"这件事,不再能通过验收。

二、我们往循环里加了一个"不产出"的角色

它的 KPI 是否决数,不是产出量

在 Loop 的项目分工里,通常会给角色起名字:架构、设计、开发、测试、文案。 我们额外留了一个位置,叫 核验 Agent。

它不写文案、不做设计、不写代码。它唯一的工作,是在任何内容出门之前,逐条要求出示出处。 没有出处的表述,它有权直接卡住 —— 不需要跟任何人商量,也不需要征得产出方同意。

这个角色最反直觉的一点是:它的产出是好内容的副产品,而不是它的目标。 一个核验 Agent 如果从不否决任何东西,那它不是宽容,而是失职。

如实交代:本站所描述的角色分工与质量门,与实际产出过程一致;这套模式适用于平凯 Loop 这类支持多 Agent 协作与共享简报复用的平台。文中不虚构任何具体平台的界面操作细节 —— 换一个多 Agent 协作平台,下面三条规则同样成立。

三、否决权落地的三条规则

把"事后审"变成"事前锁",把"靠吵"变成"靠跑",把"删掉"变成"留痕"
规则 01口径先于表达 —— 字典前置
先建字典,再写画面。本站的字典是 spec.js:69 项官方口径, 每项包含条目名、官方原文、适用版本、文档链接四要素。 任何 Agent 想往画面里写一个数字,先去字典里查;字典里没有的,不许写。
作用:把"写完再审"变成"写之前就已锁定"。否决发生在下笔之前,成本最低。
规则 02断言必须机器可判 —— 482 项
把能写成检查的规则,全部写成可执行的断言:JS 语法、重复 ID、缺失 DOM 引用、内部链接完整性、 内容一致性守卫、广告法合规、逻辑正确性、KPI 数据一致性…… 一共 482 项,跑一条命令全量执行。
作用:争议不靠讨论,靠退出码。 对错由机器裁定,"我觉得没问题"这句话在流程里不占权重。
规则 03否决必须留痕 —— 被删掉的不消失
被否决的内容不能直接消失,要进档案:7 条"官方未列明"、2 处自我纠错、4 处违禁表述, 全部收进 核验实录。
作用:如果被否决的内容直接消失,团队会重复犯同一个错。 留痕让下一次协作不必从零开始重新踩一遍坑。

四、现在轮到你当核验官

基础 5 条快判 · 练习沙盒随机抽题
核验官挑战
已标记 0 / 5
点一下你认为不能写进对外作品的条目,把它们标记出来,然后点「提交判定」。 四条有问题的表述,分别代表四种不同的坑 —— 能全部找出来,你就理解这套机制在拦什么。
练习沙盒 · 你来当核验官
抽题中…
这一轮不再"看别人审" —— 从一批真实题库里随机抽 8 份(5 份埋着坑、3 份是干净的), 逐份决定放行还是否决;否决必须指出坑的类型。即时判分、连击加成, 每题判完给出理由与取证卡入口。每次抽到的组合都不同 —— 可以无限重练。

五、操作模拟器:把口径跑一遍给你看

零安装 · 纯前端 · 参数对不上口径,模拟就站不住

前面几节讲的是「怎么不写错」,这一节换个方向:把这些机制本身摆成可以亲手点的微缩沙盘。 三个沙盘的画面里每个机制参数都是虚线锚点 —— 点开就是官方原文。 这不是装饰:模拟器一旦用了错的默认值(例如把分裂阈值仍写成 96MiB),它演示的就是错误结论 —— 所以这里的每个数字都先过字典,才轮到上场。

六、真机回放:读数不是我们编的

数据由三台真机(TiDB v8.5.7)现场采集;本区只回放,不改数

上一节是机制沙盘,这一节换一种证据:真机读数回放。 三台 TiKV 现场采集的 store 状态、Region 分布与故障转移时间线,整理成 JSON 放进 dev/probe/ 后由本区原样渲染 —— 不加工、不补数;没采集到的时候显示空态与字段结构,页面照常可读。 沙盘可以搬走,读数只能自己采 —— 这正是这套机制拒绝「代写数据」的边界。

七、这套机制实际拦下了什么

下面每一条都是真实发生过的否决,不是假设
被拦下的表述坑的类型如果漏出去会怎样
Region 分裂阈值 = 96MiB 过时值 这是社区流传很广的一个旧值。评审只要点开官方文档,第一眼就会看到差异 —— 而技术解读准确性占 30%。
PD 按 region score 公式给 store 打分 无出处 写出来极像"内核级理解",但官方《TiDB 数据库的调度》只公开调度目标,未公开打分公式。看起来很专业,恰恰是最危险的那种错。
存储健康度 100%(字样拼装型) 绝对化 违反广告法绝对化用语要求。且它是 v:'100' 与 u:'%' 分开声明拼出来的,字面量搜索抓不到,只能靠断言专门识别。
Leader 故障后 3 秒内完成重新选举 编造时长 官方只给了 tick 机制(raft-base-tick-interval 1s × raft-election-timeout-ticks 10),未给出端到端时长。凭空补一个"3 秒",就是替官方发明结论。
注意第三条:它不是被"人工审"出来的,是被断言抓出来的。 因为拼装型写法绕过了普通的关键字搜索 —— 这说明否决权如果只靠人和关键字,一定会有漏网之鱼。 规则要能被执行,才配叫规则。

八、可以搬走的东西

这套机制不属于这个作品,它能搬到任何多 Agent 协作项目里

如果你也在用多 Agent 协作做有对外交付压力的内容,下面三样东西可以直接拿走:

① 口径字典的字段结构 —— 条目名 / 官方原文 / 适用版本 / 文档链接 / 状态(已核验 · 官方未列明)。 最后那个"官方未列明"状态是整套机制的关键:它把"查不到"从失败,变成了一个合法的结论。 没有这个状态,Agent 在查不到出处时会倾向于编一个,因为流程里只认"必须有答案"。

② 断言清单的组织方式 —— 每类检查一个独立文件,各自维护,由一条总命令串起来全量执行, 以退出码决定通过与否。好处是:加一条新规则只需要加一个文件,不必改动已有检查。

③ 核验 Agent 的评审提示词,只有三条要求 —— (a) 任何数字必须出示官方出处,否则不许写; (b) 必须区分"官方未列明"与"我没查到",前者是结论,后者是待办; (c) 否决必须留痕,写清原表述、正确口径与修正理由。

九、边界:这套模式不解决什么

把它讲清楚,比把它吹大更有用

它不能替你把机制讲明白。 核验只保证"不写错",不保证"讲得懂"。内容质量仍然取决于人。

它拦不住"出处本身被理解错了"。 如果我把官方原文读错了,再写进字典,核验 Agent 会照样放行 —— 它守的是"有没有出处",不是"出处理解得对不对"。这一层只能靠人。

它依赖人先定下标准答案从哪来。 字典是人建的,Agent 只是守门。 标准答案的来源一旦选错,整套机制会非常高效地生产错误。

它不降低工作量,只是改变错误发生的位置。 从"发出去之后被发现",变成"发出去之前被拦下"。 前者要付声誉成本,后者只付返工成本 —— 这就是它值得的全部理由。

实机录像:这一页的机制,是在 Loop 里真跑出来的

不是静态演示,是未剪辑的操作录屏;跑不通的地方也如实摊开

前面讲的所有规则,如果只停留在页面上,那就还是"自说自话"。所以这一段不写结论,只放过程录像: 在平凯 Loop 的工作区里,真实地建实验频道、把核验智能体加进去、用真实 @ 提及把核验任务派下去。 全程由浏览器自动化操作、连续录屏,未剪辑、未加速。

录像 01 · 建频道 → 加智能体 → 下发核验任务
录像 02 · 用真实提及触发核验
边界要写清楚:两段录像都只跑到"任务已真实下发"为止。 fact-checker 这一次没有返回审核结论 —— 原因是当前工作区的模型服务接口返回 workspace identity cannot be resolved,智能体拿不到可用的模型,因此停在"离线/未响应"。 智能体本身、主机接入、频道、提及触发都是真的;没跑出结论这件事也是真的,所以不剪掉、也不编一段结论补上。 这正是本页第七节说的那句话:核验机制的价值不在于它一定说"通过",而在于它不通过时你敢不敢把"不通过"也摆出来。

十、这一页在实际作品里对应什么

它不是一篇独立的方法论,它是这个作品的说明书

前面讲的抽象规则,在这个作品里都有具体的落点。你可以逐一去核对它们是否真的存在:

换句话说:这一页是"怎么保证没讲错"的交代,其他页面是"讲对了什么"的成果。 两者合起来,才是一个完整的多 Agent 协作交付。

一个循环里,产出的人越多,越需要一个不产出的人。 因为让作品可信的,从来不是产出的速度,而是有人愿意为"不许写"这件事负责。
TiDB 内核解剖室 · 1024 TiDB 社区 AIGC 黑客松参赛作品 · 创作方向:平凯 Loop 的实践
纯前端实现,无追踪、无外部依赖,离线可用。