游乐游手机版
首页/AI热点日报/热点详情

RAG冷知识盘点:10个鲜为人知的要点

类型:热点整理2026-05-30
1 什么是RAG(retrieval-augmented-generation)技术?RAG(Retrieval-Augmented Generation,即检索增强生成)技术,通俗来讲,就是将信息检索和文本生成两大环节有机融合,形成一种混合型方法。它的核心目标非常清晰——提升生成文本的质量,让答

1. 什么是RAG(retrieval-augmented-generation)技术?

RAG(Retrieval-Augmented Generation,即检索增强生成)技术,通俗来讲,就是将信息检索和文本生成两大环节有机融合,形成一种混合型方法。它的核心目标非常清晰——提升生成文本的质量,让答案更精准、更可靠。

具体工作流程分为两个阶段:

检索阶段(Retrieval Stage):在模型开始输出内容之前,它会先从庞大的文档库中,搜索与用户输入最匹配的信息片段。这一环节依赖信息检索技术,传统方法如TF-IDF或BM25,现代方案则采用基于深度学习的检索模型。

生成阶段(Generation Stage):生成模型拿到用户的问题以及刚才检索到的文档,将它们作为上下文参考,最终产出回答或文本。这里的核心通常是像GPT-3、BERT这类大型预训练语言模型。

2. RAG是谁提出来的?

如今广泛应用的、基于embedding检索的RAG方案,是由Meta(原Facebook)在2020年正式提出的。相关论文链接在此:https://arxiv.org/abs/2005.11401v4

论文的核心思想是:将预训练的检索器(包含查询编码器和文档索引)与预训练的seq2seq模型(生成器)整合在一起,进行端到端的微调。简单来说,对于给定的查询x,系统利用最大内积搜索(MIPS)找出最相关的前K个文档z;而最终的预测y,则是将所有z视为潜变量,对它们各自的seq2seq预测结果进行边缘化处理。

当然,这篇论文当时只探索了开放领域的抽取式问答。但它开创性地引入了混合参数化与非参数化记忆——即把非参数化记忆(外部知识库)赋予参数化记忆(预训练模型),这正是“检索增强生成”(RAG)名称的由来。具体而言,参数存储器是预训练的seq2seq转换器,非参数存储器则是维基百科的密集向量索引,通过预训练的神经检索器来访问。

图1展示了这些组件如何在一个端到端训练的概率模型中组合:检索器(Dense Passage Retriever,简称DPR)提供以输入为条件的潜在文档,然后seq2seq模型(这里用的是BART)把这些文档与输入一起作为条件,生成最终输出。这里还有一个巧妙的处理:用top-K近似来边缘化潜在文档,可以是按每个输出(假设同一个文档负责所有token),也可以按每个token(不同的文档负责不同的token)。和T5、BART一样,RAG可以在任何seq2seq任务上进行微调,并且生成器和检索器是共同学习的。

3. RAG有什么优势?

RAG最显著的优势,就是能够借助外部知识库中的信息,生成更准确、内容更充实的回答。相比之下,那些仅依赖预训练语言模型内部参数的生成方法,在处理需要精确事实和细节的任务时,往往表现欠佳。

具体来说,RAG具备以下几个关键特性:

增强上下文理解:通过检索相关文档,它能更好地把握用户查询背后的语境,给出的回答更贴合需求、更具实用性。

提高生成准确性:由于使用的是检索到的确切信息,大幅降低了模型“胡编乱造”的风险,这一点在事实性要求高的场景中至关重要。

多领域适用性:无论是问答系统、对话生成,还是内容摘要,RAG都能发挥价值。

一个很形象的比喻就是:开卷考试。你看,闭卷考试全靠脑子记,记不准就容易答错;而开卷考试可以随时翻书查资料,答案自然更靠谱。

4. RAG的主要挑战有哪些?

RAG虽然潜力巨大,但也不是完美无缺的。它面临的挑战同样不少:

