RAG文档切片(Chunking)核心策略

RAG文档切片(Chunking)核心策略 RAG文档切片Chunking核心策略一、核心选型思路切片目的兼顾上下文完整性和模型上下文窗口限制、向量语义独立减少跨‑chunk语义割裂提升召回准确率分基础策略、高级策略。基础切分策略落地最常用1固定长度切片Fixed‑size Chunking逻辑设定chunk长度重叠值overlap。• 示例chunk_size512 tokensoverlap100 tokens按token顺序截断。优点实现最简单适配大部分通用文档。缺点极易切断句子、段落、逻辑单元同一段语义被拆分召回效果差。适用纯零散文本、聊天记录。2基于分隔符分层切分RecursiveCharacterTextSplitterLangChain默认分层分隔符优先级“\n\n” “\n” “.” “”逻辑优先按段落分割段落太长再换行换行过长再按句子切最后按标点切切完仍控制在chunk‑size内同时保留overlap。优点优先保证段落完整效果远好于固定切片工程成熟。缺点长表格、代码、公式场景依旧容易被拆分。适用Word、PDF、手册、业务文档、技术文档最推荐通用方案。3按语义句子切分Sentence‑level split逻辑先用NLP分句再连续聚合多个句子直到接近chunk_size不会割裂单句。实现工具NLTK、spaCy、Llama‑Index SentenceSplitter。优点句子不会被拆开语义单元完整。缺点句子过多时远距离上下文关联性丢失长文档上下文断裂。进阶高级切片策略生产环境优化方案1基于标题层级拆分Hierarchical Chunking分层索引原理解析文档目录、一级标题、二级标题把同一章节的内容划分为一个chunk构建父子层级◦ 大块父chunk整个章节用于粗召回◦ 小块子chunk512‑1024token用于精细向量检索典型结构示例1 产品介绍父块3000token1.1 功能1子chunk11.2 功能2子chunk2检索方式先匹配父章节再匹配子片段大幅度减少跨chunk问题。适用带目录的PDF、技术手册、规章文档、API文档企业文档首选高级方案。2语义聚类切片Semantic Chunking逻辑1对每句话生成向量2计算相邻句子向量相似度3相似度明显下降就切分自动识别话题边界而不是依靠字符数量。优点完全依据话题变化切分同一个话题内容全部放在一块RAG召回效果最好。缺点计算量大耗时更长消耗更多embedding调用。适用长篇随笔、方案、调研报告、叙事类文档。3基于LLM智能切片Agent‑Split让大模型判断在哪里分割提示LLM识别话题变化点输出分割位置。• 优势理解深层逻辑表格、代码、业务复杂文档效果最好• 劣势成本最高速度慢不适合百万级海量文档。4结构化文档专属策略表格、Markdown、代码Markdown优先按#、##、###标题切分代码文件按函数、类进行切片PDF表格不要拆表格整张表格作为一个chunk如果表格过大把表格转为文本描述。PPT单页PPT作为基础chunk单元。Overlap重叠值怎么设置关键参数• 通用场景chunk_size 512‑1024 tokensoverlap取chunk‑size的10%‑20%◦ 512 chunk → overlap 60‑100◦ 1024 chunk → overlap 150‑200• 文档句子很长提高overlap至25%• 短句居多10%足够overlap过高向量内容冗余过低上下文断裂。4. Chunk‑Size选型经验行业落地经验小模型Embeddingbge‑smallchunk_size 512–768 token主流高精度检索bge‑large768‑1024长摘要类问题1500‑2000代码、公式文档512以内注意chunk不是越大越好chunk过大Embedding向量泛化精准度下降chunk过小丢失上下文。双层索引架构工业界标准RAG架构粗粒度chunk3000‑4000token用于判断大章节细粒度chunk512‑1024token向量库检索召回流程用户问题 → 匹配粗块筛选章节 → 再在章节内检索细chunk → 送入LLM生成答案。不同文档类型最优切片策略总结文档类型 推荐切片方案 chunk_size overlap普通Word、PDF文档 递归字符分割RecursiveSplitter 768 120带目录手册、规章制度 标题分层Hierarchical Chunking 800 150调研报告、长篇文章 语义分割Semantic Chunking 1024 180Python/Java代码文件 按函数类分割 512 80表格较多文档 LLM识别整块表格 不拆分表格 10%避坑要点禁止只使用固定长度切片做企业RAG效果普遍很差中文文档尽量以token计算不要按字符1token≈1.8‑2个汉字切片后要做清洗去掉多余换行、空格、页眉页脚、页码减少噪声长段落优先分层切片其次语义切片最后才是固定长度。如果你需要我可以给你一份Python示例代码递归切片 语义切片二选一LangChain版本。