前言
RAG通过结合检索与生成技术,依赖其高效检索算法、多模态融合能力及系统级优化,解决了基础大模型在企业内部应用的局限性,例如通过RAG技术对接企业内部知识库,支持知识动态更新与实时交互,显著降低了大模型的幻觉风险,无需微调训练模型,低成本适配企业垂直领域的应用场景,在数据安全与可控性方面,可加入权限控制逻辑,确保敏感信息仅在授权范围内使用,同时通过引用标注实现可追溯性。
但是在RAG应用工程化过程中,特别在金融、医疗等高风险领域,“可验证性”、“准确性”比“智能性”更重要,分块策略是RAG系统的核心环节,不同的分块策略,直接影响检索效率与生成质量。
我们先简单回顾一个RAG的基本工作流程:
RAG工作流程(图片来源:DailyDoseofDS)
有时候我们的文档可能很大,或者结构很复杂,在步骤①中需要对文档进行分块处理,将大文档分成较小单位/可管理的部分,以确保文本适合嵌入模型的输入大小。
由于采用不恰当的分块策略,可能导致我们最终应用RAG的效果达不到预期,面临答案可信度不足、关键信息漏检、复杂文档提取瓶颈等问题。这些问题直接影响RAG系统的可靠性和实用性。
RAG分块应用中普遍存在的问题
准确性:答案可信度不足
幻觉问题
即使检索到相关文档,大模型仍可能脱离文档内容编造答案(尤其在文档信息模糊或矛盾时)。例如如:用户问“某基金近3年收益率”,模型可能捏造数据而非引用检索到的报告。
检索噪声干扰
相似度搜索返回的文档片段可能包含无关信息,导致模型生成答案时被误导。例如:检索到10篇文档,其中3篇主题相关但含错误数据,模型可能融合错误信息。
细粒度理解缺失
模型难以精准理解数字、日期、专业术语的上下文含义,导致关键信息误用。例如:将“预计2025年增长10%”误解为历史数据。
召回率:关键信息漏检
语义匹配局限
传统向量搜索依赖语义相似度,但用户问题与文档表述差异大时漏检(如术语vs口语)。例如:用户问“钱放货币基金安全吗?”可能漏检标题为“货币市场基金信用风险分析”的文档。
长尾知识覆盖不足
低频、冷门知识因嵌入表示不充分,在向量空间中难以被检索到。例如:某小众金融衍生品的风险说明文档未被召回。
多跳推理失效
需组合多个文档片段才能回答的问题(如因果链),单次检索难以关联分散的知识点。例如:“美联储加息如何影响A股消费板块?”需先检索加息机制,再关联A股消费板块。
复杂文档解析:信息提取瓶颈
非结构化数据处理
表格/图表:文本分块会破坏表格结构,导致行列关系丢失(如财报中的利润表)。
公式/代码:数学公式或程序代码被错误分段,语义完整性受损。
扫描件/图片:OCR识别错误率高,尤其对手写体或模糊文档。
上下文割裂问题
固定长度分块(如512字符)可能切断关键上下文:
分块1结尾:“...风险因素包括:”
分块2开头:“利率波动、信用违约...” → 模型无法关联分块1的提示语。
文档逻辑结构丢失
标准分块策略忽略章节、段落、标题的层级关系,影响知识图谱构建。例如:将“附录”中的备注误认为正文结论。
RAG的分块策略与选择
选择合适的分块策略,是解决RAG实际应用中准确性、召回率与复杂文档解析等痛点最直接有效的方式,也是我们建设RAG系统最关键的一个环节。最常见的RAG分块策略包括:固定大小分块、语义分块、递归分块、基于文档结构的分块、基于LLM的分块。
RAG五种分块策略(图片来源:DailyDoseofDS)
下面我们围绕这五种分块策略,系统介绍不同分块策略的基本原理、实现步骤、主要优缺点与适用场景。
固定大小分块
基本原理
固定大小分块(Fixed-size Chunking),将文本按固定长度(如字符数、单词数或token数)切分,每个块大小一致,可能通过重叠保留上下文连贯性。例如,将文档每256个字符切分为一个块,重叠20个字符以减少边界信息丢失。
固定大小分块示意(图片来源:DailyDoseofDS)
实现步骤
预设参数:定义块大小(如256 token)和重叠比例(如20 token)。
切分文本:按固定长度分割文本,允许相邻块部分重叠。
生成块列表:输出所有块作为独立单元。
主要优点
实现简单:无需复杂算法,代码实现高效。
标准化处理:块大小一致,便于批量处理和向量化。
资源友好:适合大规模文本处理,降低计算成本。
主要缺点
语义断裂:可能在句子或概念中间切分,破坏上下文完整性。
信息冗余:重叠区域可能导致重复存储和计算。
适用性受限:对结构化文本(如代码、技术文档)效果较差。
适用场景
非结构化文本(如新闻、博客)的初步处理。
对实时性要求高、需快速切分的场景。
场景示例
语义分块
基本原理
语义分块(Semantic Chunking),根据句子、段落、主题等有语义内涵的单位对文档进行分段创建嵌入,如果第一个段的嵌入与第二个段的嵌入具有较高的余弦相似度,则这两个段形成一个块。通过合并相似内容,确保每个块表达完整的语义内容。
由于每个分块的内容更加丰富,它提高了检索准确性,让大模型产生更加连续和相关的响应。但是它依赖于一个阈值来确定余弦相似度是否显著下降,而这个阈值在不同类型文档中可能涉及不同的参数设置。
语义分块流程
语义分块示意(图片来源:DailyDoseofDS)
实现步骤
分句/分段:将文本拆分为句子或段落。
生成嵌入:为每个单元计算向量表示。
相似度计算:依次比较相邻单元的余弦相似度。
动态合并:当相似度高于阈值时合并单元;相似度骤降时开始新块。
主要优点
语义完整性:保留自然语义结构,提升检索准确性。
上下文敏感:适应复杂逻辑关系(如因果、对比)。
生成质量:检索到的块更连贯,利于LLM生成精准回答。
主要缺点
计算复杂度高:需多次向量化计算和相似度比较。
阈值依赖:相似度阈值需人工调试,不同文档需不同参数。
实现门槛:依赖高质量嵌入模型和相似度算法。
适用场景
高精度问答系统(如法律、医疗领域),研究论文、行业分析报告等专业文档。
需保留上下文逻辑的复杂文档(如论文、技术报告)。
场景示例
递归分块
基本原理
递归分块(Recursive Chunking),先按主题或段落初步划分,再对超长块递归细分,直至满足大小限制。递归分块融合了结构化与非结构化处理逻辑,与固定大小的分块不同,这种方法保持了语言的自然流畅性并保留了完整的内容语义。
递归分块流程
递归分块示意(图片来源:DailyDoseofDS)
实现步骤
粗粒度切分:按段落、标题或主题初步划分大块。
检查大小:判断块是否超过预设长度(如1024 token)。
递归细分:超长,按固定大小或语义逻辑进一步切分。
终止条件:块大小符合要求时停止递归。
主要优点
灵活性强:平衡结构完整性与大小限制。
适应复杂内容:处理长文档(如书籍、长篇论文)时表现优异。
多策略融合:可结合固定大小或语义分块优化细分。
主要缺点
块大小不均:不同层级的块可能差异较大。
逻辑断裂风险:递归过程中可能破坏原文的自然段落结构。
实现复杂:需设计递归终止条件和分块策略。
适用场景
长文档处理(如企业年报、学术论文),书籍、技术手册等层级化文档。
需兼顾结构化与非结构化内容的场景,包含嵌套结构的合同文本。
场景示例
基于文档结构的分块
基本原理
基于文档结构分块(Document Structure-based Chunking),利用文档固有结构(如标题
、章节、列表
- 、表格
)进行切分,每个结构单元作为一个块。它通过与文档的逻辑部分对齐来保持结构完整性。这种分块适用于文档有清晰的结构,但很多时候,一个文档的结构会比想象中复杂,此外,很多时候文档章节内容大小不一,很容易超过块的大小限制,需要结合递归拆分再进行合并处理。
基于文档结构分块流程
基于文档结构分块示意(图片来源:DailyDoseofDS)
实现步骤
识别结构元素:解析文档中的标题、段落、小节等标记(如Markdown、XML)。
按结构切分:将每个结构单元(如“引言”、“结论”)独立为块。
处理超长部分:若某结构单元过大,再结合递归或固定大小分块细化。
主要优点
逻辑清晰:保留文档的层次化结构,便于定位信息。
检索高效:用户可通过标题快速定位相关内容。
格式兼容性:适合结构化文档(如技术手册、报告)。
主要缺点
依赖格式标准化:对非结构化文本(如自由写作)效果差。
预处理复杂:需解析文档格式(如LaTeX、HTML),增加实现难度。
灵活性不足:难以处理混合结构内容(如图文混排)。
适用场景
结构化文档,如:财报(表格数据)、技术文档(代码块)、合同(条款列表)。
需按章节检索的场景(如法规数据库),任何含丰富格式标记的内容。
场景示例
基于LLM的分块
基本原理
基于LLM的分块(LLM-based Chunking),直接将原始文档输入大语言模型(LLM),由模型智能生成语义块。利用LLM的语义理解能力,动态划分文本,保证了分块语义的准确性,但这种分块方法对算力要求最高,对时效性与性能也将带来挑战。
基于LLM分块流程(图片来源:DailyDoseofDS)
实现步骤
输入文档:将完整文档送入LLM(如DeepSeek、GPT)。
生成块指令:通过提示词(Prompt)引导模型按语义划分块。
示例提示词:“请将以下文档按语义划分为多个块,每个块需包含完整主题。”
输出块列表:模型返回划分后的块,可能包含逻辑标签(如“引言”、“方法论”)。
主要优点
高度智能化:适应复杂、非结构化文本(如自由写作、对话记录)。
动态适应性:根据文档内容自动调整块大小和逻辑。
生成质量:块语义连贯,减少人工干预。
主要缺点
计算成本高:依赖高性能LLM,资源消耗大。
可解释性差:模型决策过程难以追溯,可能产生不可预测的块。
依赖模型能力:效果受限于LLM的训练数据和语义理解能力。
适用场景
非结构化文本(如访谈记录,会议纪要,用户评论、社交媒体内容等)。
需高级语义分析的场景(如跨领域知识整合)
场景示例
五种RAG分块策略总结对比
分块策略
优点
缺点
适用场景
固定大小分块
实现简单,资源高效
语义断裂,信息冗余
快速处理非结构化文本
语义分块
语义完整,检索精准
计算复杂,依赖阈值
高精度问答、复杂文档
递归分块
灵活适应长文档,保留结构
块大小不均,逻辑断裂风险
长篇技术文档、企业报告
基于结构的分块
逻辑清晰,检索高效
依赖格式标准化,预处理复杂
结构化文档(论文、白皮书)
基于LLM的分块
高度智能,适应非结构化文本
计算成本高,决策过程不可控
非结构化内容、跨领域整合
RAG分块策略选择建议
结合递归与结构分块:处理长文档时(如法律合同、表格、公式、技术手册)。
语义分块:对生成质量要求高、文档语义复杂时(如论文、医疗问答)。
使用LLM分块:处理非结构化或混合内容(如多模态文档)。
固定大小分块:快速部署或资源受限场景(如社交媒体、轻量级应用)。
分块策略选择决策树
具体实施过程中,我们需要根据具体需求与文档类型选择分块策略,或组合多种方法(如“结构分块+语义细分”)以实现最佳效果。
RAG面临的挑战与前沿探索
深层待解决问题
知识关联缺失
当前检索基于单点语义相似度,无法构建跨文档知识图谱(如“公司A收购事件”与“行业竞争格局变化”的隐含关联)。
推理-检索割裂
生成模型无法主动指导检索过程,形成“检索→生成”单向流水线,而非动态交互式推理。
例如:模型应能反问“您需要对比哪两个季度的数据?”以优化检索目标。
多模态理解不足
现有RAG主要处理文本,对文档中的图表、公式、流程图等信息利用率极低。例如研报中的股价趋势图无法被检索系统理解。
可信度量化困境
缺乏统一标准评估答案可靠性,用户难以判断“何时可信任RAG的输出”,导致存在潜在风险,例如金融场景中错误答案可能导致直接经济损失。
长上下文建模缺陷
当检索返回大量片段(如20篇文档)时,模型对超长提示词的尾部信息忽略率显著上升。
解决路径与前沿探索
检索增强
混合检索:融合语义搜索(Embedding)与关键词搜索(BM25)提升召回率
查询扩展:用LLM将用户问题改写为专业查询(如“钱放余额宝安全吗?”→“货币基金信用风险评估”)
递归检索:实现多跳推理(先查“美联储加息”,再查“科技股估值模型”)
生成控制
强制引用:要求模型标注答案来源位置(如:源自2023年报第5页)
置信度阈值:对低置信答案触发人工审核流程
结构化解构:将复杂问题拆解为子问题分步检索生成
优化分块
语义分块:按句子/段落边界切分而非固定长度
结构感知:保留表格、标题层级(利用Markdown/XML标签)
动态重叠:相邻块部分重叠避免上下文断裂