目录

一、 核心原理:万物皆可“向量化”

语义的数学表达

检索的本质:计算距离

二、 数据预处理:分块策略的艺术

为什么要切分?

常见的分块方式

三、 核心痛点:分块带来的“语义截断”

指代关系的断裂

全局视角的缺失

四、 进阶优化:如何修补RAG的短板?

上下文窗口扩展

语义增强与重写

全局检索增强


想象一下,你把一本厚重的技术手册直接扔给AI,然后问它:“配置参数X是多少?”如果AI没有“过目不忘”的本事,它该如何在茫茫字海中精准定位答案?

这就是RAG(检索增强生成)要解决的核心问题。

一、 核心原理:万物皆可“向量化”

AI无法像人类一样理解文字的字面含义,它只能通过数学来“感知”语义。RAG的第一步,就是利用Embedding模型(嵌入模型)将文字转化为机器能读懂的“坐标”。

  1. 语义的数学表达

Embedding模型的作用是将一段文本映射到高维向量空间中。

  • 输入:一段文字(如“IT陈喜欢吃西瓜”)。

  • 输出:一个多维数组(向量),例如 [0.12, -0.98, 0.55, ...]

在这个高维空间里,语义相似的内容,其向量坐标的距离会非常近。

  • “猫”和“狗”的向量距离,会比“猫”和“汽车”的距离更近。

  1. 检索的本质:计算距离

当用户提问时,RAG系统会执行以下操作:

  1. 将用户的问题也转化为一个向量。

  2. 在向量数据库中,计算这个问题向量与库中所有文档片段的相似度(通常使用余弦相似度或欧氏距离)。

  3. 取出距离最近的Top-K个片段,作为“上下文”喂给大模型。


二、 数据预处理:分块策略的艺术

现实中的文档往往长达数千页,直接将其转化为一个向量会导致信息过于稀释,且超出模型的上下文窗口限制。因此,我们需要Chunking(文本分块)。

  1. 为什么要切分?
  • 精度控制:如果文档太长,检索回来的内容可能包含大量无关噪声。切分得越小,检索越精准。

  • 成本控制:大模型的上下文窗口(Context Window)是有限的,我们需要只喂给它最相关的片段。

  1. 常见的分块方式
  • 固定大小切分:按字符数或Token数强行切分(如每500字一段)。

  • 按结构切分:按段落、标题或Markdown层级切分。

  • 按语义切分:利用算法识别句子边界,尽量保持语义完整。


三、 核心痛点:分块带来的“语义截断”

虽然分块是必须的。无论采用哪种策略,都难以完美适配所有复杂场景,最典型的问题就是上下文丢失。

  1. 指代关系的断裂

让我们看一个具体的例子:

原文:“我是IT陈。我喜欢吃西瓜。”

如果我们简单地按句子进行切分:

  • 块A:“我是IT陈。”

  • 块B:“我喜欢吃西瓜。”

当用户询问“IT陈喜欢吃什么?”时,系统会将问题向量化。此时,块B中的“我”失去了与块A中“IT陈”的指代联系。在向量空间中,“我喜欢吃西瓜”与“IT陈喜欢吃什么”的语义距离可能会变远,导致检索失败。AI只看到了“喜欢吃西瓜”,却不知道这个“我”是谁。

  1. 全局视角的缺失

RAG本质上是“管中窥豹”。如果用户问:“这篇文章里一共出现了多少次‘我’字?”或者“请总结全书的核心思想”,基于局部切片的检索往往无能为力,因为它缺乏对文档整体的全局视野。


四、 进阶优化:如何修补RAG的短板?

针对上述缺陷,业界已经演化出了多种优化策略,让RAG更加智能。

  1. 上下文窗口扩展

为了解决指代丢失问题,我们在切分时不能“一刀切”,而要采用滑动窗口或重叠切分:

  • 重叠策略:在切分块A和块B时,保留一部分重叠内容(如50个字符)。这样,“我是IT陈”这句话可能会同时出现在块A的结尾和块B的开头,保证了语义的连贯性。

  • 父子索引:检索时匹配小块(精准),但送给大模型时使用包含该小块的更大文本块(完整上下文)。

  1. 语义增强与重写
  • 指代消解:在存入向量库之前,利用大模型对文本块进行预处理。例如,将“我喜欢吃西瓜”自动改写为“IT陈喜欢吃西瓜”,显式地补充主语,拉近向量距离。

  • 假设性问题生成:让大模型阅读文本块,反向生成“这段文字能回答什么问题”,并将这些问题也存入向量库,提高检索命中率。

  1. 全局检索增强

针对“全文总结”类问题,可以采用文档摘要索引:

  • 为每个文本块生成一个摘要。

  • 为整篇文档生成一个高层级的摘要。

  • 检索时,先匹配高层摘要,再下钻到具体细节,从而赋予RAG“上帝视角”。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