RAG 的核心目的,是让 AI 能利用训练数据之外的知识,比如企业内部文档、最新资料或私有知识库。它的做法是:先把长文档切分成一个个较小的文本片段,也就是 Chunk,再把它们向量化、存进向量数据库,用户提问时检索出最相关的片段,交给 LLM 生成回答。

那为什么一定要分块?常见大小有 512、8192 这些,原因主要有四点:
第一,嵌入模型有 token 限制。文本要转成向量,必须过 embedding 模型,比如 text-embedding-ada-002、BGE,这些模型都有最大输入长度,长文档塞不进去,所以必须切。
第二,分块后检索更准。向量本质上是语义的压缩表示,文本越长,语义越糊。切成小块,每个向量语义更集中,更容易精准命中相关段落,也方便给出引用来源。
第三,LLM 上下文窗口有限。检索回来的内容要拼进 prompt 给模型,太长会超窗口,还会让模型失去焦点,容易跑偏或产生幻觉。
第四,分块能降本提速。片段小了,向量计算、存储和检索的开销都更小,响应更快,成本和延迟都更低。

总结一句:分块本质上是在检索精度和上下文完整性之间做权衡——块太小语义不完整,块太大检索不精准,所以实际系统里通常要根据文档类型和查询特点去调块大小和重叠量。

 “你怎么选块大小”:一般先看 embedding 模型的最大长度,再结合文档结构,比如按段落、标题切,必要时加 10%–20% 重叠避免边界信息丢失;如果检索要求高,还可以用小块检索、大块返回的父子块策略。