首页 / 文章

检索增强生成详解:弥补大语言模型的知识缺陷

为什么大语言模型会出现幻觉和内容过时,以及检索增强生成如何逐步解决这一问题:分块、嵌入、检索以及提示词增强。

发布者:REACTAPP.TOP阅读约 5 分钟1205 词

来源: What LLMs Often Get Wrong At, And How RAG Cures That

大语言模型容易出错的环节

想想期末口试的场景。你在前一天晚上拼命复习所有内容,走进考场后自信地与考官交流,希望一切顺利。但这时考官问道:“你在项目中为何选择那种特定的方法?”顿时全场陷入沉默。

大语言模型也会遇到同样的困境。

它们的设计目的是生成看似有说服力的答案,这意味着它们往往不知道该如何承认“我不知道”。

此外还有知识过时的问题。

想象一下还是那位考官提问:

“既然现在有更好的方法,你为何还要选择那种?”

这时你就无计可施了。

每当大语言模型训练所依据的事实不再反映现实时,就会遇到这个问题。

因此真正的关键问题变成了:如何在大语言模型需要时,为其提供准确的事实?

进入检索增强生成模式

别被名称吓到,这其实只是一个简单的流程:找到相关信息,交给模型,让模型将其转化为答案。

这就是整个理念。

让我们来详细了解这一描述背后的实际操作过程。

问题定义

假设你正在为一家公司开发内部人工智能助手。

该公司有大量文档:员工手册、内部常见问题解答、安全政策等等。

一旦助手投入使用,人们自然会开始使用它。有人输入:

“我有权享受多少天的育儿假?”

问题在于,该模型没有内置对你公司具体政策的认知。你也不能简单地将数百份冗长的文档塞进提示词中就期望得到清晰答案——这样做可能会导致上下文窗口过载、模型混淆以及其他问题。

RAG的实际运作方式

我们并非依赖大语言模型自身的内部知识来回答问题,而是首先从自己的知识库中提取相关资料,再将这些资料传递给大语言模型。

大语言模型利用这些提供的信息来生成答案。

换句话说,模型无需记住所有内容,只需在恰当的时刻获得正确的信息即可。

这就引出了下一个问题:首先该如何判断什么内容是相关的?

检索

针对每个问题都将所有文档发送给大语言模型既浪费资源又效率低下。因此,首先需要一种方法来筛选出相关片段,因为每次扫描所有内容既昂贵又低效。

为此,文档会被拆分成更小的部分,即块。一个块可能涉及产假规定,另一个块可能描述安全流程,还有一个块则可能说明费用报销的方式。

定位正确的块

用户的问题可能会这样表述:“生完孩子后我可以请多少天假?”

而文档本身则可能写着:“员工有权享受26周的产假。”

表述方式不同,但含义完全一致。为弥合这一差距,RAG系统依赖于嵌入向量。

嵌入向量的作用

嵌入向量能将一段文本转化为一组数字,从而编码其含义。含义相似的文本会在这个数值空间中彼此靠近——这是通过所谓的向量距离来衡量的,本质上是一种量化两个向量之间差距的方法。

这些嵌入向量存储在向量数据库中。当有新问题出现时,它也会被转换成嵌入向量,系统随后会搜索最接近的匹配片段。

最终得到一组相关片段,这些片段会被作为辅助上下文传递给大语言模型。

内容增强

确定相关片段后,下一步就是将它们组合起来。

它们会与原始问题一起被插入到大语言模型的上下文窗口中:

Context:
Employees are entitled to 26 weeks of parental leave.

Question:
How long can I stay away from work after having a baby?

此时,大语言模型已拥有准确回复所需的所有信息。

生成阶段

接下来就是大语言模型最擅长的部分:生成实际答案。

它会读取用户的问题以及获取到的上下文,然后生成回复:

“您有权享受26周的育儿假。”

这样整个循环就完成了:获取 → 增强 → 生成。

潜在问题

大语言模型只能依据所获取的上下文进行推理。如果提取到了错误的片段,即便整个流程没有出错,最终答案仍可能不正确。

请考虑以下场景:

问题:“育儿假时长是多少?”

检索到的内容:“在开始休育儿假前30天通知您的经理。”

最终答案:助手告知员工必须在开始休假前整整一个月通知经理——虽然与主题相关,但并未实际回答假期的时长。

提升检索质量

那么如何确保检索步骤能找到正确的资料呢?

这里有几个关键因素:

分块策略:文档的分割方式会影响相关上下文是否完整地保留在同一个分块中。

嵌入质量:更强的嵌入模型有助于将用户的问题与真正能解答它的内容对应起来。

搜索技术:将语义相似度搜索与传统的关键词搜索相结合,有助于同时捕捉含义和精确表述。

重新排序:先筛选出一批初始候选片段,再通过第二次排序找出最实用的那些。

其根本目标很简单:将正确的上下文呈现给大语言模型。

总结

RAG并非什么神奇的技巧。

找到正确的信息,将其交给大语言模型,让模型生成答案即可。

这就是整个机制。

大语言模型无需事先掌握所有信息,它只需要在恰当的时间获得正确的上下文。

这正是RAG的核心原则:垃圾进,垃圾出;优质输入才能产生优质输出。

现在,每当有人提到“RAG这个,RAG那个”时,你就明白他们在说什么了。