
知识分块矛盾RAG的第一步通常是文本分块实践中许多人直接采用固定长度如512token加少量重叠overlap的策略认为这样能够兼顾效率和语义连续性。但这种一刀切的方式忽略了检索与生成对信息粒度的根本差异。1 检索阶段偏好细粒度分块越小的chunk越容易与用户查询在向量空间中精准匹配避免无关内容稀释相关性2生成阶段测需要的是足够丰富的上下文若参考片段过短大模型缺乏足够的背景信息易导致回答片面不完整甚至产生幻觉。即使设置了overlap关键语义边界如论点转折因果链条多段联合结论仍可能被硬性切断。例如一个完整的业务流程说明横跨两个chunk单独任意一片段都无法支撑准确回答。这种结构性断裂会直接导致“检索命中但生成失败”。因此用同一套分块同时服务于检索和生成本质上是矛盾的是一种妥协往往造成两端性能的双重损失。知识本身缺失假设分块问题能解决另一个知识质量上更难的点在于知识不存在于任何一个分块里1答案可能存在在文档中但不存在确切的某一分块中。从query到document本身的语义鸿沟来说用户的问题可大可小和沉淀的文档的语义维度不可能始终一致2一些先验的领域型知识并不存在确切的分块里但大模型没有该类领域性常识时在回答具体问题的时候较为困难3一些过往问答里出现过的知识仅能依靠业务侧人工整理才能进入知识库。知识相互冲突假设知识全部都是call出来但是call出来的知识本身不清晰或者是不同的文档中对相似问题的诠释不同模棱两可的知识容易让大模型想不通以至于幻觉。分块方式对于结构清晰的 Markdown 知识文档其天然的标题层级如 #、## 等蕴含丰富的语义上下文信息。若能有效利用这些结构信息进行文本分割相比简单的按长度切分将显著提升后续检索与生成的质量。LangChain 提供了 MarkdownHeaderTextSplitter它基于 Markdown 标题层级进行智能分割能保留文档的语义结构和标题路径元数据。常规做法是先按标题递归切分如先按一级标题再按二级标题得到最小语义单元若单元过长再结合通用文本分割器如 RecursiveCharacterTextSplitter进行二次切分。然而仅依赖现有工具仍存在两个问题一是结构化分割后部分 chunk 过大需进一步切分部分又过小如仅含一句话导致向量表示稀疏、语义不完整二是纯按长度切分会破坏文档结构丢失上下文归属。另一种分割方式结构与长度协同的三阶段分割策略在保留语义结构的同时实现块大小的均衡结构化初分递归解析 Markdown 标题层级将文档切分为最小标题单元每个单元携带完整的标题路径元数据大块细化对超长单元按长度阈值二次分割确保每个片段不超过模型上下文限制同时继承原始标题信息小块归并对过短的片段从最低级标题向上逐层尝试合并相邻单元在不超过长度上限的前提下尽可能聚合语义连贯的上下文。通过“先分后合”的策略既避免了大块溢出又防止了小块碎片化。最终生成的知识块在长度可控的基础上最大程度保留了文档的层次结构与局部语义完整性为大模型提供了高质量、上下文丰富的输入显著提升 RAG 系统的整体效果。检索重组由于检索阶段追求高精度匹配倾向于使用细粒度的文档片段而生成阶段依赖充分上下文更适合粗粒度的内容输入。若强制让同一分块同时服务于两个阶段往往导致检索召回不精准、生成内容不完整造成整体性能折损。为此在三步分割的基础上构建了多粒度知识表示体系使不同粒度的片段在 RAG 流程中各司其职Sentence句子级将结构化段落进一步按句子切分并附加所属标题路径等元数据。粒度最小语义原子性强专用于初始向量检索提升命中相关语义点的能力Segment段落级即前文所述的结构化最小语义单元包含完整标题层级与段落内容。语义自洽、边界清晰适用于重排序阶段作为相关性判断的基本单位Block上下文块级由多个相邻 Segment 归并而成在长度约束内聚合尽可能丰富的上下文专供大模型生成使用确保回答具备足够的背景支撑。通过这一设计实现了 “细粒度检索 → 中粒度重排 → 粗粒度生成” 的递进式信息流。检索时以 Sentence 为单位精准定位生成时以 Block 为上下文全面作答真正做到了检索与生成在块粒度上的解耦与协同有效缓解了传统单一分块策略带来的性能瓶颈。细粒度检索 (Precise Retrieval)输入用户的提问Query。动作将 Query 转化为向量在 doc_sentences 表中进行向量相似度搜索余弦相似度。目的精准定位。句子级颗粒度能避免段落中无关信息的干扰让匹配分值更真实。$ Similarity \cos(\theta) \frac{A \cdot B}{|A||B|} $中粒度回溯与重排 (Context Recall Rerank)动作系统根据命中句子的 parent_id从 doc_chunks 表中提取出它们所属的 Segment段落级。重排Rerank将用户的问题与这些段落一起输入到 Reranker 模型如 BGE-Reranker。目的相关性二次确认。句子可能因为关键词重合而命中但段落能提供语义自洽性排除“断章取义”的干扰。粗粒度上下文聚合 (Context Filling)动作保留重排得分最高的 Top-K 个段落。根据这些段落再次向上追溯获取完整的 Block上下文块级。如果多个命中的句子属于同一个 Block则自动合并避免重复。目的背景补完。LLM 需要完整的上下文前因后果来生成有逻辑的回答Block 提供了足够的“信息养料”。生成回答 (Generation)动作将最终聚合的 Block 内容、标题路径信息以及原始问题封装进 Prompt。Prompt 示例已知以下参考信息来源{title_path}\n{block_content}\n\n请根据上述背景回答问题{query}输出由 LLM 生成准确、完整且有据可查的回答。三、 流程对比为什么这比传统做法强环节传统 RAG (单粒度)多粒度解耦 RAG检索目标中等大小的 Chunk原子化的句子找得极准召回内容检索到什么就喂给 LLM 什么根据命中点向外扩散背景极深抗干扰能力易被 Chunk 里的噪声干扰句子过滤噪声段落确认语义LLM 表现容易出现上下文缺失导致的幻觉拥有 Block 级的全局视野逻辑性强