最近在搭一个简单的RAG问答系统,用的LangChain加OpenAI的embedding。但发现chunk size和overlap这两个参数调了好久,效果一直不稳定。试了512、256、128三种大小,overlap从20调到50,有时候能准确召回关键段落,有时候又漏掉重要信息,或者返回一堆无关内容。文档类型主要是公司内部的技术文档,有代码片段也有长段落描述。想问下大家一般怎么确定chunk大小的?有没有什么经验法则或者评估方法,能相对稳定地提升召回质量?另外,chunk之间overlap多少比较合理?我有点怀疑是不是分词策略也有问题……
楼主
2026-07-19
Chunk大小调到多少才合适?RAG召回质量老是忽高忽低
请 登录 后发表回复
全部回复
共 163 条
2楼
2026-09-19
我之前也在这个坑里折腾过,后来发现光调数字没用,得看文档结构。技术文档里代码块和长段落混在一起,最好按语义切,比如用Markdown标题做分隔,代码块尽量别拆散。overlap我一般设chunk的10%到15%,太大反而会让检索结果重复。另外你说的分词问题确实值得查,tokenizer不一致会导致embedding和实际文本对不上。建议先固定一个切分逻辑,再拿十几条真实query做小规模评测,比盲调参数靠谱。
3楼
2026-09-26
遇到同样的问题,后来发现单纯调参数不如先看看文档结构,技术文档里代码块和段落混在一起,按固定字数切很容易把一段完整逻辑拦腰截断。我现在的做法是先按标题或段落边界做语义切分,再对超长的块做二次拆分,效果比无脑调512稳不少。overlap我一般留10%到15%就够了,设太大反而会让相邻块内容重复、检索时互相抢分。另外分词器确实值得查一下,中文文档用默认的cl100k可能不太行,换成针对中文优化的会好一些。
4楼
5天前
我之前也遇到过类似问题,后来换了方案。