凭证就是子agent的边界
这是agent时代的人月神话:子agent并行化的是执行,而不是主agent的判断力带宽。于是委托看起来像一个两难——要么信任子agent报告的"完成"(一场赌博;"报告已完成"与"实际已完成"之间的落差,是agent系统里排第一的错误类型),要么读它的全部输出(付出token代价,并且失去了context隔离这个本来就是委托全部意义所在的东西)。两条路都要付出代价。
但这个两难是假的。出路是一个单一的对象:凭证(certificate)——一份很小、可核验的"它成功了"的证明,代替原始输出跨越这条边界。
为什么凭证便宜:验证的成本远低于执行。 生成一个正确的输出是在一个巨大空间里做搜索(排除每一个错误答案,找到那根针)。验证一个给定的输出则是单点评估(把一个候选答案对照标准检查一遍)。搜索一个空间的代价远高于评估一个点——这正是P与NP之间的不对称:找到一个满足赋值是2^n的搜索,检查一个赋值只需O(clauses);找到因数很难,检查p*q = N只是一次乘法;找到一个证明是不可判定的搜索,检查一个证明是线性的。
什么时候成立,什么时候失效。 这种不对称只对可见证(存在性)的断言成立——"这些测试通过了""spec达标了""这里有一个有效解"。对全称断言——"对所有输入都正确""哪里都没有bug""这是最优的"——不存在有限的凭证(co-NP及以上);验证不是便宜的。所以"完成"能不能被廉价核验,恰好取决于你能把它归约成一个可见证断言的程度。(和Collatz笔记里"到达1"对"全部都到达1"的存在性/全称之分是同一种区分:见证是可核验的,全称命题不是。)
凭证同时也是逐出边界。 Context隔离——让主agent的context保持干净,使它的判断力不会腐化(见context-rot)——和验证并不矛盾,它们其实是同一个动作。跨越子agent边界的是凭证,而不是原始输出:核验上小(验证便宜),token上也小(隔离得以保留)。一个对象,两份收益:子agent边界同时是一条context逐出边界,也是一个验证接口。
剩余的代价——没有什么是免费的。 凭证是一种有损压缩,所以确实存在一个梯度:太薄(done ok)会重新打开信任缺口;太丰富又会把context重新污染。但有一个梯度总好过非此即彼的二选一。设计目标是:每token验证价值最高的凭证——测试、类型、结构化diff、不变量、证明义务。一个尖锐的推论:一段"我做了什么"的散文式总结,是最差的凭证——token多,证明力低,而且是自己生成的,因此可以撒谎(这正是"报告完成"与"实际完成"之间落差的根源)。只有当子任务返回的是一份稠密、机器可核验的凭证——而不是原始输出,也不是自我叙述——委托才会趋近于免费。
而验证者本身也可能出错:更便宜的验证者就是更弱的验证者(一套通过的测试是存在性的抽样,不是全称证明),所以问题最终会落到那个弱的、去相关的审计者身上,以及谁来验证验证者——见audit-as-membrane,以及recognizer-not-generator(轨迹必须携带凭证,从而迫使出现一个对抗性的识别器),其证明论一侧对应lcf-for-labor。
上级: recognizer-not-generator · 同类: audit-as-membrane · gatekeeper-not-driver · tdd-net-popper-mechanized · prosthetic-vs-constitutive-scaffolding