文档处理、视觉检索与问答评测

快速回顾

复盘点 核心内容
业务问题 农机手册包含表格、结构图和操作示意,纯文本提取容易丢失版面和图文关系
入库链路 上传 → RabbitMQ 任务 → 页面渲染与文本提取 → 必要的 MinerU OCR → 页面编码与索引 → 校验后可检索
数据分工 OSS 保存原文件和页面图片;MySQL 保存文档版本、页面和任务状态;Qdrant 保存检索向量
视觉检索 ColQwen 对页面和查询生成多向量,通过后期交互匹配相关页面
生成依据 读取页面图片或对应文本,校验权限和版本,返回支持结论的页码引用
评测单位 按问题标注标准证据页,区分召回覆盖、排序质量和最终回答质量
测评结果 Recall@10 = 0.945;MRR@10 = 0.798;NDCG@10 = 0.839

面试主回答

我负责文档处理和知识问答链路,上传后通过 RabbitMQ 异步执行 PDF 页面渲染、原生文本提取和必要的 MinerU OCR。OSS 保存原文件和页面图片,MySQL 保存文档版本、页面及任务状态,Qdrant 保存检索向量。

农机资料包含较多结构图、表格和操作示意,纯文本提取容易丢失这些信息,所以我们使用 ColQwen 对页面编码,以多向量匹配查询和页面,找到相关证据。回答时读取页面图片或对应文本,检查文档权限和版本,并返回页码引用。

评测按问题标注标准证据页,分别检查召回覆盖和排序质量,Recall@10、MRR@10、NDCG@10 达到 0.945、0.798 和 0.839。同时区分检索效果与回答质量,进一步检查答案完整性和引用支持情况。

文档处理与异步任务

文档从上传到可检索,经过哪些步骤?

面试回答

上传后先把 PDF 原文件存到 OSS,在 MySQL 创建文档版本和处理任务,再通过 RabbitMQ 交给后台 Worker。后台按页渲染图片、提取原生文本,扫描页或解析质量不足的页面用 MinerU 补充 OCR 和结构化解析,再用 ColQwen 编码页面,把多向量和过滤元数据写入 Qdrant。

处理完成后会校验页面、文本和索引产物,确认完整才把该版本标记为可检索。OSS 保留原文件与页面图片,MySQL 保存版本、页面关系和任务状态,Qdrant 是可重建的检索索引。各阶段持久化进度,失败从对应阶段或页面恢复,稳定标识保证重复执行更新同一份产物,避免重复建页和索引。

实现细节

组件产物与处理顺序见表和步骤。上传成功只代表原文件保存完成,异步任务成功还需确认产物完整。页面、任务和索引之间保留稳定关联,以支持恢复和原文引用。

阶段 主要产物或状态 存储或处理组件
原文件上传 PDF、文档版本与任务记录 OSS + MySQL
页面处理 页面图片、原生文本 后台 Worker;图片进入 OSS
补充解析 扫描页或低质量页面的 OCR / 结构化内容 MinerU
页面编码与索引 页面多向量及过滤元数据 ColQwen + Qdrant
结果校验 产物完整性、任务进度与可检索状态 MySQL 保存状态,失败阶段可恢复
  1. 上传 PDF,将原文件存入 OSS,在 MySQL 创建文档版本和处理任务。
  2. 投递异步任务,解析 PDF 页数,渲染页面图片并提取原生文本。
  3. 对扫描页、缺失文本或解析质量不足的页面,使用 MinerU 补充 OCR 和结构化解析。
  4. 使用 ColQwen 编码页面,将检索向量及过滤元数据写入 Qdrant。
  5. 校验页面、文本和索引产物,更新任务状态,使处理完成的文档版本可以被检索。

为什么用 RabbitMQ 异步处理?

面试回答

文档页面渲染、OCR 和模型编码耗时长,大文件、扫描件的资源消耗差异也很大。如果都放在上传接口里,会长时间占用请求线程,用户也不容易区分上传失败还是后台解析失败。所以接口上传后返回任务标识,后台按资源能力处理,用户查询进度。

这里采用 RabbitMQ,主要因为它的任务队列、消费确认和路由机制适合平台当前的任务分发需求,也与已有技术栈匹配。MySQL 保存任务状态,消息触发执行,产物和状态持久化后再确认消息。临时故障有限重试,损坏文件等确定性错误记录原因并终止无效重试。Kafka 也能承担异步处理,具体取舍要结合平台需求。

