快速回顾
| 复盘点 | 核心内容 |
|---|---|
| 业务问题 | 农机手册包含表格、结构图和操作示意,纯文本提取容易丢失版面和图文关系 |
| 入库链路 | 上传 → 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 保存状态,失败阶段可恢复 |
- 上传 PDF,将原文件存入 OSS,在 MySQL 创建文档版本和处理任务。
- 投递异步任务,解析 PDF 页数,渲染页面图片并提取原生文本。
- 对扫描页、缺失文本或解析质量不足的页面,使用 MinerU 补充 OCR 和结构化解析。
- 使用 ColQwen 编码页面,将检索向量及过滤元数据写入 Qdrant。
- 校验页面、文本和索引产物,更新任务状态,使处理完成的文档版本可以被检索。
面试回答
文档页面渲染、OCR 和模型编码耗时长,大文件、扫描件的资源消耗差异也很大。如果都放在上传接口里,会长时间占用请求线程,用户也不容易区分上传失败还是后台解析失败。所以接口上传后返回任务标识,后台按资源能力处理,用户查询进度。
这里采用 RabbitMQ,主要因为它的任务队列、消费确认和路由机制适合平台当前的任务分发需求,也与已有技术栈匹配。MySQL 保存任务状态,消息触发执行,产物和状态持久化后再确认消息。临时故障有限重试,损坏文件等确定性错误记录原因并终止无效重试。Kafka 也能承担异步处理,具体取舍要结合平台需求。
实现细节
消费者并发按照页面渲染、OCR 和编码服务的资源能力控制。队列消息确认与业务可检索状态分开,处理成功后同时核对产物与状态,避免只确认消息却丢失阶段结果。
面试回答
PDF 提取到字符不代表内容已经可用于问答。有些是扫描页,根本没有原生文本;有些多栏页面会出现阅读顺序错乱;表格只剩连续文字后,行列、单位和附注关系也容易丢失。
所以我们先提取原生文本,再按页面质量决定是否使用 MinerU 补充 OCR 和结构化解析,重点检查空文本、明显乱码和缺失页面。页面图片始终保留,因为 OCR 提供可读文字,但结构图、操作示意和位置关系仍需要视觉信息。这样把文字解析和页面证据配合起来,避免仅凭一份质量不足的提取文本生成答案。
实现细节
质量判断按页面进行,避免一份 PDF 中部分正常页面掩盖扫描页或异常页。表格解析需要保留行列与注释关系;视觉信息不能仅凭提取出了部件名称就认为已经完整恢复。
视觉检索与证据使用
面试回答
ColQwen 是面向文档页面的多模态检索模型,可以把页面图片编码成多个向量,再与查询做细粒度匹配。农机资料中有大量表格、结构图和操作示意,纯文本提取可能丢掉布局或部件位置关系,页面检索能利用这些局部视觉信息查找相关页。
比如查询液压回路中某个阀的位置,只有部件名称的文本未必能还原它与管路的关系。我们用页面多向量定位证据,再读取对应文字、数值和图例核对。它的代价是页面编码、向量存储和匹配成本更高,因此要同时评估检索效果与资源开销;找到相关页也不等于结论已经正确。
实现细节
常见文本检索与页面检索的差异见表。ColQwen 用于检索页面,不直接承担农机机型分类;具体型号、数值和图例仍需以页面原文核对。
| 比较点 | 常见文本向量检索 | ColQwen 页面检索 |
|---|---|---|
| 检索对象 | 提取后的文本块 | 文档页面图片 |
| 向量表示 | 通常每个文本块一个向量 | 每个页面多个向量 |
| 主要保留的信息 | 提取出的文字语义 | 页面文字、布局和视觉信息 |
| 资源开销 | 通常较低 | 页面编码、存储和匹配开销更高 |
面试回答
查询和文档页面都编码成多向量,通过 MaxSim 后期交互计算相关性。可以理解成查询的每个向量去页面向量中找最相似的一项,再汇总这些最大相似度,这样保留问题不同部分与页面局部内容的匹配关系,不必先把整页压成单个向量。
Qdrant 保存页面多向量,以及文档、版本、页码和组织等过滤元数据。原文件与页面图片仍在 OSS,文档和页面业务关系在 MySQL,召回后要回查原始证据。查询与页面编码保持模型和配置兼容,升级导致向量空间变化时要重建相应索引,不能把不同模型的向量直接混用。
实现细节
MaxSim 先对每个查询向量取页面侧最大相似度,再汇总得到页面分数。向量与元数据承担匹配和初筛,不能代替 OSS 中原文件或 MySQL 中当前有效的版本与访问状态。
面试回答
视觉检索主要负责定位相关页面,原生文本或 OCR 提供模型可读取的文字、表格与注释。比如用户查故障码,先找到故障码表所在页,再读对应行、列标题和适用条件,不能只命中这一页就直接生成结论。
生成模型支持图像时,可以提供页面图片和相关文本;只支持文本时,就提供原生文本、OCR 或结构化解析结果。页面检索向量只用于匹配,不能当作原文证据输入。视觉与文字结果通过稳定的文档版本和页面标识关联,如果两路同时召回,先对齐去重再融合,避免直接相加尺度不同的原始分数。
实现细节
各环节的输入与职责见表。OCR 与视觉检索相互补充,结构图的位置关系可能需要图片,表格数值和条件需要读取正确行列,不能用检索分数代替证据核验。
| 环节 | 输入与输出 | 主要职责 |
|---|---|---|
| 视觉检索 | 查询与页面多向量 → 相关页面 | 定位证据页 |
| 原生文本 / OCR | 页面 → 可读文本或结构化内容 | 提供文字、表格行列及注释信息 |
| 多模态生成 | 页面图片及相关文本 → 回答 | 结合视觉证据解释内容 |
| 纯文本生成 | 原生文本、OCR 或结构化内容 → 回答 | 需先提供可读证据,不能输入检索向量代替原文 |
面试回答
召回前用 Qdrant 元数据按访问范围过滤,缩小候选集合;候选返回后再回查 MySQL 中当前权限、文档状态和版本,防止索引滞后时继续使用已撤权、已删除或不适用的资料。通过检查的页面才能进入生成上下文。
引用绑定具体文档版本和页面标识,并区分 PDF 的物理页序和文档印刷页码,确保用户能定位同一份文件里的同一页。每条结论关联实际支持它的页面,跨页条件保留多个页码。不能因为某页排第一,就把整份回答里的所有结论都引用到这一页。
实现细节
索引元数据负责候选初筛,当前业务记录负责最终放行。原文跳转使用稳定版本与页面关联,显示页码和内部页序需要对应清楚,避免引用同名文件的其他版本。
评测与结果
面试回答
我们从农机手册、技术规范和操作资料中整理问题,覆盖文字参数、表格行列、图示部件、跨页条件,以及无答案或信息不足的场景。题目既有直接查询,也有业务中的自然表达,比如保养周期、适用型号、部件位置和多页操作要求。
每道题标注文档版本、参考答案,以及真正支持回答的证据页或片段,不能只标来源文档,因为召回同一文件里的无关页仍然不算命中。调参集和测试集分开,同一道题的近似改写放在同一组;固定版本、证据和指标口径后比较检索配置,无答案题单独检查澄清和证据不足处理。
实现细节
各题型的标注重点见表。跨页问题保留完整证据页集合,表格标注对应行列、单位与注释,图示题标明支持信息。农机评测集与实习项目的 200 余道养老题分开,不共用题量或结果。
| 题型 | 主要检查 | 标注重点 |
|---|---|---|
| 文本查询 | 条文与参数是否召回 | 文档版本、证据页或片段 |
| 表格查询 | 对应行列、单位与注释 | 能够支持结论的表格位置 |
| 图示查询 | 部件、结构或操作图定位 | 图示所在页及支持信息 |
| 跨页查询 | 多项证据是否覆盖 | 完整证据页集合 |
| 无答案或信息不足 | 是否正确拒答或澄清 | 不足原因,单独评估 |
面试回答
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。
事实 / 代码依据:待补充。