祁明的电话打来的时候,陆衍正在整理那份辅助核查清单的最终版本。
他接起来,祁明没有寒暄,直接说:「你昨天发给我那个截图,附件D那件事——我想问你们是怎么发现的。」
陆衍把清单文档推到一边,「怎么问起这个?」
「因为我们这边的助理看了之后说,她自己在核对的时候没有注意到,」祁明说,「然后我就想知道,是你们的工具扫出来的,还是你们的人看出来的。」
这个问题问得精确,陆衍停了一下。
「是人看出来的,」他回答,「工具把两份文件的字段分别列出来,我们在比对的时候发现同一个字段名在两份文件里出现了,内容文本不同,然后单独截图出来发给你的。」
「那工具没有自动标出来。」
「没有,」陆衍说,「工具现在做的是单个文件内部的结构检查。跨文件的比对,这次是手工做的。」
祁明在那头沉默了一下,「我大概理解了。你们是靠识别字段名来判断的,不是靠理解内容。」
「对,」陆衍说,「工具识别结构,不理解语义。两份文件里都出现了「附件D第三条」,工具能标出「两处同名字段,内容文本不同」,但工具不会告诉你这意味着什么,也不会判断哪一份是对的。」
「那如果两份文件都写的是附件D,但一份是保密义务,一份是争议解决,内容语义完全相反,工具也能发现吗?」

「那种情况工具发现不了,」陆衍说,「工具看的是字符串,不是语义关系。如果字段名一样但内容字符不同,工具能标注。如果两个字段名不同,表达的却是相同的概念,或者反过来,字段名相同但语义根本不同——这些都需要人工判断。」
「但这一次,」祁明说,「是靠人工对比截图发现的,不是工具自动标出的。」
这句话说中了。
陆衍没有绕,「是的。这次的发现路径是:工具输出了两份文件各自的字段清单,我们人工做的比对,然后把有差异的地方截图出来。工具是辅助,不是自动完成全部。」
「我知道,」祁明说,停顿了一秒,「我不是在质疑你们,我只是想搞清楚边界在哪里。如果我拿这个发现去跟对方谈,我需要知道这是工具的结论还是人的判断。」
「是人的判断,工具提供了结构化的输入,」陆衍说,「报告里那行话是这样写的:「两处出现附件D第三条定义,内容不一致,供核实。」这是事实描述,不是结论。」
「好,」祁明说,「那我知道怎么用了。」
他又问了一句:「你们之后会在工具里加跨文件比对吗?」
「在考虑,」陆衍说,「这个项目结束之后。」
「那就先这样,」祁明说,「清单我今天晚些时候发给你,最终确认版。」
电话挂断,陆衍在本子上划了一条线,把这段对话的关键词列出来:结构识别,语义理解,人工判断,工具辅助。

四个词,两条边界。
下午三点,卫越过来。
他把笔记本开着放在桌上,「我想了一下跨文件比对这件事,技术上不难,但会让预处理步骤变复杂。」
「说说,」陆衍说。
「现在预处理是每份文件独立建字段映射表,」卫越说,「如果要做跨文件比对,就要在所有文件的映射表上再跑一遍,找同名字段,提取对应文本,然后做差异检测。多一层步骤,多一些存储,多一些要用户确认的地方。」
「会变慢吗?」
「不一定,」卫越说,「主要是会变复杂。用户进来,之前是看一份文件的结果,现在如果有跨文件发现,要在哪里展示?放进同一份报告里?还是单独一块?」
陆衍想了一下,「这个问题先搁一搁,」他说,「我的想法是,这个项目先按现在的方式做完,我们把这次手工发现的跨文件矛盾点记下来——包括是什么类型的矛盾,发现路径是什么,花了多少时间——等项目结束了,再决定要不要做进工具。」
「为什么不现在就做?」卫越没有反对,只是在问。
「因为我们现在还不知道这类问题有多普遍,」陆衍说,「这个项目只有一个附件D的问题。如果后面发现跨文件矛盾是高频问题,那值得做进工具。如果只是偶发的,做进工具可能把流程弄复杂了,发现的东西还没增加多少。」
「那就先积累,」卫越说,「我把这次的发现做个记录,字段类型,文件来源,差异描述。」

「对,」陆衍说,「做一个案例库。」
卫越走之后,陆衍重新把那份辅助核查清单拿出来,改了两个地方:一处是字段描述里有个「相关条款」的说法改成了「本文件中对应条款」,另一处是把提示语里的「如有疑问」改成了「如需进一步核实」。
前者是能力边界,后者是语气。小改动,但改完之后看着更干净。
他发给卫越,说「终稿了,可以给祁明那边了」。
卫越回:「收到。」
晚上九点多,祁明发来消息。
是一个文件附件,标注「跨境项目最终文件清单v1.1」,下面还有一行文字:「按你之前说的,把跨文件的问题也列出来,我这边整理了一下,有三处可能有版本对应关系,你们先看。」
陆衍把清单打开,共60份,按大陆、香港、新加坡分了三个标签,每份文件后面有备注:必覆盖/参考/辅助。最下面单独一个区域,标题是「跨文件关联项(待核实)」,列了三条,每条写了两份文件名和一句简短说明,比如「新加坡主协议§7.2与香港补充协议附件B条款措辞不一致」。
他用的是「跨文件」这个词。
陆衍把这段发给卫越,「他自己把概念用上了。」
卫越回了一个字:「快。」

陆衍在本子上翻到那行「多文件交叉比对,是下一个层级」,在旁边加了一行:「客户先于工具建立了语言。」
清单里有三处跨文件关联项,陆衍逐条看了一遍。
第一条是祁明说的那种,两处条款措辞不一致,但文件编号结构不同,不是同名字段——工具未来要处理这类问题,需要做语义层的比对,不只是字段名匹配。
第二条是日期问题,一份文件的执行日期比另一份的签订日期早了十一天——这个工具现在可以处理,是字段值的差异。
第三条是两份文件都引用了同一份「母协议」,但各自写的条款编号不一样——一个是§4.1,一个是§4.3,这需要去查母协议才能判断是笔误还是实质差异。
三条,性质各不相同。第一条需要语义能力,第二条现有工具能做,第三条需要额外查证。
他把这三条按性质分了类,在旁边标了「已有能力」「待开发」「需人工」三个标签,发给卫越:「明天我们先把第二条跑一遍,第三条问祁明能不能提供母协议。」
卫越回:「好。」
陆衍合上本子,窗外上海的夜还亮着。
六十份文件,三条跨文件关联项,一个案例库的第一页。