实现细节

消费者并发按照页面渲染、OCR 和编码服务的资源能力控制。队列消息确认与业务可检索状态分开,处理成功后同时核对产物与状态,避免只确认消息却丢失阶段结果。

已经提取文本,为什么还需要 MinerU?

面试回答

PDF 提取到字符不代表内容已经可用于问答。有些是扫描页,根本没有原生文本;有些多栏页面会出现阅读顺序错乱;表格只剩连续文字后,行列、单位和附注关系也容易丢失。

所以我们先提取原生文本,再按页面质量决定是否使用 MinerU 补充 OCR 和结构化解析,重点检查空文本、明显乱码和缺失页面。页面图片始终保留,因为 OCR 提供可读文字,但结构图、操作示意和位置关系仍需要视觉信息。这样把文字解析和页面证据配合起来,避免仅凭一份质量不足的提取文本生成答案。

实现细节

质量判断按页面进行,避免一份 PDF 中部分正常页面掩盖扫描页或异常页。表格解析需要保留行列与注释关系;视觉信息不能仅凭提取出了部件名称就认为已经完整恢复。

视觉检索与证据使用

ColQwen 是什么,为什么适合这个场景?

面试回答

ColQwen 是面向文档页面的多模态检索模型,可以把页面图片编码成多个向量,再与查询做细粒度匹配。农机资料中有大量表格、结构图和操作示意,纯文本提取可能丢掉布局或部件位置关系,页面检索能利用这些局部视觉信息查找相关页。

比如查询液压回路中某个阀的位置,只有部件名称的文本未必能还原它与管路的关系。我们用页面多向量定位证据,再读取对应文字、数值和图例核对。它的代价是页面编码、向量存储和匹配成本更高,因此要同时评估检索效果与资源开销;找到相关页也不等于结论已经正确。

实现细节

常见文本检索与页面检索的差异见表。ColQwen 用于检索页面,不直接承担农机机型分类;具体型号、数值和图例仍需以页面原文核对。

比较点 常见文本向量检索 ColQwen 页面检索
检索对象 提取后的文本块 文档页面图片
向量表示 通常每个文本块一个向量 每个页面多个向量
主要保留的信息 提取出的文字语义 页面文字、布局和视觉信息
资源开销 通常较低 页面编码、存储和匹配开销更高

多向量检索怎么匹配?Qdrant 保存什么?

面试回答

查询和文档页面都编码成多向量,通过 MaxSim 后期交互计算相关性。可以理解成查询的每个向量去页面向量中找最相似的一项,再汇总这些最大相似度,这样保留问题不同部分与页面局部内容的匹配关系,不必先把整页压成单个向量。

Qdrant 保存页面多向量,以及文档、版本、页码和组织等过滤元数据。原文件与页面图片仍在 OSS,文档和页面业务关系在 MySQL,召回后要回查原始证据。查询与页面编码保持模型和配置兼容,升级导致向量空间变化时要重建相应索引,不能把不同模型的向量直接混用。

实现细节

MaxSim 先对每个查询向量取页面侧最大相似度,再汇总得到页面分数。向量与元数据承担匹配和初筛,不能代替 OSS 中原文件或 MySQL 中当前有效的版本与访问状态。

视觉检索和 OCR 是什么关系?

面试回答

视觉检索主要负责定位相关页面,原生文本或 OCR 提供模型可读取的文字、表格与注释。比如用户查故障码,先找到故障码表所在页,再读对应行、列标题和适用条件,不能只命中这一页就直接生成结论。

生成模型支持图像时,可以提供页面图片和相关文本;只支持文本时,就提供原生文本、OCR 或结构化解析结果。页面检索向量只用于匹配,不能当作原文证据输入。视觉与文字结果通过稳定的文档版本和页面标识关联,如果两路同时召回,先对齐去重再融合,避免直接相加尺度不同的原始分数。

实现细节

各环节的输入与职责见表。OCR 与视觉检索相互补充,结构图的位置关系可能需要图片,表格数值和条件需要读取正确行列,不能用检索分数代替证据核验。

