跳至主要内容

高级 RAG 技术

学习密集检索、重排序或多步推理等高级 RAG 方法,以应对幻觉或歧义等问题。
Stanislav Karzhev
Stanislav Karzhev

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

检索增强生成(RAG)将文档检索与自然语言生成相结合,能够生成更准确且具备上下文意识的回答。

尽管基础 RAG 有效,但它在处理复杂查询、幻觉问题以及多轮对话中的上下文保持方面仍显不足。

在本文中,我将探讨通过提升检索准确性、生成质量和整体系统性能来应对这些挑战的高级技术。

如果您正在为面试做准备,别忘了查看这篇RAG 面试问答 30 题精选文章。

基础 RAG 系统的局限

基础 RAG 实现有其用武之地,但在更高要求的场景中也存在明显局限。

幻觉

最突出的一类问题是幻觉,即模型生成事实不正确或缺乏检索文档支持的内容。这会削弱系统的可靠性,尤其是在医疗或法律等要求高度准确的领域。

缺乏领域特异性

标准 RAG 模型在处理特定领域查询时可能吃力。如果不针对专业领域的细微差别定制检索与生成流程,系统容易检索到无关或不准确的信息。

处理复杂或多轮对话

另一大挑战是管理复杂的多步查询或多轮对话。基础 RAG 系统常难以在交互间保持上下文,导致回答零散或不完整。随着用户查询日益复杂,RAG 系统也需相应进化以应对这种复杂性。

基础 RAG 系统:起伏与权衡

图示由 napkin.ai 生成

高级检索技术

高级检索技术侧重于提升检索文档的相关性与覆盖面。这些技术包括密集检索、混合搜索、重排序以及查询扩展,旨在弥补基于关键词检索的不足。

密集检索与混合搜索

密集检索与混合搜索是提升检索准确度和相关性的关键方法。诸如 TF-IDF 或 BM25 等方法在查询与文档表述不同的情况下,常难以把握语义。

密集检索(如 DPR,Dense Passage Retrieval)利用深度学习将查询与文档映射为密集向量表示,从而捕捉超越精确关键词匹配的文本语义。

混合搜索将稀疏与密集检索结合,通过关键词匹配与语义相似度的融合来平衡精确率与召回率,适用于更复杂的查询。

重排序

重排序是一种在生成组件接收前对检索结果进行精炼的高级技术。典型 RAG 系统的初始检索阶段可能得到一组相关性不一的文档。

重排序的作用是重新排列这些文档,使最相关的内容优先供语言模型使用。重排序方法既可基于简单的查询-文档相似度打分,也可采用训练来预测文档相关性的更复杂的机器学习模型。

您可以在这篇教程中学习如何实现重排序:使用 RankGPT 进行 RAG 重排序。

查询扩展

查询扩展通过为用户查询补充更多术语来提升检索到相关文档的概率。常见方式包括:

  • 同义扩展:在原始查询中加入同义词或近义词,以覆盖用词不同但表达相近含义的文档。
  • 概念扩展:将查询扩展到更广泛或相关的概念,以帮助发现更多元但仍然相关的文档。

例如,若原始查询是“医疗领域的人工智能”,查询扩展可加入“AI”“机器学习”或“健康科技”等相关词,以扩大检索范围。

优化 RAG 系统的相关性与质量

在 RAG 系统中,仅有检索还不够,确保检索文档的相关性与质量是提升最终输出的关键。为此,精炼与过滤检索内容的高级技术至关重要。

这些方法能降低噪声、提升相关性,并在生成过程中将语言模型聚焦于最重要的信息。

高级过滤技术

高级过滤技术通过使用元数据或基于内容的规则排除无关或低质量文档,确保只传递最相关的结果。

  • 基于元数据的过滤:可根据日期、作者、领域或文档类型等元数据进行过滤。在法律或医疗应用中,这能确保仅使用最新或最权威的来源。
  • 基于内容的过滤:评估文档本身内容,应用规则排除不满足指定相关性阈值的文档。也可过滤与查询语义相似度低的文档,或不包含与查询相关关键短语或术语的文档。

