关于 chunking-strategy
面向 RAG、向量检索和文档处理场景的分块策略指南,帮助开发者按内容结构选择分块方式并评估检索效果。涵盖从固定长度到语义分块的策略及验证流程。
主要功能
- 01多种分块策略选择
- 02分块大小与重叠建议
- 03按文档结构保留语义单元
- 04语义连贯性验证
- 05精确率与召回率评估
适用场景
- 01构建 RAG 文档处理流程
- 02优化向量检索效果
- 03为 Markdown、代码或表格分块
- 04排查检索精确率或召回率偏低
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill chunking-strategy安装后在 Claude Code 中输入/chunking-strategy确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-strategies.mdevaluation.mdimplementation.mdresearch.mdsemantic-methods.mdstrategies.mdtools.mdvisualization-tools.md详细介绍
RAG 系统的分块策略
概述
为 RAG 系统、向量数据库和文档处理提供分块策略。推荐分块大小、重叠比例和边界检测方法;验证语义连贯性;评估检索指标。
适用场景
在构建或优化 RAG 系统、向量搜索管道、文档分块工作流,或为检索质量不佳的现有系统调优性能时使用。
说明
选择分块策略
根据文档类型和使用场景进行选择:
-
固定大小分块(第 1 级)
- 适用于没有明确结构的简单文档
- 从 512 个 token 和 10-20% 的重叠率开始
- 调整方式:事实型查询使用 256,分析型查询使用 1024
-
递归字符分块(第 2 级)
- 适用于具有结构边界的文档
- 分层分隔符:段落 → 句子 → 单词
- 根据文档类型(HTML、Markdown、JSON)进行自定义
-
结构感知分块(第 3 级)
- 适用于结构化内容(Markdown、代码、表格、PDF)
- 保留语义单元:函数、章节、表格块
- 分割后验证结构是否得到保留
-
语义分块(第 4 级)
- 适用于主题有变化的复杂文档
- 基于嵌入的边界检测,相似度阈值为 0.8
- 缓冲区大小:3-5 个句子
-
高级方法(第 5 级)
- 面向长上下文模型的 Late Chunking
- 面向高精度要求的 Contextual Retrieval
- 监控计算成本与检索收益
实现分块管道
-
预处理文档
- 分析结构、内容类型和信息密度
- 识别多模态内容(表格、图像、代码)
-
选择参数
- 分块大小:嵌入模型上下文窗口 / 4
- 重叠率:大多数情况下为 10-20%
- 策略专属设置
-
处理并验证
- 应用分块策略
- 验证连贯性:运行
evaluate_chunks.py --coherence(见下文) - 使用有代表性的文档进行测试
-
评估并迭代
- 测量精确率和召回率
- 如果精确率 < 0.7:将 chunk_size 减少 25%,然后重新评估
- 如果召回率 < 0.6:将重叠率增加 10%,然后重新评估
- 监控延迟和内存使用情况
参考:references/implementation.md。
验证分块质量
运行验证命令以评估分块质量:
# Check semantic coherence (requires sentence-transformers)
python -c "
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
chunks = [...] # your chunks
embeddings = model.encode(chunks)
similarity = (embeddings @ embeddings.T).mean()
print(f'Cohesion: {similarity:.3f}') # target: 0.3-0.7
"
# Measure retrieval precision
python -c "
relevant = sum(1 for c in retrieved if c in relevant_chunks)
precision = relevant / len(retrieved)
print(f'Precision: {precision:.2f}') # target: >= 0.7
"
# Check chunk size distribution
python -c "
import numpy as np
sizes = [len(c.split()) for c in chunks]
print(f'Mean: {np.mean(sizes):.0f}, Std: {np.std(sizes):.0f}')
print(f'Min: {min(sizes)}, Max: {max(sizes)}')
"
示例
固定大小分块
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=256,
chunk_overlap=25,
length_function=len
)
chunks = splitter.split_documents(documents)
结构感知代码分块
import ast
def chunk_python_code(code):
tree = ast.parse(code)
chunks = []
for node in ast.walk(tree):
if isinstance(node, (ast.FunctionDef, ast.ClassDef)):
chunks.append(ast.get_source_segment(code, node))
return chunks
语义分块
def semantic_chunk(text, similarity_threshold=0.8):
sentences = split_into_sentences(text)
embeddings = generate_embeddings(sentences)
chunks, current = [], [sentences[0]]
for i in range(1, len(sentences)):
sim = cosine_similarity(embeddings[i-1], embeddings[i])
if sim < similarity_threshold:
chunks.append(" ".join(current))
current = [sentences[i]]
else:
current.append(sentences[i])
chunks.append(" ".join(current))
return chunks
最佳实践
核心原则
- 平衡上下文保留与检索精确率
- 保持分块内部的语义连贯性
- 针对嵌入模型的上下文窗口限制进行优化
实现
- 从固定大小分块开始(512 个 token,15% 重叠率)
- 根据文档特征进行迭代
- 部署前使用特定领域的文档进行测试
避免的陷阱
- 过度分块:小分块缺乏上下文
- 分块不足:过大的分块会遗漏信息
- 忽略语义边界和文档结构
- 对多种内容类型采用一刀切的方案
限制和警告
资源注意事项
- 语义方法需要大量计算资源
- Late Chunking 需要长上下文嵌入模型
- 复杂策略会增加处理延迟
- 处理大型文档批次时监控内存
质量要求
- 后处理后验证语义连贯性
- 部署前使用有代表性的文档进行测试
- 确保分块保持独立含义
- 为格式错误的内容实现错误处理
References
- strategies.md - Detailed strategies
- implementation.md - Implementation guidelines
- evaluation.md - Performance metrics
- tools.md - Libraries and frameworks
- research.md - Research papers
- advanced-strategies.md - 11 advanced methods
- semantic-methods.md - Semantic approaches
- visualization-tools.md - Visualization tools
评论
支持 Markdown