15 种高级 RAG 技术 从预检索到生成

作者:扎基·法伊克
2024年3月

作者信息
扎基·法伊克

与 WillowTree 的数据与人工智能研究团队 (DART) 联系:
米歇尔·阿弗里 | AI 部门副总裁
WillowTree,TELUS International 公司的子公司
michelle.avery@willowtreeapps.com

目录

  • 摘要
    1. 预检索与数据索引技术
    1. 检索技术
    1. 后检索技术
    1. 生成技术
    1. 高级 RAG 技术的其他考虑
  • 结论

摘要

我们关于检索增强生成 (RAG) 的入门文章介绍了关键概念,并探讨了 RAG 系统的工作原理。在本白皮书中,我们探索了 15 种高级 RAG 技术,以提高生成式 AI 系统的输出质量和整体性能的鲁棒性。这些高级 RAG 技术极大地扩展了团队微调系统性能的选择。例如,在为一家大型金融服务公司构建安全的对话式 AI 助手时,我们实验了本白皮书中探讨的大多数高级 RAG 技术。这使我们能够测试并识别适当的优化方案,从预检索到生成,利用我们的自动化 RAG 评估管道(见下图)。
请注意,以下大多数技术是在 RAG 驱动的对话式 AI 助手的背景下讨论的。
在这里插入图片描述

1. 预检索与数据索引技术

预检索优化主要包括提高数据索引或知识数据库中信息的质量和可检索性。这里的技术和努力程度在很大程度上取决于数据的性质、来源和规模。例如,优化信息密度可以改善用户体验,并通过用更少的令牌生成更准确的响应来降低成本。但我们如何优化系统间的变化呢?用于旅行行业聊天机器人的检索优化在金融 AI 助手中可能会适得其反,因为每种情况依赖于不同性质的信息和独特的监管框架。

大型语言模型(LLMs)为我们提供了许多在预检索过程中优化信息的方式,允许我们根据目标测试和微调不同的方法。以下是五种值得在预检索阶段探索的基于 LLM 的高级 RAG 技术,包括对主要技术 1 的几种变体和改进。

技术 1:使用 LLM 提高信息密度

通过使用 LLM 处理、清理和标记数据,可以显著提高 RAG 系统的性能。这一改进是因为来自异构数据源(如 PDFs、抓取的网页数据、音频转录)的非结构化数据并不一定适合 RAG 系统,造成以下问题:

  • 信息密度低
  • 不相关的信息和/或噪声
  • 信息重复

信息密度低迫使 RAG 系统在 LLM 上下文窗口中插入更多块,以正确回答用户查询,从而增加令牌使用和成本。此外,低信息密度会稀释相关信息,导致 LLM 可能会错误响应。GPT-4 在使用不超过 70,000 个令牌时对这个问题似乎相对有抵抗力,但其他模型可能不够稳健。

以下是我们在处理 RAG 系统时遇到的一个最近场景:我们抓取了数百个网页作为主要数据源,但原始 HTML 中包含大量不相关的信息(如 CSS 类、头部/脚部导航、HTML 标签、页面间的冗余信息)。即使在程序上剥离 CSS 和 HTML,信息密度仍然很低。因此,为了提高我们块中的信息密度,我们尝试使用 GPT-4 作为事实提取器,从文档中提取相关信息。在剥离 CSS 和 HTML 标签后,我们使用如下的 LLM 调用处理每个抓取的网页,然后将其切分并插入到我们的知识库中:

fact_extracted_output = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {
            "role": "system",
            "content": "您是数据处理助手。您的任务是从 XYZ 公司的抓取网页中提取有意义的信息。这些信息将作为进一步客户咨询的知识库。确保包括所有可能相关的信息,以便 XYZ 公司的客户查询。输出应为文本格式(无列表),段落分隔。",
        },
        {"role": "user", "content": <scraped web page>},
    ],
    temperature=0
)

