传统RAG的结构性缺陷
当用户向大模型提交一份200页的年报告,并询问“今年的收入确认政策发生了哪些变化”以及“报告中哪里解释了原因”时,这是一个非常典型且合理的需求。对于熟悉该文档的人类读者而言,回答这个问题仅需约两分钟。人类会直接翻到相关章节进行阅读。然而,机器在处理此类任务时往往表现不佳,因为通常的做法丢弃了使问题变得简单的关键要素。传统的检索增强生成(RAG)方法会将文档切割成小块,例如每500字或按段落分割。随后,系统将每个文本块转化为向量并存储起来。
"The usual way to do this is retrieval augmented generation, or RAG. You take the document and you cut it into chunks."
当问题进入系统时,它也会被转化为向量,系统将检索出最相似的少量文本块。这些片段被放入模型的上下文窗口中供其回答。这种方法虽然有用、廉价且对许多问题足够有效,但在面对大型结构化文档时暴露出严重缺陷。一旦将文档切割成块,作者构建的原始结构就被丢弃了。标题与其介绍的段落分离,表格与其解释性句子断开。如果答案跨越多个不同部分,基于相似度的搜索无法识别这些部分属于同一整体。模型只能得到碎片化的信息,并被迫猜测它们之间的关系。
文档的结构化本质与扁平化处理的风险
事实上,这些文档从来就不是杂乱无章的文本堆砌。有人以结构化的方式撰写了它们,包含标题、章节、子节、段落、表格和图像等元素。这些信息被组织在一棵树状结构(Tree Structure)中,作者已经预先完成了信息的整理工作。然而,传统的分块方法将这棵树扁平化(Flattens)以便进行相似度搜索。这种做法虽然简化了检索过程,但最终摧毁了结构。系统随后需要花费大量精力去恢复那些原本就存在的关联关系。
"Chunking takes that tree and flattens it so that we can do a similarity search over those flat sections, but we end up destroying the structure."
这种扁平化处理导致模型在回答问题时缺乏上下文连贯性。当答案分散在不同章节,而相似度搜索仅返回表面相似的片段时,模型难以构建完整的逻辑链条。因此,我们需要思考另一种寻找材料的方式:不要扁平化文档,而是保留其树状结构。让模型通过推理找到正确部分,而不是仅仅依靠相似度匹配。这种方法旨在还原文档作者精心设计的逻辑路径。
智能体导航:模拟人类的阅读策略
想象一下人类如何回答关于收入政策的问题。我们不会通读200页文档,而是打开目录(Table of Contents),找到关于会计政策的章节,翻到该部分并阅读。如果内容指向脚注或引用其他段落,我们会跟随参考链接进行跳转。这种导航行为正是AI智能体(Agent)可以模拟的。系统首先获取文档树状结构的概览,每个部分附带简短摘要。这使得模型能够在不阅读正文的情况下了解文档的整体形状和布局。随后,智能体推理出最可能包含答案的部分并打开阅读。
"It starts with an outline of the tree where each section comes with a short summary so that it can see the shape of the document without reading the body."
如果当前部分信息不足,智能体可以选择下一个相关章节继续探索。它一步步进行导航,直到收集到所需的全部信息。这种基于树状结构的遍历方式带来了两个传统分块方法难以实现的优势。首先,上下文信息是免费获得的。当智能体阅读某一段落时,它仍然清楚该段落所属的章节和子节位置。上方的标题构成了其导航路径的一部分,而相似度搜索检索出的孤立文本块则完全不知道自己的来源位置。
跨章节推理与上下文保持的优势
第二个显著优势是能够回答跨越整个文档的问题。如果政策定义在一个章节,而解释原因在三个章节之后,智能体依然可以保持当前位置,读取其他分支并返回。它像是在地图上进行移动(Moving around the map)。相比之下,相似度搜索只是将恰好与查询看起来相似的片段交给模型。智能体并非减少总工作量。遍历树状结构意味着需要进行多次传递,这确实增加了计算开销。然而,关键变化在于最终呈现在模型面前的内容。模型不再面对整个文档或失去位置信息的少量片段,而是获得带有标题的相关章节完整内容。
"Instead of the entire document or just a handful of chunks that have lost their place in the document, the model gets one relevant section with its heading still on it."
这种处理方式使模型在正确的材料和形状上进行推理,往往能产生更清晰的答案。它减少了因连接不紧密的碎片而导致的幻觉(Hallucination)现象。智能体通过逻辑路径而非表面相似度来整合信息,确保了答案的连贯性和准确性。这种机制特别适用于需要深度理解文档内部逻辑关系的复杂查询场景。
Docling:从PDF到结构化树的转换挑战
上述所有描述都依赖于一个前提:必须拥有文档的树状结构。然而,这是最难的部分。大多数文档以PDF格式呈现,而PDF本质上只是将字符和图形放置在页面上的指令集合。其中并没有清晰的、可供遍历的结构层次。这就是Docling项目所解决的问题。用户输入PDF,输出的是Docling文档对象。该对象包含真实的章节和标题、保留的阅读顺序以及完整的表格结构。PDF格式掩盖了作者建立的层级,而Docling负责重建这一层级。一旦获得这个结构化对象,智能体就可以直接在其上工作。
"There's no clean structure in there to walk. This is the job that Docling does."
智能体可以执行写入、编辑、提取字段和丰富章节内容等操作。该项目内置的智能体专门负责上述的导航过程。项目将此方法称为“无分块RAG”(Chunkless RAG)。这是一个准确的描述,其目标与传统检索相同:找到正确的材料并以此为基础生成答案。但它通过对文档结构进行推理而非将其切碎并进行相似度匹配来实现这一目标。这仍然是检索过程,只是在执行过程中保持文档的完整性(Keeps the document whole)。
成本权衡与混合架构的未来
这种方法并非没有代价。在一切工作开始之前,需要一棵良好的树状结构,而将现实世界的文档解析为清晰的结构是一个极具挑战性的工程问题。这也是该项目大部分工程工作的所在。通过结构进行推理也比单次向量查找需要更多的来回交互。因此,存在更高的延迟和更多的模型调用次数。基于分块的检索在很多时候仍然是正确的工具。如果你拥有数百万份文档,并且需要进行模糊搜索(如“查找关于X的任何内容”),相似度搜索难以被超越。结构方法在长且组织良好的文档中证明其价值,特别是在精度至关重要且部分之间的连接是查询重点时。在许多现实世界系统中,将结合使用两者:用相似度搜索找到正确的文档,再用结构导航在内部进行遍历。
"The chunk-based retrieval is still the right tool a lot of the time. If you've got millions of documents and a fuzzy find me anything about X kind of question, similarity search is hard to beat."
这构成了真正的选择困境。两者都是检索技术,区别在于是将文档切碎并通过相似度匹配,还是保持完整并通过结构推理。作者已经绘制了地图(即文档结构),现在可以将这份地图返还给系统,让智能体跟随其路径进行探索。这种混合架构旨在平衡大规模检索的效率与复杂文档理解的精度。
结论
这条内容最终说明了“无分块RAG”(Chunkless RAG)是一种针对复杂结构化文档的替代性检索范式。它通过Docling等工具重建PDF中的隐藏层级,利用AI智能体在树状结构中进行导航推理,从而解决了传统分块RAG丢失上下文和跨章节关联能力弱的问题。尽管该方法在延迟、计算成本和工程实现上高于传统的向量相似度搜索,但它在需要高精度和逻辑连贯性的长文档问答场景中具有不可替代的优势。未来的系统架构更倾向于混合模式:利用相似度搜索进行粗粒度文档筛选,再利用结构导航实现细粒度的精准内容提取。