写给机器的纸条

——排版给眼睛,明文给读者:机器时代的公文格式

《给机器一张桌子》把纸条贬了一通:解法不是写更长的纸条,是换一张桌子。但桌子搬好之后,纸条并没有消失——桌上摊开的每一份文件,对机器来说仍然是一张纸条。问题只是从“怎么递”变成了“怎么写”:什么样的文本,机器读起来最不费劲、错得最少?

答案朴素得近乎扫兴:markdown 和 JSON 这一类明文。但这个答案背后的道理值得展开——因为它最后会绕回一个法律人熟悉得不能再熟悉的地方。

包装与明文

给机器的文本格式分两个家族。

第一个家族是排版格式,Word 和 PDF 是代表。它们是写给眼睛的:字号表示层级,加粗表示重点,线框表示表格,盖章表示效力。这些约定人一眼就懂,但对机器来说,它们全是包装——.docx 实际上是一个压缩包,文字裹在层层标签里;PDF 更极端,它本质上是打印指令,记录的不是“这句话是标题”,而是“这些字形出现在纸面的这些坐标上”。机器读排版格式,第一步永远是拆包装,而每一次拆包装都是一次有损转换:层级要靠字号猜,表格要靠线框重建——猜错的地方,错误从第一环就混了进来。

第二个家族是明文。markdown 的井号就是标题,短横就是列表;JSON 的花括号就是字段,每个值都有自己的名字。结构不藏在视觉里,就写在字符上——所见即所是,没有包装可拆,也就没有拆错的机会。

散文与数据

明文内部还有一次分工,恰好对应交付物的两种身份。

markdown 是给散文的。它的结构轻得刚刚好:够机器定位章节,也够人直接阅读——一份文件同时是给人的成稿和给机器的输入,它是人机之间的双语文本。分析、意见、说理,这些以“被人读”为最终归宿的内容,用它。

JSON 是给数据的。它的价值不在可读,在可校验:每个字段有名字,就能逐项检查缺了哪个;每个值有类型,就能机械地验它合不合规。《可以被弹劾的结论》说形式逻辑的价值,是让论证可以被逐段攻击——JSON 就是这件事的文本形态:对一段散文没法跑校验,对一份结构化的主张清单可以。事实清单、引用台账、核对记录,这些以“被机器核”为归宿的中间产物,用它。

一句话分工:给人读的用 markdown,给机器核的用 JSON。成品是前者,成品的底稿和体检报告是后者。

法律人早就会

写到这里,法律读者应该觉得眼熟了。

法条是什么?条、款、项、目——四级编号显式地写在字面上,这是层级结构;“第五百七十七条”——任何一句话都有唯一地址,这是锚点;“本法所称经营者,是指……”——定义条款先下定义再使用,这是字段声明。一部法典的写作规范,把 markdown 的标题层级、JSON 的键值定义、超文本的引用锚点全占齐了——法律是人类最早的结构化写作之一。

为什么?因为法律文本从来不是写给某一个具体读者的。它写给不特定的未来读者:十年后的法官,对面的律师,还没出生的当事人。写给特定的人,可以依赖默契,怎么排版都行;写给不特定的读者,一切都得显式——结构显式、定义显式、引用显式,含义必须全部落在字面上,因为你没有机会当面解释。

机器恰好就是那个最陌生的读者。给机器写作的全部规矩,法律人在给“未来的陌生人”写作时,已经练了两百年。

明文的红利

明文还有一层红利,排版格式给不了:明文是可操作的。

可以逐字检索——一条引用是否真的出现在原文里,一个命令就能验证。可以逐行比对——两个版本之间改了哪些字,一跑差异就是清单;《法律的版本控制》里那套 Git 式的演化只对明文成立,排版格式的修订痕迹锁在各家的私有格式里,明文的差异是任何工具都能算的。可以精确锚定——引用能落到具体的行与字,而不是“大约在第三页中部”。

可检索、可比对、可锚定,这三件事正是机械判据的原料:核验要能跑起来,被核验的对象得先是程序抓得住的文本。排版格式里的承诺只能被人看见,明文里的承诺可以被机器抓住

当然,这不是要求把世界改写成明文。桌上的扫描件还是扫描件,那是视力的活。但机器自己产出的每一份东西——中间结论、核对台账、交给下一环的底稿——没有任何理由裹上包装再交出去。机器给机器递的纸条,生来就该是明文。

好写作的硬约束

最后绕回那个扫兴的答案。

看清 markdown 和 JSON 为什么适合机器,会发现它们没有发明任何新标准——结构显式、术语先定义、每句话可引用、含义落在字面,这些从来就是好写作的标准。文字工作者被劝诫了几百年:把结构理清楚,把指代写明白,别让读者猜。区别只在于,人是宽容的读者,猜得出你的意思,于是这些标准始终停留在劝诫;机器不猜——结构错了就解析失败,指代含混就引用悬空,《断言与劝诫》问的那句“违反了会怎样”,第一次有了当场兑现的答案。

最适合机器读的纸条,就是人类本来就该写的那种文本。给机器写作没有增加任何新要求——它只是把好写作的劝诫,第一次变成了断言。