以下是经过我们管道处理的抓取网页内容的匿名示例。从左侧列开始,我们可以看到原始 HTML 片段的有用信息密度较低。
在这里插入图片描述
在中间的片段中,经过程序化剥离 CSS、JS 和 HTML 后情况有所改善,但仍然没有包含高质量的信息。现在,看看右侧的片段,这是经过 GPT-4 处理的事实提取内容,可以注意到信息密度的显著提升。

我们在块处理和嵌入过程中使用的正是这种格式。值得注意的是,来自单个网页的文本在各个阶段的令牌计数为:

  • 原始 HTML:约 55,000 个令牌
  • 剥离后的 HTML:1,500 个令牌
  • GPT-4 处理后的 HTML:330 个令牌

尽管在程序化剥离 CSS、JS 和 HTML 的过程中,令牌计数减少(减少了 20 倍),但应用于剥离后的 HTML 的 GPT-4 事实提取步骤则将令牌计数进一步减少了 500%。

我们尝试过一种保留 HTML 标签的管道,以防 HTML 的结构中存在某种语义意义,但在我们的特定案例中,RAG 评估指标显示去除标签后性能有所提升。

警告:信息丢失的风险
使用 LLM 增加信息密度的风险在于可能会丢失关键信息。一种减轻这一风险的策略是确保事实提取 LLM 输出的最大大小 a) 不被限制,或 b) 小于输入内容的大小,以防输入内容已经信息密集且 100% 有用。

技术 2:应用层级索引检索

通过利用 LLM 生成的摘要,多层检索系统可以提高搜索效率。层级索引检索的做法使用文档摘要来简化相关信息的识别,以生成响应。前一部分专注于提高信息密度而不丢失相关信息,类似于无损压缩。然而,在生成文档摘要时,LLMs 更类似于有损压缩。

这些摘要文档支持对大型数据库的高效搜索。除了仅创建由文档块组成的单一数据索引外,另一个由文档摘要组成的数据索引创建了一个第一层过滤机制,从而排除与搜索查询无关的文档块。
在这里插入图片描述

技术 3:通过假设问题索引改善检索对称性

LLMs 还可以将文档转化为对嵌入模型和 RAG 系统中使用的查询最优的格式。一种方法是使用 GPT-4 为每个文档生成假设/可能的问答对列表,然后将生成的问题作为嵌入以进行检索的块。

在检索时,系统将同时检索问题及其相应的答案,并将其提供给 LLM。因此,查询的嵌入与生成问题的嵌入之间的余弦相似性可能更高。这种相似性降低了在块处理过程中丢失相关上下文的风险。每个问答对因此是自包含的,理论上将包含所有所需的上下文。

查询与用于检索的文档之间的不对称性是 RAG 系统中的一个常见问题。查询通常是简短的问题,比如:“XYZ 金融机构提供的最佳旅行信用卡是什么?”然而,与该查询相关的文档块通常较长(例如,包含 XYZ 金融机构所提供的所有信用卡详细信息的长段落)。

这个金融服务示例对语义搜索构成了问题:如果查询与文档块有明显的不同(即不对称性过大),语义相似性可能较低,这可能导致搜索结果不佳,并使系统偏向错误的信息。

这是一个图表,说明我们如何使用假设问题索引:
在这里插入图片描述
我们使用的提示如下:

generated_question_answer_pairs = openai.ChatCompletion.create(
 model="gpt-4",
 messages=[
 {
 "role": "system",
 "content": "分析提供的文本或来自Example bank网站的html,并创建Example bank客户可能会向聊天机器人询问的关于文本中信息的问题。如果问题没有有用的/信息性的答案,您不应创建该问题。对于每个问题,请根据文本中的信息严格制定答案。使用Q:表示问题,A:表示答案。请不要写其他评论。问题不应引用html部分或链接。请尽可能创建多个有用的问答配对。",
 },
 {"role": "user", "content": <抓取的网页>},
 ],
 temperature=0)

使用大语言模型生成 问答对 对于RAG基准测试和评估也很有帮助。这些问答对可以作为黄金标准数据集,用于RAG系统应能回答的问题和预期的响应。至于减少块大小,这种方法的有效性有限,因为块必须达到最低大小以保持足够的上下文信息,以便有用。即使块大小较大,块化过程也总存在丢失关键上下文信息的风险。可以通过根据块大小和重叠比率等块化考虑进行实验来减轻(但不能消除)这种风险。

