1. RAG分块策略:大模型知识库的基石工程
在构建RAG(检索增强生成)系统时,分块策略的选择往往决定了整个系统的上限。就像建造房屋时,地基的施工质量直接决定了建筑能盖多高。我见过太多团队花费大量精力优化prompt和微调模型,却因为分块不当导致检索准确率始终上不去。
分块本质上是在解决"信息粒度"的问题。想象你要在图书馆找资料,如果所有书都被拆成单页散落一地(分块过细),或者整本书被胶水粘死无法翻阅(分块过粗),都会让检索变得低效。RAG中的分块同样需要找到那个"恰到好处"的平衡点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 分块策略全景解析
2.1 固定大小分块:简单粗暴的基准方案
固定大小分块是最容易实现的方案,就像用固定尺寸的模具切割文本。实际操作中,我建议:
python复制from langchain.text_splitter import CharacterTextSplitter
splitter = CharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separator="\n"
)
关键参数经验值:
- 初始chunk_size可设为512(适配BERT等模型)
- overlap建议10-15%(如512对应50-75token)
- 分隔符优先用"\n\n"保留段落结构
注意:纯英文环境按token计数更准确,中文建议直接按字符数计算。我曾测试过,对于中文,500字符≈350-400token。
2.2 语义分块:主题连贯性的极致追求
语义分块的核心是保持每个chunk的主题一致性。具体实现时:
- 用sentence-transformers生成句子嵌入
- 计算相邻句子余弦相似度
- 当相似度低于阈值(如0.7)时分割
python复制from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
def semantic_chunking(text, threshold=0.7):
sentences = text.