a. 检索质量:这是基础。如果检索到的文档不相关,或者本身就包含错误信息,那生成模型再厉害也是“巧妇难为无米之炊”,结果注定不准确。这可以说是所有挑战的源头。

b. 检索与生成的整合:把检索到的信息高效地整合进生成模型,远没有听起来那么简单。不是简单地把句子拼在一起就完事了,关键在于模型能不能真正“读懂”并利用好这些信息,避免生搬硬套。

c. 计算资源需求:RAG方法通常很“吃”计算资源。因为它既要跑检索,又要跑大型语言模型来生成。尤其是在实时应用里,既要快又要准,对硬件和算法的要求相当高。

d. 上下文一致性:保证整个回答的上下文一致性是个真正的难点。检索到的多个文档之间可能彼此矛盾,生成模型必须具备“明辨是非”的能力,有效地筛选和整合信息,避免给出前后矛盾的回答。

e. 信息过载:有时候,检索回来的文档太多了,如何从中提取最有用的那部分,就成了一个难题。生成模型可能会迷失在信息海洋里,难以判断哪些信息最重要、最相关。

f. 更新和维护:知识库不是一成不变的,需要定期更新才能保持信息的新鲜度和准确性。对于RAG系统来说,维护一个不断更新的知识库,本身就是一项增加系统复杂度和管理工作量的任务。

g. 安全性和隐私:一旦涉及敏感或私人信息,RAG系统必须确保从检索到生成的整个过程中,数据的处理和用户隐私都得到妥善保护。

h. 多语言支持:在全球化背景下,支持多种语言是个刚需。RAG系统需要在检索和生成两个阶段都处理好不同语言,确保最终生成内容的准确与流畅。

i. 评估与调试:这一点相当麻烦,因为你需要同时评估检索和生成两个阶段的表现。如何制定一整套有效的评估指标来衡量系统的整体性能,目前还远没有达成共识。

j. 响应时间:实时应用对响应速度的要求很苛刻。而RAG系统的“检索-生成”两阶段流程,天然就会引入延迟。如何优化响应速度以满足实际需求,是一个重要的工程挑战。

尽管有这些挑战,RAG仍然是文本生成技术的一个重要进步。随着研究的深入,这些问题有望逐步得到解决。

5. 如何来实现RAG?

一个标准的RAG应用,主要由两个核心组件构成:

索引:这是一个离线管道,负责从数据源引入数据并对其进行索引。

检索和生成:这是一个在运行时工作的RAG链。它接收用户的查询,从索引中检索相关数据,然后将这些数据连同查询一起传给模型来生成答案。

第一步:索引

  1. 加载:首先加载数据,这步由DocumentLoaders负责。


  2. 拆分:用文本拆分器将大的文档块切分成更小的片段。这么做既是为了方便索引,也是因为大块内容不仅搜索起来困难,而且可能超出模型有限的上下文窗口。


  3. 存储:需要找个地方存放和索引拆分好的片段,以便后续检索。这通常是通过VectorStore和Embeddings模型来完成的。

第二步:检索和生成

检索:根据用户的输入,用Retriever从存储里检索出相关的片段。

生成:ChatModel或LLM(大型语言模型)拿到包含用户问题和检索数据的提示后,生成最终答案。

6. RAG开发需要GPU吗?

说到是否需要GPU,得先捋一捋哪些环节计算量大:

本地数据的预处理、Embedding处理(需要Embedding模型):
计算量确实不小,但好在一次处理后就可以反复使用。

数据检索:
计算量相对可控。学习阶段,甚至可以只用较小的数据集来跑。

LLM处理:计算量巨大,而且需要反复使用(通常建议用7B、14B以上的模型)。当然,也可以选择调用商用大模型的API来避开本地GPU的需求。

7. RAG和语义搜索有什么区别?

语义搜索本身就能提升RAG的效果,尤其适合那些需要在LLM应用里整合大量外部知识源的企业。现代企业在各种系统中都存储着海量信息——手册、常见问题解答、研究报告、客服指南、人力资源文档库,等等。要在这种规模下进行上下文检索,相当有挑战性,而这会影响生成输出的质量。