注意事项:假设问题索引的风险和替代方案

使用这种先进的RAG技术仍然存在信息丢失的风险。对于信息密集的文档,大语言模型可能无法生成足够的问答对,以覆盖用户对文档信息的各种查询。此外,根据文档存储的大小,使用大语言模型处理和转换每个文档以减轻查询与文档的不对称可能会成本高昂。最后,根据RAG系统的流量,可能更有效的解决方案是称为假设文档嵌入(HyDE)的反向方法,以转换用户查询而不是文档。我们将在下面的检索技术部分进一步讨论HyDE。

技术4:使用大语言模型去重数据索引中的信息

将大语言模型用作信息去重器可以提高数据索引的质量。大语言模型通过将块浓缩为更少的块来去重信息,从而提高了获得期望响应的可能性。

这是一个有价值的技术,因为根据具体情况,数据索引中的信息重复可能有助于或阻碍RAG系统的输出。一方面,如果回答查询所需的正确信息在生成响应的大语言模型的上下文窗口内重复存在,则增加了大语言模型得到理想响应的可能性。

反之,如果重复的程度稀释甚至完全挤出了大语言模型上下文窗口中的所需信息,用户可能会收到无答案的响应——更糟的是,可能会得到RAG系统的AI幻觉。

我们可以通过在嵌入空间中对块进行k-means聚类来去重信息,使每个块的聚类中总的令牌计数适合大语言模型的有效上下文窗口。从这里,我们可以要求大语言模型简单地输出一组浓缩的新块,去除重复的信息。如果给定聚类包含N个块,我们应期望此去重提示输出不超过N个新块,其中任何冗余信息在新块中被移除。

下图显示了信息去重前后嵌入空间中的块。
在这里插入图片描述

注意:此过程使得在您的RAG系统中包含任何引用系统变得更加困难,因为新块可能包含来自多个文档的信息。此外,信息丢失的风险仍然存在,信息可能会因在检索系统中被重复而未受到强调。

技术5:测试和优化您的块策略

以上技术突显了块策略的重要性。但最佳块策略特定于使用案例,许多因素影响它。找到最佳块策略的唯一方法是广泛进行A/B测试。

以下是测试时需要考虑的一些重要因素:

嵌入模型

不同的嵌入模型在不同输入大小下具有不同的性能特征。例如,来自句子转换器的嵌入模型在嵌入单句时表现优异,而text-embedding-ada-002则可以处理更大的输入。块大小理想上应根据所用嵌入模型进行调整,反之亦然。

要嵌入的内容的性质

根据文档的信息密度、格式和复杂性,块可能需要达到一定的最小大小,以包含足够的上下文,以便对大语言模型有用。然而,这是一个平衡的过程。如果块太大,它们可能会稀释嵌入中的相关信息,从而降低该块在语义搜索中的检索概率。

如果文档不包含自然的断点(例如,带有子标题的教科书章节),且文档是基于任意字符限制(例如,500个字符)进行块化,则可能会有关键上下文信息被拆分的风险。在这种情况下,应该考虑重叠。例如,具有50%重叠比率的块策略意味着来自文档的两个相邻500个字符的块将重叠250个字符。考虑信息重复和嵌入更多数据的成本时,应考虑重叠比率。

要嵌入的查询的复杂性或类型

如果您的RAG系统处理以大段落形式提出的查询,那么将数据块划分为大段落是合理的。然而,如果查询仅为几个单词,则大块可能不利于最佳信息检索。

大语言模型的能力、上下文窗口和成本

虽然GPT-4似乎能够处理许多大块,但较小的生成模型可能表现不佳。此外,对许多大块进行推理可能成本高昂。

要嵌入的数据量

嵌入必须存储在某处,较小的块大小会导致相同数据量的嵌入数量增加,这意味着存储需求和成本增加。更多的嵌入也可能增加进行语义搜索所需的计算资源,具体取决于您的语义搜索实现方式(精确最近邻与近似最近邻)。

