在构建企业级大模型应用(如矿产资源勘查、工程技术规范问答)时,RAG(检索增强生成)系统的核心痛点往往在于 “搜不准、答不对、没法溯源” 。一个优秀的知识库不能停留在简单的“切块+向量检索”上,而需要兼顾高精度多模态解析、混合召回、多级重排及精准溯源。
本文将深入剖析该生产级 RAG 系统的全链路实现,按照从宏观流水线到底层核心算子的顺序,并结合探矿与地质勘查资料的真实业务场景,完整拆解入库编排与性能瓶颈、多格式分流与 PDF 深度解析、结构化切块与双模索引交接、双路混合检索与二次打分以及多模态精准溯源。
核心架构总览
一、 全流程入库流水线与工程耗时剖析(写路径)
文件上传后并非立即同步解析,而是通过异步队列与数据摄取流水线引擎进行解耦。整条入库链路由 Canvas DSL 编排引擎统一驱动,将任务拆解为 6 个状态独立的串行阶段:
-
Task queued / running(排队调度) :任务写入 NATS JetStream 消息队列,由摄取服务的后台 Worker 进程拉取执行。
实战瓶颈洞察:在默认单并发配置下(
max_concurrent_workers = 1),同一时刻仅执行一个任务。生产环境中经常出现“排队等待 7 分钟,实际执行仅 3 分钟”的现象——优化吞吐量的首要抓手是合理调大 Worker 并发度,而非盲目优化单点逻辑。 -
[File](读取元数据) :轻量级前置节点,不加载文件二进制内容,仅秒级读取文件名、存储路径及租户 ID、知识库 ID、语种等运行级元数据并向下游广播。
-
[Parser](解析文件内容) :由文档解析组件从对象存储(MinIO)拉回文件二进制,按后缀分流解析。PDF 走重型 DeepDOC 视觉引擎,办公文档走原生轻量解析器。这是实际执行阶段计算量最大的环节。
-
[Chunker](智能切块) :通过文本分块器将解析出的结构化元素按策略切分为切片,支持通用(general)、问答(qa)、表格(table)、手册(manual)等多种可配模式。
💡 结构化智能切块引擎深度拆解:
在系统架构中,
[Chunker]是连接前端文档解析与后端向量检索的“承重墙”。若采用机械式的“固定长度强行切块”,必然会将一段完整的地质构造描述、一个复杂的钻孔化验表或一条关键的找矿结论从中间腰斩。为此,系统内置了多策略可配的切块模式:-
1. General(通用/标准分块) :
-
核心逻辑:采用“滑动窗口 + 自然语义边界感知”策略,以
chunk_token_size(默认 512 Token)为软上限,优先在自然分隔符(如。、?、!、;、\n)处断开,支持重叠率(Overlap)配置。 -
地质实战:适用于《区域地质背景》等大段连贯的正文,保证长论述平滑拆分为语义完整的 Chunk。
-
-
2. QA(问答对分块) :
-
核心逻辑:专为问答对、规范条文或 FAQ 结构设计,识别“问题(Q)与答案(A)”对齐结构,强绑定在同一切片内。
-
地质实战:适用于《固体矿产资源/储量分类标准问答》。当总工程师提问时,该切片可实现零延迟精准直达。
-
-
3. Table(表格专用分块) :
-
核心逻辑:保持表格结构的完整性绝对不从中间横向切断;若表格行数过多,系统采用“表头附着机制”(Row-Header Inheritance),将复杂表头作为上下文前缀自动附加到每一个被拆分出来的行切片中。
-
地质实战:处理百行钻孔编录表或化验表,确保某一行化验数据在切块和检索时依然能通过表头还原其物理含义。
-
-
4. Manual(手册/图书级层级分块) :
-
核心逻辑:依托 DLA 产出的标题层级(H1、H2、H3)按章节拓扑切块,以“完整子章节/技术条款”为边界,并在每个 Chunk 头部自动注入宏观面包屑导航路径(如
[第一章 矿区地质特征] > [第三节 控矿构造])。 -
地质实战:处理几十万字的《DZ/T 0214-2002 勘查规范》,确保大模型不仅知道条文内容,还知晓其所属章节。
-
-
-
[Extractor](LLM 抽取增强) :可选的信息抽取组件。开启后会针对每个切片并发调用大模型(并发上限默认受控为 10)生成高维语义增强信息,以解决“专业文档表述晦涩、与用户口语提问存在语义鸿沟”的痛点:
-
自动关键词(Auto-Keywords) :提炼切片的核心实体与领域术语(例如从岩心录井描述中,提炼出
斑岩型铜矿、钾硅酸盐化、黄铜矿化富集带、钻孔ZK402等高权重词),并在写入索引时赋予更高词项权重。 -
自动模拟问题(Auto-Questions / 逆向 HyDE) :站在提问者视角,预判这段内容能回答什么问题(例如针对矿床成因自动生成:“研究区东段金矿体的控矿构造是什么? ”)。这些生成的问题会与原文一并参与分词和向量化,将“问题搜陈述句”转化为极高匹配度的“问题搜问题”。
-
摘要与结构化标签(Summary & Tags) :将长段落浓缩为核心结论摘要,或按照预设体系自动打上业务标签(如
地球化学勘查、水文地质条件)。 -
工程代价:若未开启此特性,该节点会直接空转跳过;一旦开启,每个切片均需发起大模型请求,会成为仅次于 Parser 的第二耗时大户。
-
-
[Tokenizer](分词、向量化与落盘) :通过分词与向量化组件生成全文检索分词串与稠密向量,最终写入底层可插拔的检索引擎层。
💡 存储引擎对比(Elasticsearch vs. Infinity) :
系统底层并非绑定单一数据库,而是通过统一抽象接口支持两款差异化的引擎:
-
Elasticsearch (ES) :基于 Java/Lucene 的传统分布式全文检索霸主,企业存量集群多、运维生态成熟;但其向量检索能力系后期演进加入,在应对大规模高维向量与全文混合计算时内存开销较大。
-
Infinity:专为大模型与 RAG 打造的 C++ 原生 AI 数据库。它从底层原生支持“稠密向量 + 稀疏向量 + 全文检索”的高速融合查询,单机吞吐性能极高且内存占用远低于 ES。企业可根据基础设施现状无缝切换。
-
二、 核心难点攻坚:多格式分流与 PDF 深度解析
在 [Parser] 阶段,系统面对的是企业内部五花八门的文档格式。为了兼顾解析速度与还原精度,解析调度器采用了“按后缀分流、轻重分离”的设计哲学。
1. 多文档格式解析策略全览
自带结构树的流式办公文档直接走原生语法树(AST/DOM)提取,而无结构或版面固化的 PDF 文档则交由 DeepDOC 视觉流水线攻坚:
| 文档类型 | 包含后缀 | 核心解析方式与处理策略 | 计算开销 |
|---|---|---|---|
| 版面固化文档 | .pdf | 走 DeepDOC 双阶段视觉流水线(OCR + DLA 版面分析 + TSR 表格识别),提取文本、表格、图片及精确页码坐标 | 极重(CPU 密集型) |
| 字处理文档 | .docx, .doc | 基于底层 XML 结构树(AST)直接按顺序提取段落文本、大纲层级、内嵌表格(转为 HTML/结构化块)及内嵌图片 | 轻量(毫秒/秒级) |
| 电子表格 | .xlsx, .xls, .csv | 按工作表(Sheet)与行列结构原生读取,支持将表头与数据行关联组装,或转换为 HTML <table> / 键值对文本块,无需跑视觉 TSR | 轻量 |
| 演示文稿 | .pptx, .ppt | 按幻灯片页(Slide)遍历,解析页面内的文本框、形状文本、表格及备注区,按从上到下、从左到右的几何顺序拼接 | 轻量 |
| 网页与标记语言 | .html, .md | 解析 DOM 树或 Markdown AST,剥离 <script>/<style> 等噪声标签,保留标题层级(H1~H6)、列表与表格结构 | 极轻量 |
| 纯文本 | .txt | 自动探测字符编码(UTF-8 / GBK 等),直接按自然换行符与分隔符流式读取 | 极轻量 |
流式办公文档(如 .xlsx 格式的钻孔化验数据表、.docx 格式的野外地质踏勘小结)天然维护了段落与表格的逻辑树,轻量解析器可直接实现 100% 准确的还原。真正让大多数 RAG 系统“折戟”的,是排版自由、缺乏统一逻辑树、甚至混杂历史扫描件的 PDF 地质勘查报告。为此,系统基于 Go 语言完整移植并优化了对齐 Python 原版的 DeepDOC 双阶段深度解析引擎。
2. PDF 阶段一:逐页独立并行流水线
PDF 进入解析器后,首先由页面并发工作池调度,每个页面独立、按序经过 1 个前置探测与 5 个核心步骤。普通 PDF 与扫描件走的是同一条流水线,唯一的分叉点仅在步骤二:
-
前置步骤:提取内嵌字符层 —— 分叉的前提 调用底层 PDF 渲染库(
pdfium)提取页面内嵌字符及其精确坐标。普通 PDF 返回大量逐字符的坐标对象(此时尚无“行”的概念);扫描件则返回空。同时计算中位字符高/宽(供后续合并段落判断字号)、英文页判定,以及扫描噪声页判定——识别出表面有字符层但实为乱码噪声的“假文字层”PDF,强制按扫描件处理。 -
步骤一:渲染 216 DPI 位图 —— 视觉模型的统一输入 无论是否有文字层,渲染引擎都会将该页转换为 216 DPI 的位图。这是因为后续的行框检测(Det)、版面分析(DLA)和表格识别(TSR)全部是视觉模型,只看像素,不看文字层。
-
步骤二:获取“行级文本框” —— 唯一分叉点 系统根据页面是否具备干净的内嵌字符层(有字符、非扫描噪声且非乱码页),动态分流至两条处理路径(详见下方对比表)。
-
步骤三:DLA 版面分析 —— 赋予语义角色 对整页位图运行一次版面检测模型,输出 10 类版面区域框,并将版面角色标签映射写回步骤二产出的文本框上(插图区域还会补入一个合成框占位)。
-
步骤四:TSR 表格结构识别 —— 拆解复杂网格 仅当步骤三 DLA 检出表格(
table)区域时触发:从页图裁出表格图像 运行 TSR 模型识别行、列、表头及跨行列合并单元格 将单元格组装成网格,并用步骤二的行框文字填格子(填不出的空格再单独裁图补跑 OCR) 为每个文本框打上行列位置注释,供后续组装使用。 -
步骤五:零产出放大重试(Zoom Retry) 若整页跑完前 4 步后一个框都未产出(通常因原图分辨率过低或字迹极小),则触发放大重新渲染并重跑 OCR + DLA。
3. 三大核心难点与架构设计拆解
在逐页流水线中,有三个决定系统性能、稳定性与准确率的关键设计:
难点 A:普通 PDF vs. 扫描件的成本与路径分叉(第 2 步拆解)
| 处理维度 | 普通 PDF(框内字符归并复用) | 扫描件 / 乱码页(全量视觉检测与识别) |
|---|---|---|
| 核心思路 | 文字层有字但没有“行”结构,视觉模型有“行框”但识字慢——用检测框圈定内嵌字符 | 纯图片无文字层,必须走完整的“检测 + 识别”视觉链路 |
| 执行步骤 | 1. 位图跑 OCR Detect 得到行级四边形框 2. 按坐标重叠度将内嵌字符归并进对应的行框 3. 框内有字直接拼串;仅空框或特殊字体编码失败的行(如地质年代生僻字、矿石化学分子式)才裁图跑 OCR Recognize 补漏 | 1. 位图跑 OCR Detect 得到行级框 2. 每个框做透视矫正裁图(高宽比大于 1.5 的竖排块额外生成顺/逆 90° 候选图,常见于地质柱状图侧边栏) 3. 按宽高比排序,每 16 张一批全量跑 OCR Recognize,取置信度最高的方向输出 |
| 单页推理成本 | 1 次渲染 + 1 次 Det + 1 次 DLA(+每表 1 次 TSR),Rec 识别调用趋近于 0,极快 | 在普通 PDF 基础上多跑 N 次 Rec(N = 页面行数) ,几百行的页面需数十批次推理,是扫描件慢的根源 |
💡 架构辨析:内置 DeepDoc 专用模型 vs. 界面 VLM 增强插件
四个内置 DeepDoc 模型(ONNX) :随产品打包的基础设施(Det、OCR Rec、DLA、TSR),经 ONNX Runtime 在 CPU 本地进程内推理,无需配置、零 Token 费用。它们只负责“定位框、认字、标版面、拆表结构”,不理解图片画了什么(只知道这里是
figure,不知道画的是断层剖面还是矿区交通图)。外接 VLM 增强插件(如 GPT-4o-mini) :租户级远程 API 配置。在解析完成后,将 DLA 标出的插图/表格裁图发给 VLM,让其用自然语言描述画面内容(例如输出:“图3-2 展示了北东向 F1 逆断层切穿花岗斑岩体的剖面关系,主矿体赋存于断层下盘破碎带中”),转化为可检索切片。不配 VLM 主流程照常运转,仅缺失图表语义检索能力。
难点 B:DLA 版面分析的 10 大语义标签(第 3 步拆解)
版面分析模型输出的类别索引严格映射自版面标签定义表中的 10 类语义角色:
| 编号 | 标签名称 | 语义含义 | 下游流水线处理策略 |
|---|---|---|---|
| 0 | title | 标题(章节名、文档大标题) | 写回文本框版面属性,在段落组装时标识层级与标题段 |
| 1 | text | 正文(普通段落文字) | 默认主体内容,参与常规的纵向段落合并 |
| 2 | reference | 参考文献(文末引用条目区) | 标记为参考区,与主体正文隔离处理 |
| 3 | figure | 插图/图片区域(地质图、柱状图等) | 合并为独立图区块,补入合成框并裁图保存 |
| 4 | figure caption | 图注(如“图 1:矿区地质略图”) | 不独立成段,在组装阶段自动贴回相邻的 figure |
| 5 | table | 表格区域(如探矿工程一览表) | 触发第 4 步 TSR,裁图识别行列网格、表头与跨行列合并单元格 |
| 6 | table caption | 表注(如“表 1:矿石品位分析表”) | 不独立成段,在组装阶段自动合并到对应的 table |
| 7 | table caption | 表注(同 6,协议保留重复项) | 同编号 6 |
| 8 | equation | 公式区域(如储量估算数学公式) | 标记为独立公式块,避免被纵向合并逻辑揉进普通正文段落 |
| 9 | figure caption | 图注(同 4,协议保留重复项) | 同编号 4 |
-
为什么编号 4/7/9 存在重复? 该标签表是严格对齐 Python 原版 DeepDOC 模型的线上协议(Wire Contract) 。原版模型在训练合并类别时未修改输出层维度,因此工程移植版必须原样保留重复槽位以兼容模型权重。
-
核心价值:OCR 仅解决“字是什么”,而这 10 类标签解决了 “这块内容在文档里扮演什么角色” ,是区分版面分析与纯文字识别的分水岭。
难点 C:防内存暴涨的三重硬核防护(第 5 步拆解)
在第 5 步放大重试(Zoom Retry)中,位图内存随放大倍率呈平方级增长。面对病态扫描页,若直接扔进底层渲染器,会耗费数分钟分配本地内存甚至直接触发 OOM(内存溢出崩溃)。
⚠️ 地质大图 OOM 真实算账示例:
在探矿资料归档中,报告末尾常常附有 A0 超大幅面的《1:10000 区域地质地形图》或《勘探线联合剖面图》 (物理尺寸约 英寸)。
首轮渲染:按基础 216 DPI 渲染,像素约为 (受底层钳制实际已接近预算上限)。
灾难性的无保护放大:如果因为图面空白多、图例字太小导致首轮“零产出”而触发比如 3 倍放大重试(648 DPI) ,宽高各乘 3,总像素将暴增 9 倍达到 !
内存崩溃:仅这一张未压缩的 RGBA 位图就需要占用 的连续原生内存;算上新旧位图短暂并存以及 ONNX 视觉模型推理时的中间特征张量,单页瞬时内存消耗会突破 4~5 GiB。若此时工作池恰好有 4 个并发 Worker 同时处理类似的折页大图,瞬时近 20 GiB 的内存洪峰会瞬间击穿容器内存上限导致进程被 OOM Kill。
系统为此构筑了三重防线:
-
窄触发与倍率封顶:仅首轮“零产出”页面才触发重试;且重试倍率受 9.0 倍上限硬性封顶。
-
渲染前像素预算预检:在进入底层渲染器分配内存前,先用首轮宽高乘以放大倍率的平方预测新位图大小。一旦超过 48M 像素(约 4800 万像素) 预算,直接放弃重试并保留首轮结果,将上述地质折页大图的危险内存分配直接拦在门外。
-
渲染器内部兜底钳制:底层 PDF 渲染引擎内部自带终极防线,若计算出的像素超限则自动按比例下调分辨率缩放比(
scale),确保任何单次渲染产出的位图绝不可能超过 48M 像素(约 192 MiB RGBA) 。整个解析池的内存峰值被严格收敛在并发 Worker 数 × ~200 MiB的有界安全范围内。
4. PDF 阶段二:文档级全局组装与实战全流程演练
所有页面的文本框、表格与 DLA 区域按页码汇总后,进入文档级版面组装阶段执行跨页全局整理:
-
分栏识别:优先识别双栏/多栏排版并标定列号(必须在去重前执行,防止跨栏的相似短行被误删)。
-
全局降噪清洗:剔除重叠框及背景水印字(如斜体铺满全页的“内部地质资料·严禁外传”);通过跨页统计自动删除页眉页脚(如超过半数页面顶部出现的《XX省XX县金铜矿详查报告》);结合 PDF 书签与形态特征整页剔除目录页(TOC)。
-
段落还原:依次执行同行碎片合并 按分栏排列阅读顺序 英文跨行连字符重连 同角色文本纵向自然段合并。
-
表格收尾与图文对齐:执行跨页表格合并,并将正文流里的零散表格框抽离,替换为结构化的 HTML 表格对象;最后将文本框流转换为最终的结构化段落(
Sections),并将图注、表注精准挂载到对应的图表对象上。
⛏️ 探矿报告解析全流程演练(以《青海省某斑岩铜钼矿床详查地质报告.pdf》为例) :
假设这是一份 1990 年代历史扫描页与现代电子排版混编的 PDF 报告,其中第 42~43 页包含双栏排版正文、一张《图 4-1 矿区物探激电异常平面图》、一个跨页的《表 4-2 钻孔见矿层位及化学分析成果表》以及一个用工业指标估算铜金属量的数学公式:
逐页分流:第 42 页为现代电子页,系统直接用检测框圈定内嵌字符,零 OCR 识别耗时秒出文本,唯独矿石化学式 因特殊字体编码缺失被自动裁图补跑了一次 OCR;第 43 页为早年老地质队的手工盖章扫描页,系统自动切入全量 OCR 路径,并将表格内竖排的“岩石名称”列自动旋转 90° 准确识别。
角色对号入座:DLA 将双栏文字标为
text,将储量计算公式 标为equation独立保护;将激电异常图及下方说明分别标为figure和figure caption。跨页表格缝合:TSR 分别识别出 42 页底部的半张表与 43 页顶部的续表(含“矿体编号”、“钻孔号”、“真厚度(m)”、“平均品位 Cu(%) / Mo(%)”等复杂的双层跨列合并表头)。在全局组装阶段,系统自动剔除了两页中间夹杂的页眉页脚,将两段表格无缝拼接为一个完整的 HTML
<table>,并将表注精准挂载到表头上方。
三、 结构化切块与双模索引构建(数据交接棒)
经过解析阶段处理后,无论是 PDF 还是 Office 文档,都统一转化为了结构化的文本段落(带版面类型与页码坐标)、HTML 表格对象与图片资源。接下来,数据交接棒传给分块器与分词向量化组件:
-
结构化智能切块(
Chunker) :-
常规文本切分:以通用分块器为例,系统按自然分隔符(
\n、。、!、?、;等)和 Token 阈值(默认 512 Token)将文本段合并或切分为语义完整的 Chunk,同时支持配置重叠率(Overlap)与子块分隔符。 -
图表独立保护与坐标继承:HTML 表格与带 VLM 描述的图片区域不会与普通正文混切,而是作为独立切片(或携带上下文窗口)保留,防止《钻孔见矿成果表》被从中间腰斩。同时,当多个 PDF 文本框合并为一个 Chunk 时,它们的页码与矩形坐标(Bounding Box)会以数组形式完整继承到 Chunk 元数据中。
-
-
双模索引与特征落盘(
Tokenizer) : 每个 Chunk(叠加可选的 LLM 抽取关键词/问题后)并行产出两路核心数据:-
全文索引侧:调用底层 C++ 分词器绑定,生成细粒度分词串(
content_ltks/content_sm_ltks)以及标题分词(title_tks),解决地质专有名词的复合匹配问题。⛏️ 地质术语双粒度分词示例:
假设某切片原文为: “北东向韧性剪切带控制了蚀变岩型金矿体的空间产出,钻孔 ZK305 在孔深 215m 处见黄铁绢英岩化碎裂岩。”
-
粗粒度分词(
content_ltks) :产出北东向/韧性剪切带/控制/蚀变岩型金矿体/空间产出/钻孔/zk305/孔深/215m/黄铁绢英岩化/碎裂岩。保证了当用户搜专业长词“蚀变岩型金矿体”时的高精度短语匹配。 -
细粒度二次切分(
content_sm_ltks) :在复合长词基础上进一步拆解出韧性/剪切/剪切带/蚀变/蚀变岩/金矿/矿体/黄铁/绢英岩。这样即便地质员在检索时只输入简写“绢英岩金矿”或“剪切带控矿”,依然能通过细粒度词项实现高召回命中,彻底消除长尾复合词搜不到的问题。
-
-
向量索引侧:按模型最大批处理限制批量调用 Embedding 模型生成稠密向量。系统内置了 Per-chunk 向量缓存机制,结合 Canvas DSL 的节点状态管理,当任务因网络抖动中断重跑时,可直接复用已计算的向量,实现低成本断点续跑。
-
最终写入:分词串、稠密向量、页码坐标元数据,连同用于提升核心权威文档(如最终评审备案版储量报告)排序权重的文档级图特征(PageRank 特征),被一并持久化写入 Elasticsearch 或 Infinity 检索引擎。
-
四、 读路径:双路混合检索与二次打分服务
当用户发起提问时,系统进入核心混合检索服务,通过“引擎层粗召回 + 服务层精算分”的两阶段设计,兼顾高召回率与高准确率:
-
引擎内双路混合召回(Hybrid Retrieval) :
-
稀疏侧(Sparse) :查询构造器对用户问题进行分词,生成全文 Match 检索表达式。
-
稠密侧(Dense) :Embedding 模型将问题转化为查询向量,构造向量 kNN 检索(默认
topK = 1024)。 -
搜索引擎在单次查询请求中同时执行上述两条路径,并通过引擎内置的融合(Fusion)表达式拉取初步合并的候选集。
-
-
服务层二次打分(Rescore)与 Rerank 精排: 拿到候选切片后,检索服务层会基于精确的词项匹配度与向量余弦相似度进行显式二次加权打分:
其中 为向量相似度权重(默认
0.3,即默认0.7权重侧重关键词精确匹配,0.3权重由向量辅助语义泛化)。- Rerank 覆盖:若知识库配置了外部 Rerank 交叉编码器模型,系统会对候选集前 N 条(默认 64 条)进行深度语义交叉重排,用 Rerank 得分主导最终排序;未配置则直接采用上述混合加权分。
-
阈值过滤与智能容错兜底:
-
阈值截断:按相似度阈值(默认
0.2)过滤掉低分噪声切片,排序分页后返回 Top Chunks 及文档级聚合统计。 -
降级重试兜底:若首轮检索遭遇“零命中”,系统会自动放宽条件(降低全文检索的最小匹配比例并下调向量阈值)发起二次重试;同时针对纯描述性查询提供跳过关键词限制的纯向量(
VectorOnly)检索模式。
-
⛏️ 探矿检索全链路实战示例:
假设总工程师在对话框提问: “ZK305 钻孔在深部见到的富铜矿体,伴生金的品位是多少?围岩发生了什么蚀变?”
为什么单路检索会失效?
若只用纯向量检索:
ZK305与ZK301、ZK308在稠密向量空间里距离极近,向量模型极易发生“张冠李戴”,把隔壁ZK308钻孔的富铜矿描述排到第一名,导致大模型答错数据。若只用纯关键词检索:报告原文写的是“含铜黄铁矿体”和“青磐岩化、硅化强烈”,并未直接出现提问中的“富铜矿体”和“围岩蚀变”字样,纯关键词匹配容易漏召回。
双路混合 + 二次打分如何破局?
稀疏侧通过分词死死咬住精确工程编号
zk305、伴生、au(金)、品位;稠密侧通过语义泛化捕捉到“青磐岩化/硅化”就是“围岩蚀变”、“Cu 2.85% ”就是“富铜矿体”。在服务层二次打分时,因为默认词项权重占
0.7(),包含精确编号ZK305的切片在termSimilarity上拿到接近满分,瞬间将ZK308等干扰钻孔甩在身后。Rerank 终极一击:前 64 条候选切片送入 Rerank 模型后,交叉编码器深度比对问题与候选切片,将**第 42 页的《表 4-2 钻孔见矿化学分析成果表》(含 ZK305 孔 Au 品位 0.85 g/t)与第 58 页的《ZK305 钻孔地质编录小结》(记载孔深 210~235m 发育强烈硅化与青磐岩化)**精准推至 Top 1 和 Top 2(综合得分均大于
0.85,远超0.2阈值),其余低分切片被干净截断。
五、 生成落地:上下文注入与多模态精准溯源
检索服务最终返回的每个 Chunk,不仅包含文本内容,还完整携带了综合相似度、词项相似度、向量相似度三维评分分量,以及从解析阶段一路透传下来的位置元数据。
上层的对话与智能体(Chat/Agent)运行时模块将这些高价值 Chunks 组装进 Prompt 上下文,驱动大模型生成带引用角标的回答。在前端溯源交互上,系统针对不同文档类型实现了分级精准回链:
-
PDF 与图片文档(像素级高亮溯源) :依托 DeepDOC 贯穿全链路的页码与 Bounding Box 坐标数组,当总工程师点击回答中“伴生金平均品位为 0.85 g/t [引用1] ”的角标时,前端 PDF 预览器会直接跳转至《详查报告.pdf》第 42 页,并在原始《钻孔化学分析成果表》的对应位置绘制高亮矩形框,连跨页表格和激电异常插图都能精准框定,方便工程师当场核对原始地质编录。
-
Office / HTML / TXT 等流式文档(切片级视图溯源) :由于流式文档(如
.xlsx化验台账或.docx踏勘记录)无固定版面坐标,点击角标后前端会精准定位并高亮回链至对应的结构化文本切片或表格视图。
通过这套“多格式深度解析 结构化双模入库 混合召回重排 像素级坐标回链”的完整闭环,该系统真正实现了企业级 RAG 知识库搜得准、答得对、查有据的生产级要求。