语义搜索技术擅长扫描包含不同信息的庞大数据集,并且能更准确地检索数据。举个例子,它能回答“去年在机械维修上花了多少钱?”这类问题,方法是将问题映射到相关文档,并返回具体的文本片段,而不是仅仅给出搜索结果。开发人员就可以利用这个返回的答案,为LLM提供更丰富的上下文。

如果RAG用的是传统关键字搜索方案,那在很多知识密集型任务上效果就会比较有限。开发人员在手动准备数据时,还得处理词嵌入、文档分块等一系列复杂问题。而语义搜索技术则可以代劳知识库准备的所有工作,它生成的语义相关段落和按相关性排序的标记词,能最大限度地提高RAG输入的质量。

8. 如何快速实现一个RAG?

想快速搭一个RAG系统出来?下面的步骤提供了一个简化的流程,从基础准备到测试优化都覆盖到了:

  1. 准备环境,安装依赖

确保有一个能跑深度学习框架的环境(比如PyTorch或TensorFlow),然后安装必需的库,比如transformers、faiss(用来做高效检索)等。

pip install torch transformers faiss-cpu

b. 数据准备

语料库:收集和准备好文档或数据集,这些数据就是检索过程的后台知识库。

索引构建:用faiss这类工具创建一个索引,以便实现快速检索。

c. 模型选择和加载

选择模型:选一个合适的预训练语言模型,比如BERT、GPT-3或T5。Hugging Face的transformers库提供了很多现成的选择。

