快速结论:这通常发生在 Open WebUI 中用 Docling 等方式索引多页 PDF、并开启“显示文档到相关页”工具调用时:检索分块里的 page 元数据是 0 起算,而 display_file 的参数是 1 起算,模型直接把元数据值传给工具,于是打开并引用前一页。
适用环境:Open WebUI v0.12.5(Docker 安装),Ubuntu 24.04,Docling Serve v1.38.2,检索元数据设置为 RAG_SOURCE_METADATA_KEYS=page,file_id,使用支持原生工具调用的模型(测试者为经 vLLM 服务的 Gemma 4 31B)。Issue 未确认 CUDA、显卡、Python 与 PyTorch 版本。
最快修复方案:暂无确认的一步修复方案。Issue 中已验证的缓解方式是把 page_label 加入元数据键(RAG_SOURCE_METADATA_KEYS=page,page_label,file_id),使标注展示使用 1 起算页码;但 Docling 当时不写 page_label,需等上游修复(#33616)并对已索引文件重建索引。该问题已在 dev 分支处理。
注意事项:用系统提示词让模型“加 1”的做法不可靠,报告中模型仍直接传了元数据值。把 page 统一改为 1 起算虽更长治,但已有向量库中的旧元数据不会自动更新,需重新入库,且可能影响其他读取 page 的逻辑。
问题场景
用户在 Open WebUI v0.12.5 中启用 Docling(Docling Serve v1.38.2)做文档抽取,将多页 PDF 上传到知识库,并让具备原生工具调用的模型(如经 vLLM 提供的 Gemma 4 31B)使用内置工具。当提问答案位于 PDF 某页并要求模型“打开/引用该页”时,模型从检索分块拿到 page: 85 形式的元数据,随后调用 display_file(path="<file_id>", page=85),结果打开物理第 85 页,而相关内容实际在第 86 页。
报错原文
issue: Docling-indexed PDFs have no page_label, so the model opens and cites the page before the right one
Relevant chunk metadata:
page: 85
Observed tool call:
display_file(path="<file_id>", page=85)
The relevant passage was on physical PDF page 86.
原因分析
这是页码起算规则不一致,而非 Docling 独有问题。Issue 维护者在 v0.12.5 代码中核实:各类加载器写入分块的 page 元数据均为 0 起算,例如 Docling 在 retrieval/loaders/main.py 中将 page_no - 1 写入,默认 PDF 加载器用 enumerate 索引,Mistral OCR 与 PaddleOCR-VL 同样使用 0 起算索引。能同时写出 page_label 的加载器会把它写成 1 起算的人类可读页码。
而模型侧通过 RAG_SOURCE_METADATA_KEYS=page,... 在来源块中暴露的是未转换的 0 起算 page;消费端 display_file 的参数文档与前端预览(先丢弃 ≤0 的值,再限制在 [1, pageCount])均按 1 起算处理。两个界面使用同名 page 却语义不同,模型自然倾向“同名同值”直接传递,导致整体偏移一页;首页 page: 0 还会被前端归一化直接丢弃。Docling 的分块未生成 page_label,使模型缺少可用的 1 起算字段,进一步放大了该问题。
环境排查
- 确认 Open WebUI 版本(报告为 v0.12.5)以及是否在 dev 分支复现。
- 确认文档抽取引擎及版本(Docling Serve v1.38.2),或检查是否使用默认 PDF、Mistral OCR、PaddleOCR-VL 等加载器。
- 检查
RAG_SOURCE_METADATA_KEYS的取值,是否包含page,是否缺少page_label。 - 确认触发工具的模型是否支持原生工具调用,并检查实际产生的
display_file参数。 - 核对报错页相邻的检索分块元数据(
page与实际物理页码是否相差 1)。
解决步骤
- 先复核偏移规律:查看打开页与目标页是否固定相差 1,并检查分块元数据中
page的数值,确认是 0 起算偏移而非文档本身缺页。 - 可优先尝试:将环境变量改为
RAG_SOURCE_METADATA_KEYS=page,page_label,file_id,让来源标注携带 1 起算的page_label,重启 Open WebUI 后重新测试。 - 若使用 Docling,由于该版本不写
page_label,需升级到包含 #33616 修复的版本,并对已用 Docling 索引的文件重建索引,否则旧分块仍没有标签。 - 不建议长期依赖系统提示词让模型“加 1”;报告中已验证该做法在观测案例中仍失效。
- 如需从代码层面统一,可关注 Issue 维护者提出的方向(在工具参数文档中说明 0 起算差异、入库时统一为 1 起算、或为工具增加显式 0 起算参数);其中入库统一方案需要对已有向量库重新索引。该 Issue 已在 dev 分支处理。
验证方法
重新提问并要求模型展示答案所在页,检查来源块与工具调用参数:打开页应与答案所在物理页一致(如目标为第 86 页则打开第 86 页),且 PDF 首页不再因 page: 0 被丢弃。若来源中已出现 page_label 且标注页正确,说明缓解措施生效。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug][ROCm]: ROCM_AITER_UNIFIED_ATTN gives wrong output on gfx950 when a layer's KV cache is 2–4 GiB](https://www.chat-gpts.plus/wp-content/uploads/2026/11/62606-98eab7eb-768x403.jpg)
![[RFC]: Request level text and derender output on `/inference/v1/generate`](https://www.chat-gpts.plus/wp-content/uploads/2026/11/56851-3fbe019f-768x403.jpg)