ChatGLM多文档对比怎么找差异
用ChatGLM做多文档对比,很多人第一反应是“把文档丢进去,让它自己找差异”。但实际操作下来,你会发现,如果不按正确的方法来,模型要么顾此失彼,要么给出模棱两可的答案,根本达不到你想要的效果。

现在的问题是,如何让ChatGLM一次性识别两份合同、三份需求文档或五份不同版本的SOP之间的真实差异?不是靠人工逐字比对,也不是依赖那些只能标红删改的静态工具——在这些场景下,模型必须理解语义、定位逻辑冲突、识别隐含矛盾,而非简单字符串匹配。这才是真正的挑战。
确认模型是否支持多文档长上下文
打开Ollama控制台(http://localhost:3000),点击「Models」,查看已拉取模型列表。确保看到的是
【ChatGLM3-6B-128K】
【GLM-4-9B-Chat-1M】
ollama pull chatglm3:128k或ollama pull glm4:1m下载对应模型。
这一步不可跳过:标准ChatGLM3-6B在输入第二份文档时,会自动覆盖第一份的上下文,导致“只记得后半段,忘了前半段”,根本无法做跨文档对比。这不是性能问题,而是模型能力边界的问题。
准备文档并统一格式
将待比对的所有文档转为纯文本(.txt)或Markdown(.md)格式。PDF需先用MinerU或ChatGLM-OCR提取文字——
【MinerU对中文密集排版和表格识别准确率超98%,优于ChatGLM-OCR】
删除页眉页脚、页码、无关水印;保留标题层级(如“# 服务范围”“## 付款条件”);每份文档开头加一行标识,例如:[文档A] 软件服务合同(2026年V3修订版)。
别直接把PDF文件丢给模型——它无法解析二进制结构,会把乱码当正文,导致关键条款被误读。曾经有用户这么干过,结果模型把PDF的渲染指令当成了合同条款,闹出了笑话。
构造精准对比提示词
方法一:结构化指令(推荐用于法务/合规场景)
输入:
请严格基于以下5份文档内容,完成三项任务:
1. 列出所有存在表述差异的核心条款(如“违约责任”“知识产权归属”“终止条件”),注明每份文档中的原文句子;
2. 对每处差异标注类型:A=法律效力冲突、B=数值不一致、C=责任主体模糊、D=无实质影响;
3. 针对A类差异,指出哪份文档的表述更符合《民法典》第584条关于违约损失赔偿的规定,并说明理由。
方法二:角色驱动指令(适合技术文档协同)
输入:
你现在是资深SRE工程师,正在评审三份系统架构文档([文档X]初稿、[文档Y]技术委员会修订版、[文档Z]上线前终版)。请逐项检查“鉴权模块”描述,找出:
① 哪些接口字段在[文档X]中有定义,但在[文档Z]中被删除且未说明原因;
② [文档Y]新增的token刷新逻辑,是否与[文档Z]第4.2节“会话有效期”存在时间单位冲突(小时vs分钟);
③ 所有文档均未提及但根据PCI DSS标准必须实现的双因素认证触发条件,请直接补全建议句。
别写“请对比一下这些文档”——这种模糊指令会让模型默认做浅层关键词匹配,漏掉第287页脚注里的例外条款。提示词越具体,输出越精准。
执行对比并验证关键差异
将全部整理好的文本+提示词一次性粘贴到Ollama Web UI或命令行:
ollama run chatglm3:128k < combined_input.txt
等待输出后,重点核查三类结果:
• 模型是否引用了具体文档标识(如“[文档B]第5.3条”),而非笼统说“某份文档”;
• 对数值差异(如“24小时”vs“30天”)是否同步给出单位换算(30天=720小时);
• 当发现逻辑矛盾时,是否回溯原文上下文佐证(例如指出“尽管[文档C]第3条写明免责,但其附件2第8款已排除该情形”)。
若输出中间出现“可能”“或许”“推测”等模糊表述,立刻重试——