RAG Chunking 是什么
Chunking 位于文档解析之后、Embedding 之前。原始 document 被切成可独立索引的 Chunk,每个 Chunk 生成向量并进入 Vector Store;查询时,Retriever 找回相关 Chunk,再把它们放进模型上下文。切分边界会直接影响向量表达的主题、召回颗粒度和最终上下文是否完整。
Chunk Size 怎么设置
没有通用最优值。文档结构、Embedding 模型、query 粒度、retrieval 策略、rerank 方式和 context budget 都会改变合适的范围。先用真实文档检查边界,再用真实查询评估召回,比照搬一个固定数字更可靠。
Chunk Overlap 怎么设置
Overlap 能保留切分点附近的上下文,代价是重复 Embedding、索引体积增加,并可能让相邻 Chunk 一起占用检索结果。本页按 source range 计算真实重复字符,而不是用 Chunk 数量乘以设置值。
不同切分策略怎么选
Recursive Chunking
Recursive 按段落、换行、空格和最终字符 fallback 逐级寻找边界,是普通文本的合理起点。中文预设额外加入句号、问号、分号、逗号和顿号,减少任意字符切断语句的情况。
Markdown Chunking
技术文档已经用 H1、H2、H3 表达主题层级。先按标题构建 Section,再对过长 Section 做 Recursive splitting,可以同时保留 heading metadata 和最终大小上限。代码围栏、引用、缩进代码和 HTML 块中的井号不会被当成标题。
Token-based Chunking
Token-based 按 tokenizer 的编码结果限制大小,和字符数不是固定换算关系。本页使用 cl100k_base,适合观察 OpenAI-style BPE 下的结果,但不能代表所有模型。
Sentence Chunking
Sentence 模式先用浏览器的 Intl.Segmenter 找句子边界,再把相邻句子合并到目标大小。这样不会简单按句点拆开,能更稳妥地处理 3.14、e.g.、Mr. 和 URL;超长单句再交给 Recursive fallback。
PDF 应该怎么 Chunk
PDF 的第一步通常不是 Chunking,而是 parsing 和 layout recovery。标题、段落、页码、表格、页眉页脚、OCR、双栏顺序都可能在文本提取时丢失。直接执行“PDF → text → 每 500 字切分”会把解析问题带进索引。本工具第一版只处理浏览器本地读取的 TXT 和 Markdown,不直接解析 PDF。
LangChain Text Splitter 怎么选
根据 LangChain 当前 Python 文档,通用文本可从 RecursiveCharacterTextSplitter 开始,包路径为 langchain_text_splitters。CharacterTextSplitter 适合明确 separator 或配合 tokenizer 的长度切分;MarkdownHeaderTextSplitter 先按标题生成带 metadata 的 Document,再与 RecursiveCharacterTextSplitter 组合限制最终大小。API 细节可查看 LangChain Text Splitters 官方文档。
常见问题
RAG Chunk Size 应该多大?
没有对所有文档都有效的固定值。先看文档结构、Embedding 模型和查询粒度,再用真实查询检查召回。Playground 用来观察边界,不替代 retrieval evaluation。
Chunk Overlap 应该设置多少?
Overlap 用来保留边界上下文,也会增加重复 Embedding、索引体积和重复召回。可以从较小比例开始,观察重复率和真实检索结果后再调整。
Recursive 和 Character Chunking 有什么区别?
Recursive 按段落、换行、空格等层级寻找自然边界;Character 使用指定 separator 合并文本,并在片段仍超长时才强制切开。
Markdown 文档怎么 Chunk?
先按 H1、H2、H3 等标题构建 Section,保存标题层级,再对过长 Section 做大小受限的 Recursive splitting。
Token 和 Character Chunk Size 有什么区别?
Character 直接按字符数控制;Token 使用特定 tokenizer 的编码结果。不同 tokenizer 的数字并不通用,本页 Token 模式使用 cl100k_base。
为什么 Chunk 太小会影响 RAG?
过小的 Chunk 可能缺少回答问题所需的上下文,也会增加向量条目数量,让相邻碎片同时被召回。
为什么 Chunk 太大也会影响检索?
过大的 Chunk 可能混入多个主题,使单个向量不够聚焦,并占用更多上下文窗口。
PDF 应该怎么 Chunk?
先恢复 PDF 的标题、段落、表格、栏布局、页眉页脚和 OCR 结果,再考虑 Chunking。直接提取文本后每 500 字切一次通常会继承解析错误。本工具第一版不解析 PDF。
LangChain Text Splitter 怎么选?
普通文本可从 RecursiveCharacterTextSplitter 开始;明确 separator 时用 CharacterTextSplitter;Markdown 标题结构可用 MarkdownHeaderTextSplitter,再组合大小受限 splitter;需要 Token 上限时选择 token-based splitting。