开发资源 / RAG 文档切分

RAG Chunking Playground

测试不同 Chunking 策略如何切分真实文档,实时检查 Chunk Size、Overlap、Token 数和文档结构。

本地运行切分、统计和文件读取都在浏览器中完成,文档不会上传。

Starting presets

Recursive · 800 字符 · 120 overlap,适合先观察普通长文的段落边界。

Recursive按段落、换行、空格逐级寻找自然边界,超长内容才回退到字符。

普通文本的起点 · 大小单位:Characters
Size UnitCharacters
Chunks
0
Avg
0 chars
Median
0 chars
Min / Max
0 / 0 chars
Source Characters
979 chars
Source Tokens
— tokens
Embedded Characters
0 chars
Embedded Tokens
0 tokens
Duplicated Characters
0 chars
Duplicated Tokens
0 tokens
Duplication Ratio
0.0%
Embedding Items
0

Source Document

979 chars · tokenizing… · 36 lines

Hover 或聚焦 Chunk 查看对应区间;点击可锁定,按 Esc 取消。

Chunks

正在计算…

Deterministic checks

Chunk Diagnostics

只检查可以从区间、大小和 Markdown 结构确定的问题,不生成主观评分。

  • 输入文档后会显示切分诊断。

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_splittersCharacterTextSplitter 适合明确 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。