断言与劝诫
——给机器立的规矩,只有会失败的那部分算数
每个律师都见过这样两种条款。一条写:“乙方应积极配合甲方开展相关工作。”另一条写:“乙方逾期交付的,每日按合同总价万分之五支付违约金。”表面上都是义务,但律师一眼就能分辨哪条是真的——没有违约责任的义务条款,是许愿。 前一条违反了什么都不会发生,它存在的意义是让双方在签字时感觉良好;后一条违反了会掉钱,所以它才配叫规矩。
这个区分是法律最古老的常识之一。奥斯丁给法律下的定义干脆就是“以制裁为后盾的命令”——没有制裁跟着的不是法律,是道德劝告。程序法里甚至有一对现成的术语:训示期间与不变期间。前者过了没有后果,法官迟延宣判并不导致判决无效;后者过了权利消灭,上诉期一过,再好的理由也救不回来。霍姆斯的坏人视角把这件事说到了底:一条规则的真实含义,是违反它时会发生什么。违反之后什么都不发生的规则,含义为零。
现在把这双眼睛转向一个新行当:给 AI 立规矩。
Prompt 是弱劝诫
今天指挥一个 AI 工作流的标准方式,是在提示词里写规则:“必须引用原文,不得杜撰”“每个要件都要有对应事实”“不确定时必须说明”。字字铿锵,句句“必须”。但用法律人的眼光看,这些全是第一种条款——写在 prompt 里的规则,违反了什么都不会发生。
它弱在三个地方。
第一,概率合规。模型不是执行指令,模型是在指令的影响下采样。一条“必须”改变的是输出的分布——把概率推向合规的方向——而不是设定边界。它大多数时候被遵守,而这恰恰是最危险的性质:大多数时候。
第二,静默失败。合同条款被违反,至少对方会发现;prompt 被违反,没有任何声音。一条杜撰的引文和一条真实的引文,在文面上一样流畅、一样自信。劝诫最阴险的地方不是会被违反,而是违反了没人知道。
第三,自报无效。你可以在 prompt 里追加一条:“完成后自查以上要求是否满足。”模型会答复:已检查,全部满足。那不是检查报告,那是从分布里采样出来的安慰话——它说“检查过了”和它杜撰引文,用的是同一套生成机制。用劝诫去核验劝诫,等于让被告给自己写无罪判决。
断言:会失败的规矩
工程界对付这个问题的办法,和合同法的办法同构:给规矩配上后果。这类会失败的规矩,程序员叫它断言——写成代码的检查,违反即报错。它的全部尊严在于两点:失败要响,失败要挡路——检查不清零,成果不出门。
一条规则能不能从劝诫升格为断言,取决于它能不能被机械地验证。而能验证的,比想象中多得多。
“必须引用原文”可以升格:把原始材料落成文本,每条事实主张附上逐字引文,几行代码做子串比对——引文在材料里找不到,红灯,流程停下。杜撰引文这个大模型最著名的恶习,在这道检查面前物理性失效。“每个要件都要有对应事实”可以升格:大前提列出的构成要件逐一核对有无对应的涵摄,少一个即失败——“以偏概全”从文风问题变成可检出的结构缺陷。“不确定时必须说明”也可以升格:存在没有坐实的要件时,结论必须是条件式语气,确定式直接拦下——依据变薄而语气未降,不是措辞瑕疵,是机械可识别的红灯。
甚至“过程”也可以断言。要求推理在事实与规范之间往返迭代(《往返的目光》),怎么知道它真的往返过,而不是一遍写完、再补一句“经反复推敲”?办法是:每一轮把状态快照落盘,由脚本比对相邻两轮的差异——收敛不收敛,不听它说,重新算。复算,不询问——这是断言与劝诫在方法上的分水岭。
断言还有一个劝诫永远给不了的性质:它的失败会回流。报错信息进入下一轮生成,模型在“这条引文脱靶”的具体指控下重写——这正是本系列写过的考场效应(《写不下去的判决书》《可以被弹劾的结论》),只不过这一次,坐在考场里的是机器。知道终点有一道不讲情面的检查在等,和知道终点没人检查,生成出来的东西是不一样的。
三级阶梯
劝诫和断言之上,其实还有第三级。合同法里比违约责任更硬的是交易结构:怕对方挪用资金,与其写“不得挪用”(劝诫),或写“挪用即赔”(断言),不如把钱放进共管账户——挪用在结构上不可能发生。工程里的对应物是类型系统与架构:最好的检查,是让非法状态根本无法表示。
于是两边各有一架三级阶梯:许愿的条款——会失败的条款——违约不可能的结构;注释——断言——类型。每上一级,规矩就少依赖一分自觉、多依赖一分必然。而 AI 时代的讽刺在于:一个握着全部三级工具的行业,管理史上最不可靠的执行者,用的却主要是第一级。所谓“提示词工程”,按合同法的标准衡量,大部分内容是在精心措辞一份没有违约责任的合同。
纪律因此只有一句:凡是能下沉的规则,全部下沉——能做进结构的做进结构,能写成断言的写成断言,prompt 里只留真正需要判断、无法机械核验的东西。留下的不是残余,是精华:劝诫的正当用途本来就是引导判断,而不是保证行为。
断言兜不住的
最后要说清边界,否则这套办法会变成新的迷信。
迪杰斯特拉的名言在这里原样适用:测试只能证明缺陷存在,不能证明缺陷不存在。断言验得出引文脱靶,验不出定性错误;验得出要件缺漏,验不出那条逐字命中的事实其实答非所问;验得出往返确实发生过,验不出目光落下去的那一刻看没看对。断言兜的是下限:它保证目光走过了每一站、每一步都钩住了实物——至于看对了没有,仍然是判断,而判断该归谁,《断点》已经说过了。
但兜住下限本身就是大事。法律人不会因为违约金条款保证不了对方真心履约,就退回去写“应积极配合”。
给机器立法和给人立法,原来是同一门手艺:写“应当”容易,配上后果才算数。写在 prompt 里的是道德期许,写进校验器的才是法律——这件事,法律人本来就该是最懂的人。