一、RAG 是什么,为什么需要它?
RAG(Retrieval-Augmented Generation,检索增强生成)解决的是大模型的一个根本性缺陷------幻觉问题。大模型的知识来源于训练数据,训练完成后知识就固化了,对于私有领域知识、最新信息、或者专业细节,它往往会"编造"一个听起来合理但实际错误的答案。
RAG 的解法是:在把问题丢给大模型之前,先去一个外部知识库里检索相关内容,把检索结果和原始问题拼在一起,组成一个更丰富的提示词,再交给大模型回答。这就像我们读论文时,遇到不懂的地方会去翻引用的参考文献,大模型也一样,RAG 给它提供了一个"参考文献库"。从本质上说,RAG 是提示词工程的一种扩展。
二、Embedding Model:语义理解的基石
Embedding Model 是一种将高维数据(如文本、图像等)转换为低维连续向量表示(即嵌入向量)的机器学习模型。这些向量能够捕捉数据的语义或特征,使相似的对象在向量空间中距离较近。
用超市水果推荐来理解:把苹果、梨、香蕉分别用"甜度、酸度、脆度"三个维度表示成向量,然后用欧氏距离计算哪两种水果最相似。苹果 [0.8, 0.4, 0.7] 和梨 [0.7, 0.2, 0.6] 的距离约 0.24,和香蕉 [0.9, 0.1, 0.3] 的距离约 0.51,所以顾客买了苹果推荐梨更合适。这就是向量化的直觉------让语义相近的内容在数字空间里也靠得更近。
Embedding Model 在 RAG 中发挥两处作用: 一是对用户的 Prompt 进行向量化用于检索,二是对知识库文档的每个 Chunk 进行向量化存入向量数据库。
为什么不能用 LLM 替代 Embedding Model? 两者训练目标根本不同。Embedding Model 专门优化语义相似性捕捉;而 LLM 的训练目标是预测下一个词,专注于生成流畅的文本序列。LLM 的训练目标没特意往语义精度上靠,所以它没法完全顶替 Embedding Model------前者提供可靠的语义底子,后者负责流畅输出,二者结合才更稳。
重要实践原则:同一个 RAG 系统中,Embedding Model 不能混用。 不同模型输出的向量维度不同(如 Google text-embedding-004 是 768 维,Voyage voyage-3 是 1024 维),混用会导致检索完全失效。选型可参考 Huggingface 上的 MTEB 榜单。
三、Chunk 分块------RAG 的"刀法"
知识库中的文档往往很长,如果整体向量化会丢失大量语义细节,因此必须先切块再向量化。块的大小直接影响检索质量:切太碎信息丢失,切太大检索不准。
文章介绍了八种分块策略:
刀法一:固定大小分割
每隔固定数量的 token(如 200 个)切一刀,简单快速,但可能在句子中间截断,语义不完整。适合快速原型测试、结构松散的纯文本。
刀法二:句子级分割
按句号、问号等标点切割,保持句子完整性,语义连贯性比固定分割好。但遇到超长句子时会有问题。适合新闻、博客类文档。
刀法三:段落级分割
按 \n、\r 等换行符切割,语义强,操作简单。缺点是段落长短不一,短段落信息量少,长段落细节可能被淹没。适合报告、书籍等结构清晰的文档。
刀法四:递归分割
定义一个分隔符列表,从粗到细递归切割------先按段落/标题切,再按句子切,直到达到目标大小(如 300~500 token)。灵活且充分利用文档结构,但计算量大,分隔符列表需要调优。适合 Markdown、PDF 等混合结构文档。
刀法五:滑动窗口分割
固定窗口大小,每次切割后向前滑动一段距离,使相邻块之间有重叠内容,避免信息在边界处断裂。代价是 Chunk 数量增多,存储和计算成本上升。适合小说、日志等连续叙述型文档。
刀法六:语义分割
不依赖任何规则,通过计算相邻句子的向量相似度来判断语义是否发生了转变,相似度骤降的地方就切开。最智能,精度最高,但需要向量化和相似度计算,算力成本高,小文档用这个有点"杀鸡用牛刀"。适合科研论文等复杂主题文档。
刀法七:父子分割
"父亲引路、孩子补刀"------先切成较大的"父块"(段落、章节),再在父块内部切出更小的"子块"(句子、短语),两者建立树状关联关系。检索时先定位父块,再拉取子块补充细节,兼顾了检索效率和内容细节。避免了纯用小 Chunk 召回零散片段、纯用大 Chunk 淹没细节这两个极端。缺点是实现复杂,需要额外索引。适合法律文书、医疗档案等长文档。
刀法八:文档特定分割
根据文档自身的结构符号(如 Markdown 的 #、## 标题层级)来决定切割位置,切出来的 Chunk 天然带有层次感和语义完整性。速度快,向量化质量高,但前提是文档必须有格式。适合 API 文档、HTML 页面、Wiki 等结构化文档。
四、如何选择合适的"刀法"?
没有万能的策略,核心是数据驱动的实验:确定召回率、精确率、忠实度、答案相关性等评估指标 → 从真实知识库抽取 10~20 个代表性文档 → 准备 50~100 个测试问题及 ground truth → 按策略分块、向量化、检索、生成、收集指标 → 多轮迭代取平均值后对比选优。
作者的经验总结:80% 靠实验,20% 靠经验,开始动手就赢了一半。
核心要点速记
RAG 的质量很大程度上取决于分块策略的选择,而分块策略的选择没有银弹,需要结合文档类型、查询需求和系统约束,通过小样本实验来迭代确定。Embedding Model 是语义检索的基础,必须统一使用,不能混用。父子分割和语义分割是相对高级的策略,在复杂场景下效果更好,但实现成本也更高。