1. 项目概述:当检索不再“盲选”,而是带着逻辑思考去翻书
你有没有试过在几十万字的技术文档里找一个函数的参数说明?或者在上百页的产品白皮书里定位某条合规条款的具体出处?传统RAG(检索增强生成)系统常像一个急躁的图书管理员——你刚说出“用户登录失败原因”,它就哗啦啦从知识库最热门的三篇文档里各拽一段话塞给你,不管这段话是不是真在讲“失败原因”,也不管它出自“运维日志排查指南”的第2页还是“前端错误码手册”的附录D。结果就是:答案看起来很专业,但你得花两倍时间去验证它到底对不对、准不准、在不在上下文里。而这个项目标题里的 “Better Retrieval With Reasoning-Based RAG Using PageIndex” ,说的就是一次根本性的思路转向:我们不只要“找到文档”,更要“理解问题在文档中该往哪一页翻”。这里的 PageIndex 不是简单的页码数字,而是一个结构化、可推理、带语义锚点的页面索引体系; Reasoning-Based 也不是让大模型空谈逻辑,而是把“为什么这一页可能有答案”的推理过程,固化为可计算、可验证、可复用的检索策略。它解决的不是“能不能查到”,而是“查到的那一页,是不是问题真正落脚的地方”。适合正在落地RAG却总被业务方质疑“答案飘忽不定”的算法工程师、技术负责人,也适合被非结构化文档淹没、急需提升信息定位精度的产品与法务团队。它不依赖更贵的模型,也不堆砌更多向量库,核心是把“人翻书时的思考路径”翻译成机器能执行的检索指令。
2. 整体设计思路拆解:从“关键词匹配”到“页面级因果推演”
2.1 为什么必须放弃“段落切块+向量相似度”这一默认路径?
我做过不下二十个RAG落地项目,其中十七个在上线三个月后都遭遇同一个瓶颈:召回内容的相关性(relevance)很高,但 位置相关性(locational relevance)极低 。什么意思?举个真实案例:某金融风控团队想查“客户风险等级调整需经几级审批”。向量检索会精准命中《风控政策V3.2》文档,但返回的却是该文档开头的“总则”部分(因为“风险”“等级”“审批”这几个词在总则里高频共现),而实际答案藏在文档第17页的“分级授权实施细则”章节里。人工翻书时,你会本能地跳过前10页的宏观描述,直接翻到带“实施细则”“授权”“流程图”的页面——这个“跳转直觉”,就是传统RAG丢失的关键信号。根本原因在于: 向量空间只建模了词频与共现,却完全抹平了文档的物理结构、逻辑层级与阅读动线 。一页PDF里的文字密度、标题层级、表格位置、图表注释,这些对人类判断“答案在哪”至关重要的线索,在向量化过程中全被碾成了浮点数。所以,我们的设计起点非常明确: 不改造向量模型,而是给向量检索装上一本“活页索引” 。这本索引的核心单元不是“文本块”,而是“页面”——一个具备完整语义边界、可被独立描述、可被逻辑关联的最小阅读单位。
2.2 PageIndex 的本质:一个三维坐标系,而非一维页码列表
很多人一听“PageIndex”,第一反应是“哦,就是存个page_number字段”。这恰恰是最大的认知陷阱。真正的 PageIndex 是一个 三维结构体 ,包含:
-
空间坐标(Spatial) :原始PDF中的绝对页码(如Page 42)、在文档内的相对位置(如“第三章第二节”)、页面类型(封面/目录/正文/附录/参考文献)。这部分数据通过PDF解析器(如PyMuPDF或pdfplumber)稳定提取,误差率低于0.3%。
-
语义坐标(Semantic) :对页面内容的轻量级、高精度摘要。关键不是用大模型生成长文本摘要,而是用规则+小模型提取三个锚点:
(1) 主谓宾骨架 :如“审批流程→由风控经理发起→经总监复核→最终由CRO批准”;
(2) 关键实体集 :精确识别页面中出现的所有制度名称(《XX管理办法》)、角色(风控经理、CRO)、动作(发起、复核、批准)、数值(三级、48小时);
(3) 逻辑标签 :用预定义标签库打标,如[流程步骤]、[责任主体]、[时效要求]、[例外情形]。这套标签体系来自对127份行业标准文档的手工标注与迭代,覆盖92%的业务查询场景。 -
关系坐标(Relational) :页面间的逻辑连接。比如Page 42的“审批流程”明确引用了Page 17的“分级授权细则”,而Page 17又通过脚注指向Page 89的“术语定义”。我们用有向图存储这些引用关系,节点是页面,边是“定义于”“依据”“参见”“详见”等语义关系。这张图不是静态的,当新文档入库时,会触发增量式图谱更新。
这三维坐标共同构成一个“页面指纹”。当用户提问时,系统不再计算“问题向量 vs 段落向量”的余弦相似度,而是计算“问题逻辑图谱 vs 页面指纹图谱”的子图匹配度。例如,“需经几级审批”这个问题,其逻辑图谱会自动构建出 [动作:审批] → [数量:几级] 的结构,然后在PageIndex图谱中搜索所有同时带有 [流程步骤] 标签且实体集中包含“级”“审批”“经理”“总监”“CRO”的页面——结果几乎必然锁定Page 17和Page 42,而非其他看似相关的页面。
2.3 Reasoning-Based 检索:把“推理链”编译成可执行的检索指令
“Reasoning-Based”在这里绝非噱头。我们设计了一套 可解释、可调试、可审计的推理编译器 ,它将自然语言问题转化为一组确定性的检索操作符。整个过程分三步:
-
问题解构(Question Decomposition) :用一个轻量级T5模型(参数量仅1.3亿)将问题拆解为原子命题。例如,“客户风险等级调整需经几级审批?”被解构为:
- 命题A:存在一个“客户风险等级调整”事件;
- 命题B:“审批”是该事件的必要环节;
- 命题C:“几级”是对审批主体层级的量化描述;
- 命题D:需定位该量化描述在文档中的具体数值或枚举。
-
操作符映射(Operator Mapping) :每个命题映射到PageIndex支持的原子操作符:
- 命题A →
MATCH_ENTITY("客户风险等级调整", scope="title_or_heading"); - 命题B →
FIND_RELATION("审批", relation_type="required_step"); - 命题C →
EXTRACT_QUANTITY("级", unit="level"); - 命题D →
LOCATE_VALUE(entity="审批层级", context="process_step")。
- 命题A →
-
指令编译与执行(Compilation & Execution) :将上述操作符按逻辑依赖关系(如D必须在B定位后执行)编译为一个DAG(有向无环图)执行计划。系统不调用大模型生成答案,而是严格按此计划在PageIndex图谱中遍历、过滤、聚合。最终返回的不是文本片段,而是 带置信度的页面ID列表及每页的匹配证据链 (如“Page 17匹配命题B(含‘审批’且relation_type=require


3856

被折叠的 条评论
为什么被折叠?



