reg切片chunk大小如何选择

常见建议

FAQ / 客服问答:300-800 tokens
政策文档 / 操作手册:500-1200 tokens
技术文档:800-1500 tokens
法律合同 / 长报告:1000-2000 tokens
代码:按函数、类、模块切,不只按 token

比如你的知识库是客服/政策类,比较推荐:
chunk-size: 800
chunk-overlap: 120
top-k: 4

Embedding 最大 token 和 Chunk Size 的关系

Embedding 最大 token:决定 chunk 不能超过多少
Chunk Size:决定检索颗粒度
Overlap:避免切断上下文
TopK:决定召回多少段上下文
LLM 上下文窗口:决定最终能塞多少 chunk 给模型

完整关系如下:
文档
-> 按 chunk-size 切块
-> 每个 chunk 必须小于 embedding max token
-> 每个 chunk 生成 embedding
-> 问题生成 embedding
-> 检索 TopK chunk
-> TopK chunk 总长度必须小于 LLM 上下文窗口
-> LLM 生成答案

例如:
Embedding 模型最大输入:8192 tokens
LLM 上下文窗口:128k tokens
chunk-size:800 tokens
topK:4
最终进入 LLM 的上下文大约:800 * 4 = 3200 tokens (比较健康)

如果设置:
chunk-size:6000
topK:10
那就是:6000 * 10 = 60000 tokens(虽然没超过 128k,但检索颗粒度很粗,噪声非常大,引用也不精准。)

总结

max token 是边界
chunk size 是调优参数
overlap 是保险
topK 是召回量
LLM context 是最终容量

建议

chunk size * topK 占 LLM context 的 5% - 20% 比较合适(一般是10%)
因为LLM context 里不只放 RAG chunk,还要放:
system prompt
用户问题
历史对话
工具调用说明
引用格式要求
安全约束
模型输出预留 tokens

实用公式:
RAG上下文预算 = LLM context * 10%
topK = RAG上下文预算 / chunk size

不仅要看公式,还要看评估指标:
Recall@K:正确文档有没有进来
引用准确率:source 是否准确
答案准确率:回答是否正确
噪声率:无关 chunk 是否太多
延迟和成本:上下文越大越贵越慢