PDF 问答有答案却没出处:从提取文本查到引用元数据
PDF 导入成功不代表引用链完整。用公开演示条款检查 OCR、分段、检索、LLM Context 和引用展示,区分模型写的编号与可核对的原文来源。

PDF 已经显示“导入成功”,回答也很流畅,却没有页码,或者点开的来源不支持那句话。这时不要先换更大的模型。先顺着同一条证据检查:原页有没有文字、分段保留了什么、检索返回了什么、模型收到什么,以及界面拿到了哪些来源信息。
本文于 2026 年 11 月 10 日核对 Dify 当前经典知识库文档、1.19.0 正式发布记录及相关 Issue。下面的条款是公开教学素材,不是真实合同;没有运行完整 Dify、OCR 或模型问答,不提供检索准确率。
换成公开网页资料时,同样要保留来源与正文之间的关系。DeepSeek Search & Fetch 研究流程进一步区分搜索摘要、实际读到的页面和可以引用的结论。
用一句有明确出处的话检查整条路径
在临时文档中放入两条不同规则,保留清楚的页标签:
演示文件:demo-policy-v1
第 1 页,条款 A:未开封商品可在签收后 7 天内申请退货。
第 2 页,条款 B:定制商品不适用条款 A,需要人工审核。
问:“定制商品能直接按 7 天规则退货吗?”预期应同时反映 A 的条件和 B 的例外,并能定位第 2 页的条款 B。这里的天数只是演示文件内容,不是法律或本站商业政策。
让测试同时包含例外,比问“退货期多少天”更容易暴露片段遗漏。文档里没有的答案也要试,例如“人工审核要多久”;正确行为应是说明资料未给出,不能编一个天数再加上引用编号。
第一步:看提取结果,不看上传状态
打开对应页面,比较提取文字与原文。扫描件需要 OCR;有文本层的 PDF 也可能出现双栏顺序错误、表格列错位和页眉重复。重点检查否定词、条件、数字和表格表头,它们的小错误可能改变整条规则。
页码还要明确口径:文件的第 2 个物理页面,可能印着“第 1 页”。把物理页序和印刷页码分开保存,避免出现引用看似精确、读者却翻不到的情况。已有PDF 解析与总结工作流介绍基础流程,本篇重点检查信息有没有沿途保留下来。
第二步:直接看检索结果有没有条款 B
在临时知识库使用 Dify 的检索测试。如果问题只返回条款 A,就先查分段、筛选和检索设置;模型还没机会看见例外,改回答提示词不能补出缺失证据。
当前文档提醒,检索测试页调整的设置只对本次测试生效;不要以为试出好结果后,应用节点就自动用了同样设置。经典知识检索节点说明还区分知识库和节点两层检索设置。
重排模型可以重新排序候选片段,不能恢复解析时丢掉的文本。相关接口见Rerank 文档。若是更换 Embedding 后出现异常,应另按向量维度与旧索引检查处理,不把所有引用问题归到向量模型。
第三步:正文传过去了,元数据呢
经典 Knowledge Retrieval 节点输出的 result 是片段数组,包含正文、元数据、标题等信息。官方文档要求在 LLM 节点的 Context 中选择该 result,再在指令中引用 Context。当前文档另有 Agent Knowledge Retrieval;不要把经典节点的路径直接当成另一类节点的操作说明。
Dify #43638的作者使用 1.13 自部署,表示已检索到片段但回答不显示来源。两条后续回复分别做了源码分析和局部函数验证,指出直接绑定结构化结果与传递普通字符串有不同的来源处理路径;回复明确未复现原作者的完整环境。查阅时 Issue 仍 Open。
因此可以把“Context 到底绑定了什么”加入检查顺序,但不能宣称所有“无引用”都由模板节点导致,也不能说升级到 1.19.0 就会修复。先在工作流副本里对照直接绑定路径,保留原流程和数据,再检查当前版本的实际响应。
第四步:验证引用内容,而不只看编号
模型在文本里写出 [1],不等于应用真的有可追溯的引用。检查最终来源中是否包含正确文档、版本和片段,引用所指内容是否支持对应句子;如果页码从未被保存,模型没有依据替系统补出它。
可以按失败位置决定下一步:
| 看到的结果 | 先检查什么 |
|---|---|
| 原文有条款,提取文本没有 | 解析器、OCR、页面类型 |
| 提取有,检索没有 | 分段、筛选、知识库与节点设置 |
| 检索有,模型输入没有 | 节点连接与 Context 绑定 |
| 模型有正文,界面无来源 | 引用元数据、功能开关与响应展示 |
| 有来源但答案误读例外 | 提示和模型处理,逐句核对依据 |
每修一层,都用同一份临时文档重查条件、例外和“资料未说明”的问题。使用 Nbility 时,模型入口按接入基础配置;模型 API 可用不会自动补齐知识库的 OCR、页码或引用链。先把证据送完整,再调整模型,修改才有清楚的方向。

