基于推理的检索如何在结构化文档上击败相似度搜索以及如何使用 PageIndex 构建它你向AI助手询问一份200页合同的问题它自信满满地给出回答结果却是错的。它提取了正确主题的文本却选错了条款而模型从头到尾都没有察觉。这不是模型问题而是检索问题。之所以会发生是因为传统向量RAG的核心假设——文本看起来相似就等于内容相关——在任何有结构的文档上都会失效。现在有一种全新思路无向量RAGVectorless RAG。不需要嵌入向量不需要向量数据库不需要分块流水线。系统不再搜索相似文本而是像人类专家一样推理出答案在文档中的位置。本文将解释这一概念、它在哪些场景优于传统RAG以及如何使用开源库PageIndex构建它——大约只需50行Python代码。什么是传统RAGRAG即检索增强生成Retrieval-Augmented Generation。它只解决一个问题AI模型不知道你的私有文档。它们在公开数据上训练并固定参数。RAG通过在提问时从你的文档中提取相关信息并交给模型解决了这一问题。两阶段流程阶段一构建索引仅执行一次文档被切分为300~500词的文本块每个块被转换为一组数字称为嵌入向量embedding——代表文本语义的数学“指纹”所有向量存入向量数据库如Pinecone、Weaviate、pgvector专门用于快速查找相似向量阶段二查询每次提问执行你的问题被嵌入为相同格式的向量数据库返回与问题向量最接近的文本块这些文本块 问题一起送入大模型生成最终答案就是这样。整个流水线只有两步。对通用知识的宽泛问题效果很好但在结构化、专业文档上直接崩溃。它到底在哪里失效问题不在于分块大小或嵌入质量而是更底层的缺陷。向量搜索优化的是相似度而非真实性。当你问“是什么推动了第三季度收入增长”时它会拉出所有提到收入的块而不是真正解释原因的块。**分块会让问题更糟**语义被切断定义在一个块依赖关系在另一个块交叉引用失效。模型最终只能瞎猜因为上下文是残缺的。而且一旦失败你完全无法追溯。你得到的只有相似度分数而不是推理过程——没有任何解释说明为什么检索到这段内容。在金融、法律等领域这是致命缺陷。什么是无向量RAG无向量RAG是一种检索方案它用**大模型驱动的结构化文档推理**完全替代了“嵌入—搜索—分块”整套流水线。核心理念不再把文档转成向量并搜索最接近的匹配而是让大模型阅读文档的结构化地图自主决定打开哪一部分。模型像人类翻阅复杂报告一样**推理文档层级结构**看结构、定位答案可能所在的章节、直接阅读该部分。它去掉了什么无需选择和维护嵌入模型无需部署和查询向量数据库无需调试分块策略不会出现“相似度很高但内容完全错误”的无声检索失败它增加了什么文档树层级化JSON结构每个节点是章节包含标题、页码范围、大模型生成的摘要推理步骤大模型阅读文档树根据问题决定检索哪些节点可追溯答案你能清楚看到检索了哪一章、为什么检索无向量RAG并非适用于所有场景。它专为答案位于特定可识别章节的结构化文档设计 财务报告、法律合同、技术手册、学术论文。对这类文档它生成的答案基于**具体页码**而不是从松散相关的文本碎片中拼凑。PageIndex 是什么PageIndexgithub.com/VectifyAI/PageIndex是实现无向量RAG的开源库只做两件事生成文档树读取PDF构建层级化文档树文档树检索提供基于推理的导航工具它是实现方案不是概念本身。本文用PageIndex演示但“构建树—推理—提取正确章节”的模式可以搭配任何大模型和树生成方法使用。PageIndex 如何实现无向量RAG想象你给一位研究员一份200页的年报并提问。研究员不会逐页阅读而是先看目录定位最可能包含答案的章节翻到对应页码阅读并回答。**PageIndex 完全复刻这一过程**只不过“研究员”是大模型“目录”是从文档生成的结构化JSON树。两步流程步骤1构建文档树索引PageIndex读取文档创建层级树每个节点代表一个章节包含章节标题唯一节点ID页码范围起始页—结束页大模型生成的章节内容摘要子节点子章节文档保留天然结构4.2节知道自己属于第4章引言与结论保持关联没有任何关系被切断。节点示例{ title : Financial Stability , node_id : 0006 , start_index : 21 , end_index : 22 , summary : 美联储监控金融脆弱性... , nodes : [ { title : Monitoring Financial Vulnerabilities , node_id : 0007 , start_index : 22 , end_index : 28 , summary : 美联储的监控方法包括... } , { title : Domestic and International Cooperation , node_id : 0008 , start_index : 28 , end_index : 31 , summary : 2023年美联储合作... } ] }步骤2基于文档树推理当问题到来时大模型只阅读文档树标题摘要不读全文输出thinking大模型一步步导航的自然语言推理过程node_list决定检索的具体节点ID然后只提取这些节点的完整文本。没有余弦相似度只有可审计、可阅读、可验证的显式决策。完整代码教程从零构建我们将对DeepSeek-R1论文建立索引并回答关于其结论的问题。无向量数据库无嵌入模型。你需要PageIndex API Keydash.pageindex.ai/api-keys提供免费额度OpenAI API KeyPython 3.8步骤0安装与连接%pip install -q --upgrade pageindex from pageindex import PageIndexClient import pageindex.utils as utils PAGEINDEX_API_KEY YOUR_PAGEINDEX_API_KEY pi_client PageIndexClient(api_keyPAGEINDEX_API_KEY)PageIndexClient是与服务的连接入口传入PDF生成树传入文档ID返回树用于查询。import openai OPENAI_API_KEY YOUR_OPENAI_API_KEY async def call_llm ( prompt, modelgpt-4o, temperature0 ): client openai.AsyncOpenAI(api_keyOPENAI_API_KEY) response await client.chat.completions.create( modelmodel, messages[{ role: user , content: prompt}], temperaturetemperature ) return response.choices[ 0 ].message.content.strip()关键点async def异步函数多LLM调用可并行不阻塞temperature0结果确定性相同树相同问题相同决策检索需要稳定而非创意同一函数同时处理**树搜索推理去哪和最终回答生成答案**接口统一步骤1下载并索引文档import os, requests, json pdf_url https://arxiv.org/pdf/2501.12948.pdf # DeepSeek-R1 论文 pdf_path os.path.join( ../data , pdf_url.split( / )[- 1 ]) os.makedirs(os.path.dirname(pdf_path), exist_ok True ) response requests.get(pdf_url) with open (pdf_path, wb ) as f: f.write(response.content) print ( f已下载 {pdf_url} ) doc_id pi_client.submit_document(pdf_path)[ doc_id ] print ( 文档已提交: , doc_id)代码说明split(/)[-1]提取文件名os.makedirs(..., exist_okTrue)安全创建文件夹wb二进制写入避免损坏PDFsubmit_document上传并返回文档ID树在服务端异步构建输出示例已下载 https://arxiv.org/pdf/2501.12948.pdf 文档已提交: pi-cmeseq08w00vt0bo3u6tr244g步骤1.2获取文档树if pi_client.is_retrieval_ready(doc_id): tree pi_client.get_tree(doc_id, node_summary True )[ result ] print ( 文档简化树结构 ) utils.print_tree(tree) else: print ( 文档处理中请稍后重试... )is_retrieval_ready检查树是否生成完成node_summaryTrue包含大模型生成的章节摘要LLM靠它判断去哪[result]从响应中取出真实树结构返回结果示例[ { title : DeepSeek-R1 : 激励推理能力... , node_id : 0000 , nodes : [ { title : 摘要 , node_id : 0001 , summary : 介绍两种推理模型... } , { title : 1. 引言 , node_id : 0003 , nodes : [ { title : 1.1 . 贡献 , node_id : 0004 } , { title : 1.2 . 评估结果 , node_id : 0005 } ] } , { title : 2. 方法 , node_id : 0006 , ... } , { title : 5. 结论、局限与未来工作 , node_id : 0019 , summary : 展示关于DeepSeek-R1性能的结论... } ] } ]这就是**可导航的文档地图。**模型像人一样看目录看结构、找候选、直接跳转。步骤2文档树搜索推理发生的地方query 这份文档的结论是什么 # 移除全文LLM只需要标题和摘要做决策 tree_without_text utils.remove_fields(tree.copy(), fields[ text ]) search_prompt f 你将收到一个问题和一份文档的树结构。 每个节点包含节点ID、标题和对应摘要。 你的任务是找出所有可能包含答案的节点。 问题{query} 文档树结构 {json.dumps(tree_without_text, indent2)} 请按以下JSON格式返回 {{ thinking: 你一步步判断哪些节点相关的推理过程, node_list: [node_id_1, node_id_2, ...] }} 直接返回最终JSON结构不要输出任何其他内容。 tree_search_result await call_llm(search_prompt)提示词设计逻辑LLM只看标题摘要Prompt更轻量、便宜、快速先输出thinking再输出node_list强制思维链决策更稳要求纯JSON输出避免多余文字破坏后续解析步骤2.2打印推理过程与检索节点node_map utils.create_node_mapping(tree) tree_search_result_json json.loads(tree_search_result) print ( 推理过程 ) utils.print_wrapped(tree_search_result_json[ thinking ]) print ( \n检索到的节点 ) for node_id in tree_search_result_json[ node_list ]: node node_map[node_id] print ( f节点ID: {node[node_id]}\t 页码: {node[page_index]}\t 标题: {node[title]} )create_node_mapping把嵌套树打平为ID字典快速查节点json.loads解析LLM输出循环打印页码、标题、节点ID检索链路完全可追溯实际输出示例推理过程 问题询问结论。通常结论出现在标题明确为“结论”的章节。 本文档中节点0019《5. 结论、局限与未来工作》最相关。 摘要0001可能有高层总结但不太可能包含完整结论。 讨论部分0018讲影响但不是明确结论。 因此主要检索节点0019。 检索到的节点 节点ID: 0019 页码: 16 标题: 5 . 结论、局限与未来工作这段推理清晰、可审计、可验证。 这是传统向量搜索永远做不到的。步骤3获取上下文并生成答案node_list json.loads(tree_search_result)[ node_list ] # 获取每个节点的完整文本并拼接 relevant_content \n\n .join(node_map[node_id][ text ] for node_id in node_list)answer_prompt f 根据上下文回答问题 问题{query} 上下文{relevant_content} 只根据提供的上下文给出清晰简洁的答案。 answer await call_llm(answer_prompt) utils.print_wrapped(answer)生成答案示例文档中的结论包括 - DeepSeek-R1-Zero纯强化学习无冷启动数据在各类任务上表现强劲 - DeepSeek-R1冷启动数据迭代强化学习微调达到与OpenAI-o1-1217相当的性能 - 将DeepSeek-R1的推理能力蒸馏到小模型前景广阔 DeepSeek-R1-Distill-Qwen-1.5B在数学基准上超过GPT-4o和Claude-3.5-Sonnet答案**完全正确**锚定在第16页每一句话都能追溯到节点0019。 如果答案出错你能立刻定位问题是树搜索选错了节点还是摘要有误。整条流水线从问题到答案**只调用两次LLM**一次导航推理一次生成答案。投入使用前必须了解的局限延迟更高每次查询至少多一次LLM调用做导航对话场景下延迟可感知。大规模成本更高向量检索边际成本几乎为零无向量RAG每次查询都要跑LLM量大后成本显著更高。严重依赖文档结构只对结构清晰的PDF友好报告、合同、论文、手册。 扫描件、无格式PDF、导出PPT效果很差。多文档扩展仍在开发单文档问答极强跨大量文档检索时单文档树的开销会快速上升PageIndex已标明这是已知限制。检索质量取决于模型导航决策的质量 大模型推理能力。 想用小模型本地部署必须严格测试。无向量RAG vs 传统向量RAG如何选择选择无向量RAG如果文档结构清晰财报、合同、论文、手册、政策文件准确性是第一优先级错误答案会带来实际风险需要可审计、可追溯的检索链路章节、页码、推理依据场景以单文档精问答为主而非跨库海量检索选择传统向量RAG如果有成千上万份文档需要跨库全局搜索问题偏宽泛语义“找出所有关于X的内容”查询量巨大、延迟要求严格文档格式混乱、无清晰结构**最实用的测试方法**从真实场景抽20~30个问题两种方案都跑一遍对比准确率。 一天的评估胜过数月的架构争论。总结**传统向量RAG**搜索“看起来像问题”的文本。**无向量RAG**推理“答案在文档哪里”。对大多数海量通用文档场景向量RAG仍是合理起点。但对结构化专业文档在准确性至关重要、错误代价高昂的场景 构建文档树 基于推理的检索才是更贴合文档天然组织方式的根本方案。PageIndex只是这一模式的开源实现之一。 而模式本身——构建结构化文档地图 → 让LLM推理读哪一章 → 提取该章节全文——你可以用任何大模型复现。 本文代码就是完整参考实现。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】