为什么你的合同 RAG 检索全是乱码——一个可复现的解决方案

核心结论: 脏合同 PDF——乱码、连字符换行、重复页眉、近似重复块——会悄无声息地损坏 RAG 效果。在已提交的 8 份合成合同上,清洗将数据质量分从 0.69 提升至 0.94(+0.25),将抽取字段 F1 从 0.14 提升至 0.98(+0.85)——无需 API Key,一条命令即可复现所有数字。

合同 RAG 检索乱码是什么样的?

企业文档常带有 UTF-8/Latin-1 乱码、跨行断词、每页重复的页眉以及近似重复的段落块。检索结果全是噪声;抽取引用的是错误片段。

数据质量分:清洗前 vs 清洗后

解决方案:清洗到类型化文档 IR,再带归因地抽取

所有解析器都汇聚到同一个文档 IR。有序的纯函数清洗流水线依次修复 Unicode 编码、去除连字符换行、剔除重复页眉、去重并规范化空白字符。可解释的质量评分标记仍需人工审核的内容。抽取结果带来源与置信度评分的事实——每个值都是其引用块的原文片段。

抽取字段 F1:清洗前 vs 清洗后

RAG 进不了生产怎么办?自己复现一下

git clone <repo> && cd contract-rag
uv sync --extra dev --extra benchmark
python -m contract_rag.benchmark

你将得到与上文一致的字段 F1(0.14 → 0.98)和质量分(0.69 → 0.94)数字。

诚实说明(重要)

此处的"脏"数据是通过有种子的损坏套件对合成合同模拟生成的,因此本测试证明的是流水线的端到端恢复能力,而非真实 OCR 准确率。在真实标注合同(CUAD,需下载)上,同样的清洗将字段 F1 从 0.33 提升至 0.70。如果你的 PDF 本身是扫描件,恢复效果会更明显。

免费诊断:获取你的合同质量报告

如果你的 RAG 在真实合同上检索出的全是乱码,我们可以用你的一份脱敏文档运行这套前后对比流程,并展示具体数字。欢迎提 issue 或直接联系我们。