内容提要
本文介绍了RAG系统中七种分块策略:固定大小分块、句子窗口检索、文档结构分块、语义分块、层级分块、LLM命题分块及多模态表格保留分块。每种策略各有适用场景,如固定分块适合日志,语义分块适合无结构文本。文章强调,生产环境中还需关注索引生命周期管理和分块去重,避免数据膨胀影响性能。
延伸解读
分块策略的选择需匹配数据特性
文章强调,没有一种分块策略适用于所有场景。固定大小分块适合日志等无结构数据,而文档结构分块适合格式化的企业文档。语义分块适合无结构但有主题变化的文本,如会议记录。选择时应先分析数据特性,再决定策略,避免盲目采用先进方法。
高级分块策略的代价与风险
语义分块和LLM命题分块虽能提升检索质量,但代价高昂:前者需对每句进行编码,增加延迟和成本;后者依赖LLM,可能产生幻觉或格式错误,导致数据丢失。这些方法更适合离线批量处理,而非实时流。生产环境需权衡收益与开销。
生产环境中的索引维护不可忽视
文章指出,长期运行中,索引生命周期管理比分块策略更重要。文档更新会产生孤立分块,导致数据膨胀和重复上下文注入,影响性能。建议使用基于内容哈希的确定性UUID和TTL策略,定期清理过期数据,以保持检索质量并控制成本。
Q&A
RAG系统中常见的分块策略有哪些?
常见的分块策略包括:固定大小分块、句子窗口检索、文档结构分块、语义分块、层级分块、LLM命题分块以及多模态表格保留分块。
为什么朴素固定大小分块会破坏语义?
固定大小分块按固定token数切割文本,容易切断语义边界,比如把否定词和主语分开,或把函数定义拆成两半,导致嵌入模型无法正确理解,检索时可能抓取错误信息。
句子窗口检索(small-to-big)是如何工作的?
句子窗口检索在索引时将文档拆分为句子,每个句子单独嵌入并存储指向周围k个句子的元数据。检索时先找到最相似的句子,然后将其扩展为包含上下文的窗口再交给LLM生成答案。
文档结构分块适合处理哪些类型的文档?
文档结构分块适合处理格式化的文档,如公司报告、API文档、合同等,因为这些文档的标题层级(如H1、H2)本身就定义了语义结构,按结构分块可以保留全局上下文。
语义分块的主要缺点是什么?
语义分块的主要缺点是索引延迟和成本高,因为需要对每个句子进行嵌入计算;此外,阈值ε难以在不同文档集上全局调整,容易导致分块不稳定。
层级分块(parent-child chunking)如何工作?
层级分块将文本按不同粒度切分,例如256 token和1024 token,小粒度块嵌入并映射到大粒度父块。检索时如果父块下超过一定比例的子块被命中,则用父块替换子块,以提供更完整的上下文。
LLM命题分块有哪些风险?
LLM命题分块的风险包括:LLM可能产生幻觉断点、输出格式错误或静默丢弃文本,导致索引数据不可恢复;同时速度比程序化分块慢,不适合实时流处理。
多模态表格保留分块如何处理表格?
多模态表格保留分块通过布局解析器或视觉语言模型识别表格,提取原始HTML/Markdown,用LLM生成表格的语义摘要并嵌入,检索时返回摘要,但将原始表格传给生成模型。
在生产环境中,除了分块策略还需要关注什么?
生产环境中还需要关注索引生命周期管理,包括使用基于内容哈希的确定性UUID和TTL策略,以避免数据膨胀和重复上下文注入,否则会降低LLM推理质量并增加token成本。