我们的经验

通过利用我们基于大语言模型的RAG评估系统进行广泛的A/B测试,我们能够评估每个使用案例的最佳块策略。

我们测试了以下块策略,主要针对经过GPT-4处理的信息密集型文档:
• 1,000字符块,200字符重叠
• 500字符块,100字符重叠
• 段落(处理文档中存在段落断点)
• 句子(使用spaCy分割)
• 假设问题(从上述生成的假设问题索引中嵌入问题)

在构建我们的金融服务AI助手时,我们发现块策略的选择影响不大(见下表结果)。1,000字符块与200字符重叠策略的表现略优于其他策略。

块策略(插入到GPT-4提示中的3,500个令牌的块)结果(GPT-4对真实度的评估与黄金标准响应相比 评分范围1–5)
1,000字符块,200字符重叠4.34
假设问题(从上述生成的假设问题索引中嵌入问题)4.23
段落(处理文档中存在段落断点)4.2
500字符块,100字符重叠4.19
句子(使用spaCy分割)3.96

我们对块策略为何对我们的用例影响显著的假设包括:
• 我们构建的RAG应用领域不太复杂
• 数据集过小,块策略对其影响不大
• 我们使用GPT-4提高信息密度的处理产生了最大影响

然而,仅需对我们的应用进行一次更改——例如,构建更复杂的领域——我们可能会看到不同的结果。

其他预检索优化技术

我们迫切希望测试更多先进的RAG技术,用于预检索和数据索引。这些包括递归检索,支持通过迭代一个检索步骤的输出并将其用作另一个步骤的输入来处理复杂的多步骤查询。通过句子窗口和父子块检索进行上下文丰富也引起了我们的兴趣,作为改进搜索和丰富大语言模型响应的方式。

以下是您提供文章的中文翻译:

2. 检索技术

检索优化涵盖了先进的RAG技术和策略,旨在推理时改善搜索性能和检索结果,在检索发生之前进行优化。

技术6:使用大语言模型优化搜索查询

搜索系统通常在搜索查询以特定格式呈现时工作得最为有效。大语言模型是优化用户搜索查询以适应特定搜索系统的强大工具。为了说明这一点,让我们来看两个例子:优化简单的搜索查询和用于对话系统的查询。

简单搜索查询优化

假设用户想在example-news-site.com上搜索所有关于比尔·盖茨或史蒂夫·乔布斯的新闻文章。他们可能会在谷歌中输入如下内容:
(非最优谷歌搜索查询):

关于比尔·盖茨或史蒂夫·乔布斯的文章来自example-news-site

可以使用大语言模型来针对谷歌优化此搜索查询,利用谷歌提供的一些高级搜索功能。
(最优谷歌搜索查询):

比尔·盖茨 OR 史蒂夫·乔布斯 -site:example-news-site.com

这种方法对简单查询有效,但对于对话系统,我们需要提高要求。

对话AI系统的搜索查询优化

尽管上述简单搜索查询的优化可以视为一种增强,但我们发现使用大语言模型来优化对话系统中的RAG搜索查询至关重要。

对于只能进行单轮对话的简单问答机器人,用户的问题同时也是检索信息以增强大语言模型知识的搜索查询。但在对话系统中情况变得复杂。以下是一个示例对话:

客户:“你们的CD利率是多少?”
助手:“我们的利率是XYZ。”
客户:“哪个信用卡适合旅行?”
助手:“XYZ信用卡适合旅行,原因是ABC。”
客户:“告诉我更多关于那利率的信息。”

要回答用户的最后一个问题,可能需要进行语义搜索,以检索有关特定XYZ旅行信用卡的信息。那么,搜索查询应该是什么呢?仅仅使用最后用户的信息是不够具体的,因为金融机构可能有许多产生利息的产品。在这种情况下,语义搜索将产生大量潜在无关的信息,可能会淹没大语言模型上下文窗口中的实际相关信息。