加载模型:用transformers库加载预训练的生成模型和编码器。

    from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
    tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large")model = AutoModelForSeq2SeqLM.from_pretrained("facebook/bart-large")


    d. 实现检索功能

    文档编码:把文档编码成向量,存到索引里。

      import faissimport numpy as np
      # Encode documentsdef encode_documents(documents, model, tokenizer): inputs = tokenizer(documents, return_tensors="pt", truncation=True, padding=True) with torch.no_grad(): embeddings = model.get_encoder()(inputs['input_ids']).last_hidden_state.mean(dim=1) return embeddings.numpy()
      # Example documentsdocuments = ["Document 1 text...", "Document 2 text..."]document_embeddings = encode_documents(documents, model, tokenizer)
      # Create an indexdimension = document_embeddings.shape[1]index = faiss.IndexFlatL2(dimension)index.add(document_embeddings)

      e. 实现生成和检索

      检索文档:根据用户的输入检索相关文档。

        def retrieve_documents(query, index, model, tokenizer):
            query_embedding = encode_documents([query], model, tokenizer)
            distances, indices = index.search(query_embedding, k=5)
            # Retrieve top 5 documents
            return indices

        生成回答:结合检索到的文档生成回答。

          def generate_answer(query, retrieved_docs, model, tokenizer):
              context = " ".join([documents[i] for i in retrieved_docs])
              input_text = f"Context: {context} Question: {query}"
              inputs = tokenizer(input_text, return_tensors="pt")
              outputs = model.generate(inputs['input_ids'])
              answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
              return answer

          f. 集成与测试

          集成系统:把检索和生成步骤组合起来,形成一个完整的RAG系统。

          测试和优化:跑一遍测试,检查系统的性能和准确性,然后根据反馈结果优化模型和检索机制。

          g. 部署

          应用部署:把RAG系统部署到实际环境中,可以提供API接口,或者直接嵌入到现有应用里。

          这个流程涵盖了环境、数据、模型、检索、生成、测试和部署等关键步骤。根据实际需求,每个环节都可以进行相应的调整和细化。

          9. RAG都有哪些优化技巧?

          优化RAG模型,有很多行之有效的技巧。下面分类梳理一下:

          a. 检索优化

          • 索引结构选择:用FAISS或Annoy这类高效索引结构来加速检索。根据数据特点,选择合适的索引类型(比如平面索引、倒排索引或树状索引)。

          • 文档编码优化:用更高效的编码方式,适当降低文档嵌入的维度,同时尽量保留语义信息。比如,可以用低精度浮点数(FP16)来表示嵌入。

          • 检索阈值调整:调整检索时的数量或阈值,以平衡精度和召回率。阈值设得太高,容易漏掉相关文档;设得太低,又会混入大量不相关的内容。

          b. 生成优化

          • 生成策略调整:根据场景选择不同的生成策略,比如束搜索(beam search)、温度采样(temperature sampling)或top-k采样,来平衡生成文本的质量和多样性。

          • 生成模型微调:用特定领域的数据对生成模型进行微调,让它更适应实际任务。这本质上是一种迁移学习。

          c. 模型参数优化

          • 精度优化:用混合精度训练这类低精度计算方法来加速训练和推理,同时降低内存占用。

          • 剪枝与量化:对模型进行剪枝和量化,减少参数量和计算量。这招对提高推理速度和降低资源需求尤其有效。

          d. 数据优化

          • 高质量训练数据:确保检索和生成阶段所用的数据都经过充分清理和预处理,尽量减少噪声。数据质量是一切的基础。

          • 数据增强:用同义词替换、数据扩充等技术生成更多训练样本,提高模型的鲁棒性。

          e. 系统架构优化

          • 分布式计算:在多GPU或多TPU的分布式环境里并行计算,能大幅提升训练和推理速度。

          • 缓存机制:实现缓存机制,把频繁检索到的文档或计算结果存起来,减少重复计算,从而提高系统响应速度。

          f. 用户交互优化

          • 动态调整:根据用户反馈和实际应用场景,动态调整检索和生成策略。比如,可以用在线学习的方法来持续优化模型。

          • 界面设计:一个直观的用户界面和交互机制,能有效提升用户体验,让用户高效地获取信息。

          g. 模型融合

          • 多模型融合:把多个检索模型或生成模型组合起来,利用它们的互补性来提高整体性能。比如,结合不同的模型能力,往往能获得更准确的回答。


          以上这些优化技巧,具体选哪些、怎么组合,还是要根据实际的应用场景和需求来权衡。没有放之四海而皆准的方案。

          10. RAG未来如何发展?

          RAG未来的走向,会受到技术创新、应用需求变化和数据处理能力提升等多重因素的共同推动。

          a. 更高效的检索机制

          • 深度检索:未来的RAG系统可能会利用更先进的深度学习技术来改进检索机制,比如用更复杂的神经网络结构来提升检索的准确率和效率。

          • 跨模态检索:结合文本、图像、音频等多种数据类型进行检索,实现更全面的理解和生成。比如融合文本和视觉信息,生成更具上下文感知力的回答。

          b. 更智能的生成模型

          • 自适应生成:生成模型会越来越“聪明”,能根据上下文和用户反馈自动调整生成策略。比如,根据用户的实时反馈,自动优化生成内容的风格和语气。

          • 多模态生成:未来不仅生成文本,还能生成图像、音频甚至视频内容。比如,结合文本和图像生成,提供更丰富的回答形式。

          c. 更高效的模型训练和推理

          • 模型压缩与加速:通过量化、剪枝、知识蒸馏等技术,让RAG模型变得更小、更快,从而降低对计算资源的需求,提高部署效率。

          • 分布式计算:在大规模分布式系统中训练和部署RAG模型,利用并行计算和分布式存储来加速整个过程。

          d. 更精细的数据管理

          • 动态更新:未来的RAG系统可能会集成动态数据更新机制,让模型能够实时更新检索库和生成模型,始终保有最新的知识。

          • 个性化数据:根据用户的个人数据和历史记录进行个性化的检索和生成,让给出的响应更贴合个人需求,准确度也更高。

          来源:https://www.53ai.com/news/RAG/2024072569423.html

          相关热点

          继续查看同栏目近期热点。

          延伸阅读

          补充最近整理过的热点入口。