1. 为什么我们需要重新思考RAG的检索方式?
在金融、法律、医疗等专业领域处理长文档时,传统基于向量相似度的RAG系统常常会遇到一个尴尬局面:检索出来的段落看似相关,但实际回答问题时却总是差那么点意思。这背后隐藏着一个被多数人忽视的关键问题——文本相似度并不等同于逻辑相关性。
举个例子,当你在分析一份上市公司年报时,询问"近三年净利润增长率变化的原因",向量检索可能会返回一堆包含"净利润"和"增长率"字眼的段落。但这些片段往往缺乏上下文连贯性,无法呈现完整的因果关系链条。就像给你几页零散的会议记录,却要你总结出整个项目的推进逻辑。
1.1 传统向量RAG的三大痛点
-
上下文碎片化问题:为了适配embedding模型的最大长度限制,文档通常被切割成256-512token的小片段。这种粗暴的chunking方式会破坏原始文档的论证结构,就像把一本教科书撕成碎片后让学生拼凑知识点。
-
语义漂移风险:基于余弦相似度的检索容易受到术语重复的影响。金融文档中频繁出现的"资产负债表"、"现金流量表"等专业术语,可能导致检索结果过度集中在某些高频章节。
-
逻辑断层缺陷:当问题需要跨章节理解时(比如对比"管理层讨论"和"财务数据"部分的关联性),向量检索无法保持推理路径的连贯性。这就像GPS导航只告诉你每个转弯点,却不说明整条路线规划。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PageIndex的架构设计哲学
PageIndex提出了一种反直觉的解决方案——完全摒弃向量数据库,转而采用基于文档结构的推理式检索。其核心思想是模拟人类阅读专业文档的方式:先看目录定位章节,再逐层深入具体内容。
2.1 树状索引结构的实现细节
项目通过以下步骤构建可推理的文档索引:
- 结构解析阶段:
- 对PDF文档进行目录识别(支持多级标题检测)
- 建立章节间的父子关系树(如图1所示)
python复制class DocumentNode: def __init__(self): self.title = "" # 章节标题 self.page_range = () # 起始页-结束页 self.children =