环节 输入与输出 主要职责
视觉检索 查询与页面多向量 → 相关页面 定位证据页
原生文本 / OCR 页面 → 可读文本或结构化内容 提供文字、表格行列及注释信息
多模态生成 页面图片及相关文本 → 回答 结合视觉证据解释内容
纯文本生成 原生文本、OCR 或结构化内容 → 回答 需先提供可读证据,不能输入检索向量代替原文

文档权限、版本和页码引用怎么处理?

面试回答

召回前用 Qdrant 元数据按访问范围过滤,缩小候选集合;候选返回后再回查 MySQL 中当前权限、文档状态和版本,防止索引滞后时继续使用已撤权、已删除或不适用的资料。通过检查的页面才能进入生成上下文。

引用绑定具体文档版本和页面标识,并区分 PDF 的物理页序和文档印刷页码,确保用户能定位同一份文件里的同一页。每条结论关联实际支持它的页面,跨页条件保留多个页码。不能因为某页排第一,就把整份回答里的所有结论都引用到这一页。

实现细节

索引元数据负责候选初筛,当前业务记录负责最终放行。原文跳转使用稳定版本与页面关联,显示页码和内部页序需要对应清楚,避免引用同名文件的其他版本。

评测与结果

离线评测集怎么构建?

面试回答

我们从农机手册、技术规范和操作资料中整理问题,覆盖文字参数、表格行列、图示部件、跨页条件,以及无答案或信息不足的场景。题目既有直接查询,也有业务中的自然表达,比如保养周期、适用型号、部件位置和多页操作要求。

每道题标注文档版本、参考答案,以及真正支持回答的证据页或片段,不能只标来源文档,因为召回同一文件里的无关页仍然不算命中。调参集和测试集分开,同一道题的近似改写放在同一组;固定版本、证据和指标口径后比较检索配置,无答案题单独检查澄清和证据不足处理。

实现细节

各题型的标注重点见表。跨页问题保留完整证据页集合,表格标注对应行列、单位与注释,图示题标明支持信息。农机评测集与实习项目的 200 余道养老题分开,不共用题量或结果。

题型 主要检查 标注重点
文本查询 条文与参数是否召回 文档版本、证据页或片段
表格查询 对应行列、单位与注释 能够支持结论的表格位置
图示查询 部件、结构或操作图定位 图示所在页及支持信息
跨页查询 多项证据是否覆盖 完整证据页集合
无答案或信息不足 是否正确拒答或澄清 不足原因,单独评估

Recall@10、MRR@10 和 NDCG@10 分别说明什么?

面试回答

Recall@10 看前十条结果找全了多少标准证据;MRR@10 看第一个正确结果有多靠前;NDCG@10 进一步看高相关内容在整体排序中的位置,按名次折损收益,再与理想排序比较。

比如一道题有三个证据页,前十条找到了两个,Recall 就是三分之二;第一条正确结果在第二位,倒数排名就是二分之一。项目测得 Recall@10 为 0.945、MRR@10 为 0.798、NDCG@10 为 0.839,这些反映检索覆盖和排序,不能当作回答准确率。最终问答还要检查事实、条件和引用是否正确,以及链路耗时和成本。

实现细节

计算含义见表。MRR 在前 10 条没有相关结果时记 0,再按题平均;NDCG 可以采用二元或分级相关性,但对照时标注与计算方式必须一致。无答案题单独检查拒答和澄清,不混入普通证据召回分母。

指标 计算含义 关注点
Recall@10 前 10 条命中的标准证据数 ÷ 标准证据总数,再对问题取平均 证据是否找全
MRR@10 第一个相关结果排名的倒数;前 10 条无相关结果记 0,再取平均 用户多久能看到第一个正确结果
NDCG@10 对相关性收益按位置折损,再除以理想排序的收益 高相关结果是否整体排在前面

易混点与回答检查

易混点:视觉检索负责找页,OCR 提供可读内容;检索向量不能替代原文证据;检索指标不等于回答准确率。

回答检查

补充记录

简历表述:RabbitMQ 异步处理 PDF 页面渲染与文本提取,MinerU 补充 OCR;ColQwen 实现页面视觉检索,校验文档权限和版本并生成带页码引用的回答;Recall@10、MRR@10、NDCG@10 分别为 0.945、0.798、0.839。

事实 / 代码依据:待补充。

复盘手记

搜索笔记

输入关键词,搜索所有主题与问答。