那么使用整个对话记录作为语义搜索查询怎么样?这可能会产生更好的结果,但仍然可能包含与用户在对话中的最新问题无关的CD信息。

到目前为止,我们发现的最佳技术是使用大语言模型生成最佳搜索查询,给定对话作为输入。对于上述示例对话,提示看起来像这样:

const messages = [...]
const systemPrompt = `你正在检查Example bank的客户与Example bank聊天机器人的对话。需要查找Example bank的政策、产品或服务文档,以便聊天机器人可以回复客户。请构建一个搜索查询,以检索相关文档以回应用户。`
let optimizedSearchQuery = await this.textCompletionEngine.complete(
 [
 { role: 'system', content: systemPrompt },
 { role: 'user', content: stringifyChatConversation(messages) }],
 'gpt-4',
 {
 temperature: 0,
 maxTokens: 100,
 },
);

此技术的一个变体是查询扩展,其中多个子搜索查询由大语言模型生成。这种变体在结合来自多个不同结构数据存储的搜索结果(例如,SQL数据库 + 单独的向量数据库)的混合检索系统中的RAG系统中特别有用。其他提示工程技术,如回退提示和HyDE(将在下一节讨论)也可以与这种方法结合使用。

技术7:使用假设文档嵌入(HyDE)修复查询与文档的不对称性

如我们在预检索技术部分提到的,我们可以利用大语言模型解决查询与文档的不对称性,并改善检索结果。通过应用HyDE,我们可以在检索阶段实现更大的语义相似性。
在这里插入图片描述

我们通过在检索发生之前的推理时间要求大语言模型生成一个假设文档或文档块,以回答查询。以下是我们使用的一个示例提示,结合1000字符块策略生成用于语义搜索的假设文档:

prompt = '请生成一段1000字符的文本,假设可以在Example bank的网站上找到,可以帮助客户回答他们的问题。';

这个假设文档或块随后被嵌入,并用来代替用户查询进行语义搜索。这个想法是,在具有查询与文档不对称性的RAG系统中,假设文档或块将与所需块具有更大的语义相似性,而非用户查询本身。

技术8:实施查询路由或RAG决策者模式

查询路由器是我们看到的更受欢迎的先进RAG技术之一。其思想是使用大语言模型将搜索查询路由到适当的数据库,当RAG系统使用多个数据源时。这涉及在提示中预定义路由决策选项,并解析大语言模型的路由决策输出,以便在代码中使用。

为了降低成本并提高我们RAG的质量,我们开发了一种我们称之为RAG决策者模式的此技术的变体。

并非所有查询都需要进行RAG查找。因此,识别大语言模型何时可以独立回答查询而不依赖外部知识会提高效率。一个基本示例是,当用户提出一个不需要RAG信息的简单问题时,例如:“嗨,这是客户支持吗?”
在这里插入图片描述
一个不太明显的例子是,当回答用户查询所需的所有信息已存在于最近的对话历史中。在这种情况下,大语言模型(LLM)只需重复或稍微改写之前所说的内容。例如:“你能把你上条消息翻译成西班牙语吗?”或“请像我五岁一样解释一下最后那条消息。”这两个查询不需要进行新的检索,因为LLM可以利用其内置能力来回答这些查询。

在我们的案例中,当RAG决策者判断某个用户查询不需要完整的RAG查找时,我们将典型的RAG提示替换为不提及RAG结果或文档的提示。

另一种方法可能是让单个LLM代理决定是否通过函数调用或其他机制(例如,自我RAG中引入的反思令牌)进行检索步骤,而不是委托给单独的LLM调用。

3. 后检索技术

后检索优化涵盖了在检索发生后但在最终响应生成之前所采用的策略或技术。

在这一点上,一个关键的考虑因素是:即使已经部署了所有预检索和检索策略,仍然无法保证我们检索到的文档包含LLM回答查询所需的所有相关信息。这是因为检索到的文档可能是以下任意或全部类别的混合:

  • 相关文档(即包含回答用户查询所需信息的文档)
  • 相关但不相关的文档
  • 无关且不相关的文档
  • 反事实文档(即与正确的相关文档相矛盾的文档)

