热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >一问讲透什么是 RAG,为什么需要 RAG?

一问讲透什么是 RAG,为什么需要 RAG?

来源:互联网 更新时间:2026-08-01 13:42

一. 为什么要用 RAG ?

假设你手里有一个训练好的大语言模型,想让它帮你处理个人数据,比如回答“我上个月的项目报告放在哪儿了”——结果模型一脸茫然。这种情况在企业内部更常见:拿模型去回答公司内部的规章制度、产品文档,它往往答非所问。根本原因在于,预训练模型的知识是静态的、通用的,没法覆盖你独有的信息。

一问讲透什么是 RAG,为什么需要 RAG?

那怎么让大模型“听懂”你的需求呢?主流的路线有三条:

  1. Prompt Engineering(提示工程)

    :通过精心设计的提示词来引导模型。比如常见的In-context Learning,你在提问时附带几个示例,告诉模型“请用这种风格回答”。它不改变模型本身,只改变输入方式,门槛最低。

  2. Fine-tuning(微调)

    :用特定领域的数据对模型进行二次训练。举个例子,一家公司可以用内部文件微调ChatGPT,让它准确回答“年假申请流程”之类的问题。但微调需要大量高质量、有代表性的数据集,而且效果有限——它不适合给模型注入全新知识,更不适合需要快速迭代的场景。

  3. RAG(Retrieval Augmented Generation,检索增强生成)

    :把神经语言模型和一个外部检索系统结合起来。检索系统从数据库或文档库里找出相关信息,语言模型再根据这些信息生成回答。打个比方:RAG相当于给模型配了一本教科书,让它每次回答前先翻书找答案。这种方法特别适合需要实时、最新或高度定制信息的场景,比如企业内部知识问答。但RAG不擅长让模型学习广泛领域的知识或新的语言风格。

下面的对比表直观地反映了这三种方法的差异(引自Gao et al., 2023的综述):

目前大量研究已经证实,RAG在优化大模型方面相比其他方法有显著优势(Shuster et al., 2021; Yasunaga et al., 2022; Wang et al., 2023c; Borgeaud et al., 2022)。优势主要体现在六个维度:

  1. 准确性

    :通过外部知识源有效减少幻觉,回答更可信。
  2. 及时性

    :检索系统能获取用户提供的最新信息,保证回答不落伍。
  3. 透明度

    :RAG会引用信息来源,用户可以核查,信任度更高。
  4. 定制能力

    :针对特定领域数据检索,能提供专业支撑。
  5. 安全性和隐私

    :知识存储在数据库中,数据权限容易控制;相比之下,微调后的模型在数据管理上不够透明,企业风险较大。
  6. 经济效率

    :不需要更新模型参数,处理大规模数据时成本更低。

话说回来,这三种方法并非互斥,而是相辅相成的。把RAG和微调、提示工程结合起来,能让模型能力层层叠加——尤其在特定场景下,这种协同作用能把效果推到最佳。当然,整个过程往往需要多次迭代和调整。

下图展示了RAG实际应用的过程(引自Gao et al., 2023的综述):

二. 什么是 RAG ?

这一章展开讲讲RAG的具体流程和关键技术。简单说,RAG有两个核心环节:

检索(Retrieval)

生成(Generation)

  • 检索

    :从大规模知识库中找出最相关的前几个文档。
  • 生成

    :把检索到的信息转化为自然流畅的文字。

检索(Retrieval)

想让检索更精准,三个问题得解决好:如何获得准确的语义空间?如何匹配查询和文档的语义空间?如何让检索器的输出符合大语言模型的偏好?下面一一来看。

a.) 如何获得准确的语义空间

我们把查询和文档映射到多维空间里,这个空间就叫

语义空间

。检索就是在这个空间里找最相似的东西——如果映射得不好,整个RAG系统就废了。建立好的语义空间,通常分两步:

  1. 区块优化(Chunk Optimization)

    处理外部文档时,先把它拆成小碎片,提取细粒度特征,然后用嵌入模型(Embedding Model)把这些碎片转化成向量。碎片太大或太小都会影响效果,需要考虑检索内容的性质、嵌入模型的最佳块大小、用户查询的预期长度和复杂度等。目前主流的方法有:

    • Sliding window technology(滑动窗口)

      :合并多个检索过程的相关信息,实现分层检索。
    • Small2big

      :先用小文本块做初步搜索,再提供较大的相关文本块给语言模型。
    • Abstract embedding

      :优先基于文档摘要做前K次检索,提供对全文的理解。
    • Metadata filtering(元数据过滤)

      :通过文档的元数据进行筛选。
    • Graph indexing(图索引)

      :把实体和关系转化为节点和连接,特别适合多跳问题。
  2. 微调嵌入模型(Fine-tuning Embedding Models)

    确定了合适的块大小后,需要用嵌入模型把块和查询映射到语义空间。嵌入模型的效果至关重要。传统常用的有:

    • Sentence-Transformers

      :基于BERT的Python NLP套件,适合处理单句。
    • text-embedding-ada-002

      :OpenAI的嵌入模型,适合处理256或512个token的文本块。

    如今更先进的嵌入模型,如AngIE、Voyage、BGE等,已经在大规模语料上预训练过。但应用到特定领域时,它们捕捉领域特定信息的能力可能不足,因此还需要微调。主要有两种微调方式:

    • 领域知识微调

      :嵌入模型的微调和大语言模型不同,它的数据集包括查询(Queries)、语料库(Corpus)和相关文档(Relevant Docs)。数据收集过程繁琐,LlamaIndex为此提供了专门的工具。
    • 针对下游任务微调

      :例如PROMPTAGATOR用大语言模型来微调嵌入模型,解决数据不足的问题。