上下文蒸馏

上下文蒸馏是对检索到的文档进行摘要或压缩的过程,以便让语言模型聚焦于最重要的信息片段。当检索文档包含过多无关内容,或查询涉及复杂的多步推理时,这尤为有用。

通过蒸馏上下文,系统会从检索文档中提取关键信息与最相关的段落,确保语言模型获得最清晰、最切题的素材。

生成过程优化

在检索到相关文档并完成精炼后,RAG 系统的下一步是生成过程。优化语言模型的生成方式对于确保准确性、连贯性与相关性至关重要。

提示工程

提示工程 指为语言模型设计与构建输入提示的过程。提示的质量直接影响模型的输出质量,因为提示为生成任务提供初始指令或上下文。

RAG 的提示工程

图示由 napkin.ai 生成

为优化提示,开发者可以尝试以下几种方法。

提供更多上下文

加入额外信息(如明确指令或关键词)可引导模型生成更准确且更契合上下文的回答。例如,在医疗 RAG 系统中,提示可明确要求模型基于检索文档提供诊断摘要。

清晰地组织查询

结构良好、指令清晰简洁的提示有助于降低歧义,促成更聚焦的生成结果。将提示表述为直接的问题或请求往往更有效。

测试不同提示形式

通过迭代不同的提示形式(如重述问题、调整具体程度或提供示例),可找出最适合特定用例的提示模板。

在这篇博客中了解更多:提示优化技术。

多步推理

许多查询,尤其在科研、法律或技术支持等领域,涉及多个步骤或需要复杂推理。多步推理是指系统将复杂查询拆解为可管理的子任务,并顺序处理以得到完整答案的过程。

在 RAG 系统中可通过多种方式实现多步推理:

  • 串联检索与生成:在某些情况下,可通过将检索与生成步骤串联实现多步推理。处理初始查询后,系统可能会生成后续查询或请求更多信息,再生成最终答案。
  • 引入中间步骤:对于需跨多个文档或主题进行推理的查询,系统可在每一步检索不同的文档集合,逐步构建更细致、完整的答案。
  • 多跳问答:该方法让系统在不同检索信息之间建立逻辑关联,能够处理更复杂的查询,如涉及多条事实或数据点关系的问题。

应对幻觉

如前所述,生成模型(包括用于 RAG 的模型)的主要挑战之一是幻觉。以下多种技术有助于缓解 RAG 系统中的幻觉:

  • 基于检索文档进行锚定:降低幻觉最有效的方法之一,是确保生成模型严格以检索内容为依据。即约束模型仅基于文档中的实际内容生成回答,而非依赖外部预训练知识。
  • 上下文条件化:通过改进向模型提供上下文的方式,开发者可以更好地控制生成过程。这可能包括在传入模型前过滤掉检索文档中的无关部分,或给出明确指令,引导模型聚焦关键信息。
  • 反馈回路:通过建立反馈机制,将生成输出与检索文档进行准确性比对,可在结果呈现给用户之前捕捉幻觉。此类验证步骤能显著提升系统可靠性。

处理复杂查询与对话

随着 RAG 系统日益应用于真实场景,它们必须能够应对复杂的多轮交互与含糊不清的查询。

管理多轮对话

会话式 RAG 的主要挑战之一,是在多次交互中管理信息流。在诸多日常场景(如客户支持或持续性的技术讨论)中,用户往往进行多轮对话,系统需要在多次往复间维持上下文。

让系统跟踪并记忆对话中相关部分,是提供连贯一致回答的关键。为有效处理多轮对话,RAG 系统可采用以下技术:

  • 对话历史追踪:维护对话历史的结构化表示非常重要。这可包括保存关键交互,如先前查询与生成回答,以便在后续轮次中作为上下文。
  • 上下文窗口化:使用随对话进展动态更新的上下文窗口,使系统聚焦于最相关的交互部分。通过将历史范围限定为最近或关键的往来信息,系统可在不使生成模型负担过重的前提下保持聚焦。
  • 基于检索的记忆:对于尤为复杂或冗长的对话,可实现基于检索的记忆机制。该方法允许系统在需要时选择性检索对话历史中的相关部分,仅将最切题的上下文传递给语言模型。

处理含糊或复杂查询

用户查询并非总是直截了当,很多时候可能模糊、含混,或涉及挑战 RAG 能力的复杂推理。

通过澄清消歧

解决歧义的一种方式,是引导系统向用户寻求澄清。例如,当查询过于模糊时,系统可生成后续问题以索要更多细节。该互动过程有助于在检索与生成前明确用户意图。

灵活的查询处理

对于涉及多个方面或子主题的复杂查询,系统可将其拆分为更小、更易管理的部分。即分阶段检索信息,每一阶段处理查询的一个具体方面;最终输出由多次检索与生成的结果综合而成,确保覆盖查询的各个组成部分。

利用上下文线索

为处理歧义,系统可利用查询或对话历史中的上下文线索。通过分析先前交互或相关主题,RAG 系统能更准确地推断用户意图,降低生成无关或不正确回答的概率。

针对复杂查询的高级检索

对于特别具有挑战性的查询,RAG 系统可采用高级检索方法,如多跳问答:系统从多个文档中检索信息并在其间建立逻辑联系,以解答复杂问题。

应对常见 RAG 挑战

尽管 RAG 为信息检索与文本生成提供了强大方案,但也带来了需重点解决的挑战。

处理生成偏见

偏见在语言模型(包括 RAG 所用模型)中广为人知,可能负面影响生成输出的公平性与准确性。偏见可在检索与生成两个阶段进入系统,导致输出偏颇或带有歧视,反映了底层数据集中存在的社会、文化或领域偏见。

为缓解 RAG 系统中的偏见,我们可以采取以下策略:

  • 偏见感知的检索:当检索到的文档过度代表某些观点、群体或立场时,检索阶段可能引入偏见。通过应用过滤以确保检索文档的多样性(如在作者、时间范围或地域上进行平衡),RAG 系统可降低检索偏见的可能性。
  • 生成阶段的公平性:若语言模型训练数据包含偏见内容,或模型放大了某些观点,生成阶段可能产生偏见。一种缓解方法是基于经过精选、旨在最小化偏见的数据集微调模型,尽可能确保生成回答中立且公平。
  • 生成后的过滤:实施生成后处理,对输出进行偏见或有害内容分析,可进一步降低偏见。这些过滤器可在结果展示给用户前标记或修改问题输出,确保最终结果符合公平性标准。

计算开销

随着高级检索与生成技术的集成,RAG 系统愈发复杂,其计算需求也随之增加。模型规模、处理速度与延迟等方面的挑战,会影响系统效率与可扩展性。

为控制计算开销,开发者可采用以下优化:

  • 高效检索技术:通过更高效的索引与搜索算法(如近似最近邻)优化检索阶段,可显著降低定位相关文档所需的时间与资源。
  • 模型压缩与优化:用于 RAG 的语言模型计算量大,尤其在大规模或特定领域查询中。可采用蒸馏、量化与剪枝等技术,在尽量不牺牲性能的前提下,降低模型规模与计算成本。

数据限制

RAG 系统高度依赖其用于检索与生成的数据质量与覆盖范围。在特定领域应用中,若可用训练数据不足、过时或质量不高,数据限制会成为重大挑战。

我们可以通过以下方法应对 RAG 系统中的数据限制。

数据增强

当特定领域训练数据有限时,数据增强技术可帮助人工扩充数据集,包括生成合成数据、改写现有文档,或利用外部来源补充原始数据集。数据增强可让模型接触到更广的示例范围,从而提升其处理多样化查询的能力。

领域自适应

在小规模的特定领域数据集上微调预训练语言模型,可使 RAG 系统适配专业用例,即便数据有限。领域自适应能让模型更好地理解行业术语与细微差别,提升生成回答质量。

主动学习

当高质量训练数据稀缺时,可采用主动学习以迭代改进数据集。通过识别最具信息量的数据点并优先标注,开发者无需一开始就准备海量标注数据,也能逐步提升数据集质量。

在 RAG 中实施高级技术

在 RAG 系统中实施高级技术,需要对可用工具、框架与策略有扎实理解。随着技术复杂度上升,利用专业库与框架可简化复杂检索与生成流程的集成。

工具与库

为支持高级 RAG 技术的实现,已出现众多框架与库,为开发者与研究人员提供模块化、可扩展的解决方案。这些工具通过提供检索、排序、过滤与生成组件,改进了构建 RAG 系统的流程。

LangChain

LangChain 是专为与语言模型协作并将其与外部数据源集成而设计的热门框架。它支持高级检索增强技术,包括文档索引、查询,以及将不同处理步骤(检索、生成与推理)进行链式组合。

LangChain还提供对向量数据库与多种检索器的开箱集成,使其成为构建定制 RAG 系统的多面手。

在这门课程中了解更多关于 LangChain 与 RAG 的内容:使用 LangChain 构建 RAG 系统

Haystack

Haystack 是一个专注于构建可用于生产的 RAG 系统的开源框架。它提供密集检索、文档排序与过滤,以及自然语言生成等工具。

在需要特定领域搜索、问答或文档摘要的应用中,Haystack 尤其强大。其支持多样后端并能与主流语言模型集成,从而简化了 RAG 系统在真实场景中的部署。

OpenAI API

OpenAI API允许开发者将诸如 GPT-4 等强大的语言模型集成进 RAG 工作流。尽管并非专为检索增强任务设计,OpenAI 的模型可与检索框架配合,基于检索信息生成回答,从而实现更强的生成能力。

实施策略

要将高级技术集成到现有 RAG 系统中,遵循结构化路径至关重要。

选择合适的框架

首先选择与您的用例契合的框架或库。例如,若需要具备密集检索能力的高可扩展系统,LangChain 或 Haystack 等框架是理想之选。

搭建文档检索

第一步是搭建检索组件,包括为数据源建立索引与配置检索方法。根据用例,您可以选择密集检索(使用向量嵌入)或混合搜索(结合稀疏与密集方法)。例如,可使用 LangChain 或 Haystack 创建检索流水线。

实现重排序与过滤

在检索系统就绪后,下一步是通过重排序与过滤提升相关性。可使用 Haystack 内置的重排序模块,或根据特定查询类型自定义重排序模型。

引入高级生成技术

在检索之后,通过提示工程、上下文蒸馏与多步推理来优化生成过程。借助 LangChain,您可以将检索与生成步骤链式串联,以处理多步查询,或使用提示模板来约束模型更准确地生成。

若幻觉较多,应重点将生成牢牢锚定在检索文档之上,确保输出基于这些文档内容。

测试与评估

持续测试对于优化 RAG 系统性能至关重要。使用准确率、相关性与用户满意度等评估指标来衡量重排序、上下文蒸馏等高级技术的效果。通过 A/B 测试比较不同方案,并根据反馈微调系统。

为可扩展性优化

随着系统扩展,计算开销可能成为问题。可采用模型蒸馏或量化等优化技术,并确保检索过程高效。利用 GPU 加速或并行化也有助于在规模化场景中保持性能。

监控与更新

RAG 系统需要随新查询与新数据不断演进。搭建监控工具以实时追踪系统表现,并持续更新模型与检索索引,以应对新趋势与新需求。

评估高级 RAG 技术

在 RAG 系统中实施高级技术只是开始。通过采用合适的评估指标与 A/B 测试等方法,我们可以评估系统对用户查询的响应质量,并随时间不断改进。

准确率

准确率衡量系统检索与生成正确或相关回答的频率。对于问答系统,可将生成答案与标准答案直接比对。准确率提高意味着系统更准确地理解查询并提供精确结果。

相关性

该指标评估检索文档与生成回答的相关度,看其对用户查询的回应程度。常用指标包括 MRR(平均倒数排名)或 Precision@K,用以衡量最相关文档在排序中的位置高低。

延迟

尽管准确率与相关性至关重要,实时性能同样不可忽视。延迟指系统的响应时间——检索文档与生成答案的速度。在客户支持或实时问答等对时效性要求高的应用中,低延迟尤为重要。

覆盖度

