假设一份设备借用规则写着“设备可借用 30 天”,紧跟的脚注却注明“展示样机最长 7 天”。用户问展示样机能否借 30 天时,只检索到正文就回答“可以”,会漏掉决定适用范围的条件。这个虚构例子说明,接入 AI 知识库时,需要保住正文标记与对应注释的关系,而不只是把两段文字分别提取出来。
显示为“1”,内部未必也是“1”
以 DOCX 中的 WordprocessingML 结构为例,正文的脚注引用与脚注内容是不同对象。Microsoft 的 FootnoteReference 官方示例中,第一条脚注显示编号为 1,引用的内部 w:id却是 2。因此,不能把屏幕上的编号直接当作内部 ID,更不能拿它在整个知识库中找同号注释。
引用 ID 的定义要求它对应相应 footnotes 或 endnotes 部件中的注释。这里的“部件”是 DOCX 内部存放注释的结构。脚注与尾注应分开解析,文档身份和版本也要纳入关联范围;两个文件都有标记 1,不代表它们引用同一条说明。
手工输入的星号、表注、页眉页脚、批注和文后参考文献,应按实际结构另行识别。位置接近或符号相同只能作为线索,不能单独证明它是某条正文的原生脚注。
保存一条能往返核对的关联
建议在提取结果中保存一条关系记录:哪份文档、哪个版本、正文哪一段或文字范围出现了标记;显示标记是什么;它属于脚注还是尾注、对应哪个部件和内部 ID;该对象的完整内容在哪里。显示编号用于帮助人阅读,内部关联用于定位对象,两者不要互相替代。
“完整”也不等于读到第一句。官方的 Footnote 和 Endnote 内容定义允许块级内容,包括段落和表格。若例外写在第二段,只保留第一个文字节点仍会漏条件。同时应按注释类型区分普通注释、分隔符、续注分隔符和续注提示,避免把版面辅助内容当成业务规则。
应用可以据此建立两个方向的回查:命中正文时取回对应注释,命中注释时找到它所解释的正文。这是接入系统的索引设计建议,不是说原文件必须自带两套反向链接字段。中间若经过 HTML 或纯文本转换,也要检查关联是否仍在;文字都能搜到,不足以证明连接没有丢失。
让关系检查决定证据能否用于回答
回到借用例子,检索命中“设备可借用 30 天”后,应沿已确认的关联补齐“展示样机最长 7 天”,再判断提问对象是否落在例外范围。答案应同时展示两处依据,并能回到同一个来源版本。注释也可能只是出处、解释或举例,不能一看到脚注就认定它修改了规则。
若只找到标记、找不到注释正文,出现多个无法区分的同号候选,或正文与注释来自不同版本,应将这条证据标为待核对。此时可以说明“已找到 30 天通则,但相关注释尚未确认”,不能给出无条件的“可以借 30 天”。修订文件后,即使显示编号没有变化,也要重新核对关联;旧答案的依据仍保留旧版本。
PDF 与扫描件需要另做检查,不能假定它们提供与 DOCX 一样的引用 ID。pypdf 6.21.4 文档把多页提取时脚注应放在哪里列为待确定的目标,也提醒复杂 PDF 的坐标可能不准确。提取出了字符,不等于恢复了阅读顺序和注释关系;扫描图像还涉及 OCR,而 pypdf 本身不是 OCR 工具。
用错配和缺失样本验收这条连接
可以制作以下无敏感样本,固定解析器版本,逐项保存原文件位置、提取结果、检索证据和回答。下表是验收设计;本文没有运行这些样本,也不提供准确率或效果承诺。
| 构造的样本 | 应核查的结果 |
|---|---|
| 30 天通则加样机 7 天脚注 | 问样机能否借 30 天时,通则与对应例外都进入证据,回答没有漏掉 7 天限制。 |
| 两个文件都有显示标记 1 | 不会把 A 文件正文连接到 B 文件注释;可回查各自文件与版本。 |
| 脚注与尾注出现相同内部 ID | 通过类别和相应部件定位,不能只凭数字合并成一个对象。 |
| 注释有多段、跨页或包含表格 | 后半部分没有丢失,分隔与续注提示没有变成规则;正文和注释能往返核对。 |
| 删除注释、移除关联或更换来源版本 | 能指出缺失或版本错位,并停止该条无条件回答,而不是沿用旧注释补齐。 |
失败记录也要指出断在哪一步:原文件缺注、解析漏内容、转换丢关系、检索没带回,还是回答忽略条件。这样修复有明确对象,不必把所有错误都归因于模型。
评估文档能力时,带上原件和预期关联
石墨办公文档中台私有部署(Shimo Office SDK)可为已有业务系统提供文档预览、编辑、转换与协作能力。具体脚注和尾注的抽取、内部 ID 保留、跨页关联及 AI 检索效果,需要按实际接口与项目方案确认,不能由上述格式说明推定为已支持。
准备含脚注、尾注和修订版本的无敏感原件,标出应关联的正文与完整注释,再预约演示,明确哪些信息由文档接口输出、哪些由接入系统保存,以及如何验收缺失和错配。也可以先看私有化部署方案,了解部署形态与交付范围。