Cuconasu等人的研究表明,相关但不相关的文档对RAG系统的危害最大。研究人员发现“在某些情况下,准确性降低超过67%。更重要的是,仅添加一份相关文档就会导致准确性急剧下降,峰值达25%……经验分析表明,引入语义上对齐但不相关的文档增加了复杂性,可能会误导LLM远离正确的响应。”

也许更令人惊讶的是,同样的研究人员发现,与查询无关且不相关的文档“在放置得当时,实际上有助于提高这些系统的准确性。”构建RAG系统的人应关注此类研究,同时对自己的系统进行全面的A/B测试,以确认研究结果是否适用。

到目前为止,我们很幸运不需要在客户的RAG系统中进行后检索优化。尽管如此,以下后检索技术引起了我们的兴趣,所有RAG从业者都应当关注。

技术9:通过重排名优先处理搜索结果

Cuconasu等人的研究还表明,在提示中将最相关的文档放在离查询最近的位置,可以改善RAG性能。重排名模型优化给定查询的块搜索结果的优先级。这种技术与混合检索系统和查询扩展结合使用时效果较好。

技术10:通过上下文提示压缩优化搜索结果

LLM可以处理每个块中的信息,以过滤、重新格式化甚至压缩最终生成提示中的信息。LLMLingua是这种方法的一个有前景的框架。LLMLingua使用小型语言模型(如GPT2-small或LLaMA-7B)来检测和移除提示中的不重要令牌。它还使得在黑箱LLM中使用压缩提示进行推理成为可能,实现高达20倍的压缩,性能损失最小。LongLLMLingua进一步扩展了这一点,使其适用于RAG系统,通过考虑输入查询进行压缩,移除在一般情况下和与特定查询不重要的令牌。

值得注意的是,尽管提示不可读,GPT-4不仅能完全理解并使用压缩提示回答查询(例如,作为RAG的一部分),还可以用于反向或解压输入。

技术11:使用纠正RAG评分和过滤检索到的文档

纠正RAG是一种由Yan等人首次提出的方法,通过训练T5-Large模型来识别给定问题的RAG结果是正确/相关的、模糊的或不正确的,然后将结果提供给LLM以生成最终响应。未通过被分类为正确/相关或模糊的阈值的RAG结果将被丢弃。

与通过自我RAG使用微调Llama-2 7B模型的批评方法相比,使用T5-Large模型要轻量得多,可以与任何大型语言模型结合使用。

4. 生成技术

生成优化涉及改进生成最终用户响应的LLM调用。这里最简单的改进是对提示进行迭代,确定插入生成提示的最佳块数量。我们对1000、3500和7000个令牌的检索上下文/块进行了A/B测试。我们发现,将3500个令牌的检索上下文插入RAG提示的效果略优于其他选项。我们怀疑这一发现并非普遍适用,每个用例可能有不同的最佳数量。

在这一点上,可以考虑评估和改进LLM处理其可能接收的不同类型文档(相关、相关但无关等)的能力。理想情况下,我们创建Yoran等人所称的“检索鲁棒的LLM”。这意味着:

  • 当相关时,检索上下文应提高模型性能
  • 当无关或甚至是反事实时,检索上下文不应损害模型性能

在他们关于链式记录(CoN)的文章中,研究人员Wenhao Yu等人增加了检索鲁棒性的另一个特征:
“未知鲁棒性:检索增强语言模型承认自身局限性的能力,当面临其没有相应知识回答的查询时,回应‘未知’,而相关信息未在检索到的文档中找到。”

以下是我们发现的一些生成技术,用于提高检索鲁棒性,但尚未实施。

技术12:通过思维链提示过滤噪声

思维链(CoT)提示提高了LLM在存在噪声或无关上下文时通过推理得出正确响应的可能性。Wenhao Yu等人进一步提出了这一思想,提出链式记录,他们微调了一种模型以生成“每个检索文档的顺序阅读笔记”。这一过程允许对文档相关性进行深入评估,并帮助综合这些信息以构建最终答案。微调的模型是LLaMA-7B,训练数据使用了ChatGPT创建。