覆盖度衡量 RAG 系统对各类查询的处理能力。在特定领域应用中,确保系统能覆盖潜在用户查询的全谱系,是提供全面支持的关键。

评估 RAG 系统性能

图示由 napkin.ai 生成

高级 RAG 技术的应用场景

高级 RAG 技术在各行各业与多类应用中打开了广阔空间。

复杂问答系统

高级 RAG 最具影响力的用例之一,是复杂问答(QA)系统。这类系统不仅需要简单的文档检索,更要理解上下文、拆解多步查询,并基于检索文档提供全面答案。

特定领域知识检索

在强调领域知识的行业中,可构建高级 RAG 系统以检索和生成高度专业的内容,典型应用包括:

  • 医疗健康:临床决策依赖最新研究、指南与病历。高级 RAG 系统可检索医学论文、汇总病史并生成治疗方案。为确保内容新、准、与患者状况高度相关,过滤与重排序尤为重要。
  • 金融服务:RAG 系统可检索市场报告、监管文件与经济预测,助力分析师产出准确、数据驱动的洞见。查询扩展与密集检索能确保分析师获得最相关且全面的数据。

个性化推荐

个性化推荐系统同样是高级 RAG 的关键用例。通过结合用户偏好、行为与外部数据源,RAG 系统可为产品、服务或内容生成个性化推荐,包括:

  • 电商:RAG 系统可通过检索商品描述、用户评价与用户画像生成个性化推荐。混合搜索(结合关键词与向量检索)与重排序对提升推荐相关性至关重要。
  • 内容平台:在流媒体或新闻平台上,RAG 系统可根据用户偏好与最新趋势推荐内容。查询扩展与上下文蒸馏有助于提供更细致的推荐,基于过往行为与当下兴趣定制建议。

RAG 系统的未来

新一代 RAG 系统将整合更丰富的数据源,增强推理能力,并解决当前在歧义与复杂查询处理方面的局限。

关键发展方向之一是整合多样化数据源,不再依赖单一数据集。未来系统将结合数据库、API 与实时数据流等多源信息,为复杂查询提供更全面、多维的答案。

处理含糊或不完整查询也是未来 RAG 系统要解决的挑战。通过将概率推理与更好的上下文理解相结合,这些系统将更有效地应对不确定性。

此外,多步推理将更加融入 RAG 的复杂查询处理流程,将复杂问题拆解为更小组件,并在多个文档或步骤间综合结果。这对法律研究、科学发现与客户支持等常需整合多元信息的领域尤为有益。

随着个性化与上下文感知的不断提升,未来 RAG 系统将基于用户历史、偏好与过往交互定制回答。对新信息的实时适应也将让对话更加动态而高效。

图示由 napkin.ai 生成

当前的密集检索模型非常有效,但研究仍在推进,以开发更高效、更精准的神经检索模型。这些模型旨在更好地捕捉更广泛查询-文档对之间的语义相似性,同时提升大规模检索任务中的效率。

例如,Karpukhin 等(2020)提出了用于开放域问答的核心方法 Dense Passage Retrieval(DPR);而较新的研究如Izacard 等(2022)聚焦于小样本学习,将 RAG 适配为领域特定任务。

另一个新兴研究方向致力于通过检索增强生成模型改进检索与生成之间的衔接。这类模型旨在将检索文档更紧密地融入生成过程,使语言模型更直接地基于检索内容进行条件化生成。

这有助于减少幻觉并提升生成回答的事实准确性,使系统更可靠。值得关注的工作包括Huang 等(2023)的 RAVEN 模型,其通过检索增强的编解码器模型改进了上下文学习。

结语

将密集检索、重排序与多步推理等高级 RAG 技术整合到系统中,能够让 RAG 满足从医疗到个性化推荐等真实应用的需求。

展望未来,跨语言能力、个性化生成与更丰富数据源的处理等创新将推动 RAG 系统不断演进。

如果您想继续学习并亲手实践 RAG 系统,推荐以下教程:

Stanislav Karzhev

作者

Stanislav Karzhev

刚毕业的理学硕士,专攻人工智能

主题