b.) 如何协调查询和文档的语义空间?

有些检索器用同一个嵌入模型处理查询和文档,有些则用两个不同的模型。用户原始查询可能表述不清或缺少必要语义。两种主流做法:

  1. 查询重写(Query Rewriting)

    比如Query2Doc和ITER-RETGEN,利用大语言模型把原始查询与额外指导信息结合起来,生成一个虚拟文档。其他方法如HyDE、RRR、STEP-BACK-PROMPTING也属于这类。

  2. 嵌入转换(Embedding Transformation)

    相比查询重写,这是一种更微观的技术。LlamaIndex在查询编码器后加入一个特殊的适配器并微调,从而优化查询的嵌入表示,使其更契合特定任务。

c.) 根据 LLM 的需求调整检索结果

上面那些方法能提升检索效果,但不一定能提高大语言模型的准确度——因为检索结果可能不符合模型的口味。如何让检索结果向模型偏好靠拢,是一个重要的研究方向。

  1. 微调检索器(Fine-tuning Retrievers)

    核心思路是用大语言模型产生的反馈信号来调整嵌入模型——用模型给的分数指导检索器训练,相当于让大语言模型给数据打标签。代表方法如AAR。

  2. 适配器(Adapters)

    微调方法在实现上有难度,比如API限制和算力成本。所以有些研究在外接适配器来对齐模型,比如PRCA,在上下文提取阶段和奖励驱动阶段训练适配器,通过基于token的自回归策略优化检索器输出。

生成(Generation)

生成器负责把检索到的信息转换成连贯、流畅的文本。它的输入不仅包括通常的上下文,还包括检索器带来的相关文本片段,这让生成器能深入理解问题背景,产生更精准的回答。

但检索到的内容五花八门,所以一系列研究聚焦于提高生成器的适应性,让它能应对来自查询和文档的各种输入。

a.) 如何优化检索到的信息?

目前主流做法是直接调用训练好的大语言模型(如ChatGPT-4)来做生成,但这些模型仍有上下文长度限制、对冗余信息敏感等问题。因此,

检索后处理(Post-retrieval Processing)

成了热点——对检索结果做进一步处理、过滤或优化。两种主要做法:

  1. 信息压缩(Information Compression)

    即使检索器能从海量知识里精准找到相关信息,海量信息本身也是挑战。简单扩大上下文长度不能根治——压缩是必要的。PRCA通过训练一个信息提取器来解决:给定输入文本Sinput,生成输出序列Cextracted,代表从输入中压缩得到的上下文,训练目标是最小化Cextracted与实际上下文Ctruth的差距。此外还有RECOMP、Filter-Ranker等方法。Filter-Ranker结合了大语言模型和小语言模型的优点——小模型做过滤器,大模型做排序器,显著提升信息提取任务的效果。

  2. 重排序(Reranking)

    大语言模型在引入额外上下文时性能常会下降,重排序能有效解决这个问题。核心概念是重新排列文档记录,让最相关的项目排在最前面,同时限制文档总数,从而解决上下文窗口扩展的挑战,提升检索效率和响应速度。

b.) 如何根据检索到的信息优化生成器?

普通大语言模型输入通常只有一段文字查询,但在RAG里,输入是查询加检索到的各种文档(结构化和非结构化)。这种额外信息会明显影响模型的理解,尤其是较小的模型。此时,微调模型以适应“查询+检索文档”这个输入格式就很重要。生成器的微调方法和一般的大语言模型微调方法基本一样,这里简单提两个代表性方向:

  1. 通用优化流程

    Self-mem采用传统训练方法:给定输入x,检索信息z,结合(x,z),模型生成输出y。论文探讨了两种主流微调架构:Joint-Encoder(联合编码器)和Dual-Encoder(双编码器)。Joint-Encoder使用标准的encoder-decoder模型,encoder先编码输入,decoder通过注意力机制结合编码结果自回归生成。Dual-Encoder则设置两个独立的encoder,分别编码输入(查询+上下文)和文档,输出再经过decoder做双向交叉注意力处理。两种都基于Transformer。

  2. 利用对比学习

    传统训练数据只建立输入输出的配对,容易导致“暴露偏差”——模型只见过正确的输出,不知道其他可能的生成路径。SURGE提出使用图文对比学习,引入对比学习目标,促使模型产生多样且连贯的回应,从而减少过拟合、增强泛化能力。

三. RAG 生态系 ?

RAG的生态正在蓬勃生长。水平方向上,从最初的纯文本问答,RAG已扩展到图像、代码、结构化知识、音视频等多模态数据,相关研究成果不断涌现。

技术栈的发展也很快。LangChain和LlamaIndex这类关键工具随着ChatGPT的爆发迅速获得了人气,它们提供了大量与RAG相关的API,成为大语言模型领域的标杆。

同时,新兴技术栈也在崛起。比如Flowise AI采用低代码方法,用户通过拖拽界面就能部署包含RAG的AI应用。其他如HayStack、Meltano、Cohere Coral等也因其独特贡献受到关注。

除了纯粹的AI提供者,传统软件和云服务商也在扩展以RAG为中心的服务。向量数据库公司Wea viate推出的Verba专注于个人助理应用;亚马逊的Kendra提供智能企业搜索服务,让用户通过内置连接器在各种内容仓库中导航。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc