项目
私募基金合同信息抽取与评测链路
面向私募基金合同的字段抽取、证据定位、冲突处理和离线评测工程链路。
这个项目不是公开产品,也不是单纯的 prompt demo。它更接近一条面向业务交付的合同信息抽取流水线:输入私募基金合同 PDF,输出可复核的结构化字段、字段来源和冲突提示,让人工从“通读合同录入”变成“核对系统抽取结果”。
问题定义
私募基金合同通常篇幅长、格式不统一,同一类字段可能出现在正文、附件、份额说明或表格附近。系统需要抽取的不是一段摘要,而是可落库的业务字段,例如份额结构、费率体系、投资策略、参考基准、申赎规则等。
这个问题的难点在于:
- 合同没有固定模板,同一字段在不同合同里的名称和位置都可能变化。
- 部分字段跨页或跨章节出现,简单按页切分容易切断上下文。
- 费率、日期、份额类别等字段对准确性要求高,不能只给一个看似合理的答案。
- 抽取结果需要能被复核,因此必须保留原文出处,而不是只返回结构化 JSON。
技术栈
核心实现以 Python 为主,PDF 文本与版面解析使用 PyMuPDF。抽取部分由 LLM 完成,工程侧重点放在合同分块、提示词组合、结果融合、字段归一化、证据回溯和离线评测。
没有使用公开仓库或在线演示页面,因此这里不提供 repoUrl 或 demoUrl。可公开联系入口保留在 GitHub 主页。
架构与模块
整条链路分为几个相对独立的模块:
-
PDF 解析 从合同 PDF 中提取文本、页码和基础版面信息。因为目标文档以合同正文为主,优先使用轻量解析方式,避免引入不必要的 OCR 成本。
-
多粒度分块 按不同窗口大小切分合同,并在相邻块之间保留重叠页。这样可以覆盖跨页表格、章节尾部补充说明和附件中的字段说明。
-
字段抽取 按字段组组织提示词,让模型在指定文本范围内抽取结构化字段,同时返回证据页码和原文片段。高风险字段会使用两套不同风格的提示词并行抽取,用于交叉检查。
-
融合与清洗 合并来自不同块、不同提示词的候选结果,处理重复、单位不一致、格式幻觉和数字口径冲突。无法自动判断的结果会被保留为冲突项,交给人工复核。
-
离线评测 维护脱敏后的 golden set,用脚本比较抽取结果与标注结果,并按字段归因错误类型。每次调整 prompt、分块策略或融合规则,都可以看到字段级变化。
我的负责部分
我主要负责合同抽取链路的工程设计与实现,包括:
- 设计 PDF 解析与多粒度分块策略。
- 编写字段抽取提示词和结构化输出约束。
- 实现多候选结果的融合、去重、单位规范化和冲突标记。
- 为重点字段补充原文证据回溯。
- 搭建离线评测脚本,用于比较不同版本的抽取效果。
- 根据评测结果迭代 prompt、分块窗口和后处理规则。
难点与处理
长合同无法一次放进模型。
处理方式不是简单截断,而是按多种窗口切分,并保留页级重叠。这样可以兼顾召回和成本,也减少跨页内容被拆散的问题。
同一字段可能有多个候选答案。
例如不同份额类别可能有不同费率,附件里的说明也可能覆盖正文。系统不会强行合并成一个值,而是先保留字段、份额类别、来源位置和冲突状态,再进入融合规则或人工复核。
模型容易输出格式正确但事实不稳的结果。
所以抽取结果必须绑定原文证据。对高风险字段,使用双提示词结果交叉验证;一致时提高置信度,不一致时标记冲突。
评测不能只看整体准确率。
合同字段的重要性不同,错误原因也不同。离线评测会区分标注问题、文本解析问题、召回失败、字段理解错误和格式归一化错误,避免把所有问题都归咎于模型。
离线评测
评测链路使用脱敏合同样本和人工标注结果作为 golden set。每次运行会输出字段级对比,关注三类信息:
- 字段是否被抽到。
- 值是否与标注一致或可接受等价。
- 证据位置是否能支持该字段。
这套评测的价值在于让迭代变得可控。比如某个 prompt 改动提高了费率字段召回,但引入了更多份额类别冲突,评测脚本会把这种变化暴露出来,而不是只凭人工抽样感觉判断。
交付形态
最终交付的是一条可集成到内部业务系统的后端抽取链路,而不是独立 SaaS。一份 80–150 页(约十万字)合同从上传到全部字段产出约 2–3 分钟,抽取覆盖 13 类以上核心字段;高风险模块用双提示词交叉验证(token 约为单提示词的 1.6 倍)。典型输出包括结构化字段、原文证据、置信与冲突标记、待复核项,以及供内部人员查看的处理日志和评测结果。
如果你正在做企业 RAG、知识库、AI 客服或 Agent 工作流,可以通过页面下方微信二维码或邮件沟通,邮箱:contact@aildnc.com。