大语言模型落地关键技术:检索增强生成 RAG
检索增强生成(RAG)是大语言模型应用落地的关键技术,通过结合外部检索与模型生成能力,解决幻觉问题并提升准确性。文章介绍了 RAG 的定义、发展历程、三种主要框架(基础、高级、模块化)、核心组件及与微调的对比,并探讨了系统评估方法与未来趋势,同时提供了基于 LangChain 的 Python 实战代码示例,为构建高质量 LLM 应用提供技术参考。

检索增强生成(RAG)是大语言模型应用落地的关键技术,通过结合外部检索与模型生成能力,解决幻觉问题并提升准确性。文章介绍了 RAG 的定义、发展历程、三种主要框架(基础、高级、模块化)、核心组件及与微调的对比,并探讨了系统评估方法与未来趋势,同时提供了基于 LangChain 的 Python 实战代码示例,为构建高质量 LLM 应用提供技术参考。

RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的 NLP 方法:检索(Retrieval)和生成(Generation)。
检索(Retrieval):这一部分的工作是从大量的文本数据中检索出与输入问题最相关的信息。它通常使用一个检索系统,用于大规模的文档集合(例如维基百科或私有知识库)中寻找与输入相关的文段。
生成(Generation):生成部分则使用类似 GPT 的语言模型,它会根据检索到的信息来生成响应或回答。这个过程涉及理解检索到的内容,并在此基础上生成连贯、相关且信息丰富的文本。
RAG 模型的关键在于它结合了这两种方法的优点:检索系统能提供具体、相关的事实和数据,而生成模型则能够灵活地构建回答,并融入更广泛的语境和信息。 这种结合使得 RAG 模型在处理复杂的查询和生成信息丰富的回答方面非常有效。这种技术在问答系统、对话系统和其他需要理解和生成自然语言的应用中非常有用。
RAG 于 2020 年中期由 Lewis 等人提出,是 LLMs 领域中的一种范式,可增强生成任务。具体而言,RAG 包括一个初始的检索步骤,LLMs 在此步骤中查询外部数据源以获取相关信息,然后才回答问题或生成文本。这个过程不仅为后续的生成阶段提供信息,还确保回答基于检索到的证据,从而显著提高了输出的准确性和相关性。
在推断阶段动态检索来自知识库的信息使 RAG 能够解决生成事实错误内容的问题,通常被称为'幻觉'。将 RAG 整合到 LLMs 中已经迅速被采用,并成为完善聊天机器人能力和使 LLMs 更适用于实际应用的关键技术。
RAG 的演进轨迹大致分为四个阶段:
一个典型的 RAG 应用工作流程如下:
用户向大模型查询最近引起广泛关注的事件,这些事件引发了大量的公众讨论。作为最著名和广泛使用的 LLMs,受限于其预训练数据,模型缺乏对最新事件的了解。RAG 通过从外部知识库中检索最新的文档摘录来解决这一问题。在这种情况下,它获取了与查询相关的一些新闻文章。这些文章连同最初的问题被合并成一个丰富的提示,使模型能够合成一个知情的回答。
这个示例说明了 RAG 的过程,展示了它通过实时信息检索来增强模型的响应能力。从技术上讲,RAG 已经通过各种创新方法得到丰富,这些方法解决了关键问题,例如'要检索什么'、'何时检索'和'如何使用检索到的信息'。
关于'要检索什么'的研究已经从简单的标记检索和实体检索发展到更复杂的结构,如块和知识图。研究重点放在检索的粒度和数据结构的级别上。粗粒度带来更多的信息,但精度较低。检索结构化文本提供了更多信息,但效率较低。
关于'何时检索'的问题已经产生了各种策略,从单一检索到自适应检索和多次检索,再到高频率检索的方法。
RAG 研究范式不断发展,我们将其分为三种类型:基础 RAG(Naive RAG)、高级 RAG(Advanced RAG)和模块化 RAG(Modular RAG)。
基础 RAG 是检索增强生成(RAG)范式的最早形式之一,其基本概念是将外部检索与大型语言模型(LLMs)的生成能力结合在一起。在基础 RAG 中,检索通常是基于查询的,并且用于检索外部知识库或数据源中的相关信息。 一旦获得了检索到的信息,它们可以与 LLMs 的内部知识结合在一起,以生成更准确和相关的文本或回答。
然而,基础 RAG 虽然在改善 LLMs 的性能方面取得了一定的成功,但也存在一些限制和不足之处。其中一些主要限制包括:
由于这些限制,研究人员开始探索更高级的 RAG 范式,以克服这些问题并提高 RAG 的性能和适用性。
高级 RAG 是检索增强生成(RAG)范式的进化形式,其目的是克服基础 RAG 的一些限制,并进一步提高性能和适用性。在高级 RAG 中,研究人员采用了一系列创新性方法和技术,以应对复杂的自然语言处理任务和挑战。
以下是高级 RAG 的一些关键特点和创新:
模块化 RAG 是检索增强生成(RAG)的另一种演进形式,目的是提供更大的定制性和灵活性,以满足不同应用场景的需求。与基础 RAG 和高级 RAG 相比,模块化 RAG 更注重将 RAG 系统分解为各种独立的组件,每个组件负责特定的任务或功能。
以下是模块化 RAG 的一些关键特点和概念:
RAG 的核心组件分为三个部分:检索(Retrieval)、增强(Augmentation)、生成(Generation)。
检索是检索增强生成(RAG)框架的核心组件之一,它负责从外部数据源或知识库中获取与用户查询相关的信息。检索的质量和效率对于 RAG 系统的性能至关重要,因为它直接影响生成的文本或回答的准确性和相关性。
以下是与检索相关的一些关键概念和技术:
RAG 中的增强技术是 RAG 框架的第二个核心组件,它的作用是进一步提升生成的质量和效果,以确保生成的文本或回答准确、相关且合乎要求。增强技术通过不同方式与检索和生成协同工作,以优化 RAG 系统的性能。
以下是与 RAG 中的增强技术相关的一些关键概念和方法:
生成是检索增强生成(RAG)框架的另一个核心组件,它负责根据检索到的信息和用户查询生成最终的文本或回答。生成的质量和效果直接影响着 RAG 系统的性能和可用性。
以下是与生成相关的一些关键概念和技术:
RAG(检索增强生成)与微调(Fine-Tuning)是两种不同的大型语言模型(LLM)优化方法,它们在应用和效果上有所不同。
总的来说,RAG 和微调各有其优势和适用场景,RAG 的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练。 选择使用哪种方法,应根据具体的应用需求和任务来决定。未来的发展可能会探索两种方法的结合,以充分利用它们的优势,并改进大型语言模型的性能。
RAG(检索增强生成)系统的评估是确保其性能和效果的关键步骤。这里将介绍 RAG 系统的评估方法和指标,以帮助衡量其生成文本或回答的质量和相关性。
以下是与 RAG 评估相关的一些关键概念和方法:
评估方法和指标的选择取决于具体的任务和应用场景。综合使用多种评估方法可以更全面地了解 RAG 系统的性能和效果。评估结果可以指导系统的改进和优化,以满足用户的需求。
RAG(检索增强生成)技术在不断发展和演进,未来有许多潜在的发展方向和前景。
总的来说,RAG 技术具有广阔的研究前景和应用前景。未来的研究将继续探索新的方法和技术,以不断改进和扩展 RAG 系统的功能和性能,从而更好地满足各种知识密集型任务和应用场景的需求。
在实际开发中,Python 是最常用的编程语言。以下是一个基于 LangChain 框架的简化 RAG 实现示例,展示了如何加载文档、分块、嵌入并向量化,最后进行检索和生成。
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import HuggingFacePipeline
# 1. 加载文档
loader = TextLoader("./data/document.txt")
documents = loader.load()
# 2. 文本分块
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
chunks = splitter.split_documents(documents)
# 3. 创建向量存储
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. 定义 LLM(此处仅为示意,实际需配置本地或远程模型)
llm = HuggingFacePipeline.from_model_id(
model_id="gpt2",
task="text-generation",
pipeline_kwargs={"max_length": 512}
)
# 5. 构建检索链
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# 6. 执行查询
query = "What is the main topic of this document?"
result = qa_chain({"query": query})
print(result["result"])
该示例展示了 RAG 的基本流程:文档加载 -> 文本分割 -> 向量化存储 -> 检索增强 -> 生成回答。开发者可根据实际需求替换嵌入模型、向量数据库和 LLM 后端。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online