技术13:通过自我RAG使系统具有自我反思能力

自我RAG是另一种基于微调的方法,训练语言模型在生成期间输出特殊的反思令牌。反思令牌可以是检索令牌或批评令牌。研究人员Asai等人对他们的方法进行了更详细的描述:

“给定一个输入提示和先前的生成,自我RAG首先确定增强继续生成是否有帮助。如果有,它输出一个检索令牌,按需调用检索模型。随后,自我RAG并行处理多个检索到的段落,评估其相关性,然后生成相应的任务输出。接着,它生成批评令牌,对自身输出进行批评,并在事实性和整体质量上选择最佳的输出。”

技术14:通过微调忽略无关上下文

鉴于LLM通常没有明确针对RAG进行训练或微调,微调模型以适应此用例显然可以提高模型忽略无关上下文的能力。Yoran等人经验性地证明,甚至1000个示例就足以训练模型,使其对无关上下文具有鲁棒性,同时在相关示例上保持高性能。

技术15:使用自然语言推理提高LLM对无关上下文的鲁棒性

Yoran等人还探讨了使用自然语言推理(NLI)模型进行无关上下文识别。研究人员指出,在某些情况下,无关的RAG上下文会对LLM性能产生负面影响。NLI模型可以用于过滤无关上下文。该技术的工作原理是仅在假设(即使用问题和LLM生成的答案)被分类为由前提(即检索的上下文或RAG结果)包含时,使用检索的上下文。

5. 高级RAG技术的其他考虑

如本白皮书所示,有许多技术可用于优化您的RAG系统,随着企业不断推动生成AI应用的能力,毫无疑问还会发现更多技术。在研究潜在技术时,请牢记以下考虑事项。

输入和输出的保护措施

在RAG系统中,减轻与主题无关或恶意的越狱输入和输出可能很困难,但这至关重要,尤其是在金融服务或医疗等高度监管的行业中。我们认为,最佳的方法是采取深度防御策略,并通过严格的红队测试进行加固。我们在以下文章中详细描述了一些已采用的策略:

  • 针对主要RAG聊天机器人LLM输出进行LLM审查
  • 使用部分意图分类,不仅用于常规查询,还用于捕捉潜在的越狱尝试
评估您的RAG系统

拥有一种可扩展的、自动化的方法来评估您的RAG系统的质量和准确性,对于:

  • 确保您的系统随着时间的推移在改善并防止退步
  • 进行A/B测试(例如,针对提示的更改)

我们在RAG基准测试的博客中详细探讨了评估策略。

幻觉率

AI幻觉仍然是RAG系统的一个重大风险,这意味着检测、测量和减轻幻觉是构建安全可靠的RAG系统的另一个关键部分。可以通过学习如何检测AI幻觉开始。

其他潜在改进

关于RAG的文献广泛且不断扩展。有一些我们尚未探索但非常感兴趣的主题,包括:

  • 微调嵌入模型
  • 使用知识图谱(即GraphRAG)
  • 使用长上下文LLM(例如,Gemini 1.5或GPT-4 128k),而不是分块和检索

我们将在使用案例允许的情况下测试并报告这些及其他先进的RAG技术。

结论:构建和微调您的RAG系统所需的一切

随着检索增强生成系统的快速演变,它为提升对话AI和其他生成AI应用提供了许多机会。我们的实验和研究突显了提高以下方面的先进RAG技术的潜力:

  • 信息密度
  • 检索准确性
  • 用户响应质量

这些技术如果正确实施,可以为企业带来更大的成本效益和更好的客户体验。然而,为了跟上快速出现的最佳实践,软件工程师和数据科学家需要及时可靠的资源可供参考。

请查看WillowTree的数据与AI知识中心,了解最新的RAG、LLM和生成AI研究,我们在此发布所有前沿AI内容,从研究论文到案例研究。

联系信息:ai@willowtreeapps.com | 1-888-329-9875 | willowtreeapps.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值