跳到主要内容
Open on GitHub

检索增强生成 (RAG)

先决条件

概述

检索增强生成 (RAG) 是一种强大的技术,它通过将 语言模型 与外部知识库相结合来增强它们。 RAG 解决了 模型的关键限制:模型依赖于固定的训练数据集,这可能导致信息过时或不完整。 当给定查询时,RAG 系统首先在知识库中搜索相关信息。 然后,系统将此检索到的信息合并到模型的提示中。 模型使用提供的上下文来生成对查询的响应。 通过弥合大型语言模型和动态、有针对性的信息检索之间的差距,RAG 是一种构建更强大和更可靠的 AI 系统的强大技术。

主要概念

Conceptual Overview

(1) 检索系统:从知识库检索相关信息。

(2) 添加外部知识:将检索到的信息传递给模型。

检索系统

模型具有通常是固定的内部知识,或者至少由于训练成本高昂而不会经常更新。 这限制了他们回答有关时事或提供特定领域知识的能力。 为了解决这个问题,有各种知识注入技术,如 微调 或持续预训练。 两者都 成本高昂,并且通常 不太适合 事实检索。 使用检索系统具有以下几个优点

  • 最新信息:RAG 可以访问和利用最新数据,保持响应的及时性。
  • 领域特定专业知识:借助领域特定的知识库,RAG 可以在特定领域提供答案。
  • 减少幻觉:将响应建立在检索到的事实上,有助于最大限度地减少虚假或捏造的信息。
  • 经济高效的知识集成:RAG 提供了一种比昂贵的模型微调更有效的替代方案。
进一步阅读

请参阅我们关于检索的概念指南。

添加外部知识

有了检索系统,我们需要将来自该系统的知识传递给模型。 RAG 管道通常通过以下步骤实现此目的

  • 接收输入查询。
  • 使用检索系统搜索与查询相关的相关信息。
  • 将检索到的信息合并到发送给 LLM 的提示中。
  • 生成利用检索到的上下文的响应。

例如,这是一个简单的 RAG 工作流程,它将来自检索器的信息传递给聊天模型

from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage

# Define a system prompt that tells the model how to use the retrieved context
system_prompt = """You are an assistant for question-answering tasks.
Use the following pieces of retrieved context to answer the question.
If you don't know the answer, just say that you don't know.
Use three sentences maximum and keep the answer concise.
Context: {context}:"""

# Define a question
question = """What are the main components of an LLM-powered autonomous agent system?"""

# Retrieve relevant documents
docs = retriever.invoke(question)

# Combine the documents into a single string
docs_text = "".join(d.page_content for d in docs)

# Populate the system prompt with the retrieved context
system_prompt_fmt = system_prompt.format(context=docs_text)

# Create a model
model = ChatOpenAI(model="gpt-4o", temperature=0)

# Generate a response
questions = model.invoke([SystemMessage(content=system_prompt_fmt),
HumanMessage(content=question)])
进一步阅读

RAG 是一个深入的领域,有许多可能的优化和设计选择


此页是否对您有帮助?