聊一聊我从手写合同diff切换到可视化工作流的折腾经历

0 阅读3分钟

说实话,接到合同对比需求的时候,我自信满满。不就是把两份文本标出不同吗?Linux的diff命令都能做。结果第一份测试合同就教我做人——PDF里带着“公司内部使用”的水印,每一页都有。我写的脚本把水印文字也当成正文去比较,于是每一页都报告“内部使用”被删除了又新增了,满屏红色绿色,根本没法看。

我花了两周时间手写了一套相对完整的对比流程:PDF解析、水印过滤、页眉页脚剔除、句子切分、编辑距离对齐、差异高亮。调参调到眼瞎,好不容易在一个合同上效果不错,换一个带表格的合同又全乱了。法务同事看我的眼神从期待变成了同情。

后来研究AI Agent的时候,去看了眼Dify和Coze。它们做对话问答挺顺手,但合同对比这种“比”而不是“问”的场景,没有现成的模板。而且公司数据敏感,不能上传到云上。正愁的时候,在开源社区刷到一个项目,支持私有化部署,还有可视化工作流。节点化设计让我眼前一亮:PDF解析、正则替换、文本对齐、HTML输出——全都能拖拽组合。

我搭的第一个版本大概花了半天。先在画布里拖两个“文件输入”节点,各自接一个“PDF解析”。然后分别过一个“文本清洗”节点,里面写了几条正则,把“水印、页码、保密声明”全删掉。接着是“对齐”节点——我用了一个现成的文本比较节点(社区有人贡献过),按句子粒度做diff。最后是“HTML渲染”,输出一份绿红相间的报告。跑了一下测试合同,效果居然比我手写的脚本好,因为那个对齐节点内部做了更智能的模糊匹配。

最爽的是迭代。法务说“能不能把修改过的条款单独列一个摘要,不用全部展示”,我在渲染节点前面加了一个“差异摘要提取”节点,配置只输出包含增删改的段落标题,十分钟搞定。还有一次需要对比OCR扫描件,我直接在解析节点后面加了一个“OCR纠错”节点,把常见的识别错误(比如“0”和“O”混淆)提前替换掉。换以前,这些都得改代码、重新部署、怕影响其他功能,现在在画布里改改节点配置就行。

缺点也很真实。节点多了以后画布连线像蜘蛛网,我有次不小心把清洗节点连错了顺序,导致水印过滤跑在分词之后,效果大打折扣。还有就是复杂的循环逻辑——比如要分页处理一个大PDF,每页分别清洗再合并——工作流配置起来没有写代码那么直观。但话说回来,日常的合同对比场景基本够用,那些极端情况手动处理也行。

这个合同对比助手现在成了法务部的常用工具。我自己的感受是:可视化工作流最适合那些“流程相对固定,但细节经常调整”的内部工具。它不会取代写代码,但能让你少写很多胶水代码,把精力放在真正难的地方。

你们在搞文档对比或者RAG的时候,遇到过哪些特别坑的格式?来评论区一起吐槽,顺便交流一下解法。