Skip to content

RAG 检索增强生成论文

RAG(Retrieval-Augmented Generation)通过将外部知识库检索与语言模型生成相结合,解决了 LLM 的知识过时和幻觉问题,成为构建知识密集型 AI 应用的核心范式。

RAG架构

RAG 基本架构

Lewis et al. (2020) 提出的 RAG 框架包含两个核心组件:

  1. 检索器:从知识库中检索相关文档
  2. 生成器:基于检索结果生成答案
python
from typing import List

class RAG:
    """检索增强生成"""
    def __init__(self, retriever, generator, top_k=5):
        self.retriever = retriever
        self.generator = generator
        self.top_k = top_k

    def retrieve(self, query: str) -> List[str]:
        """检索相关文档"""
        # 向量检索
        query_embedding = self.retriever.encode(query)
        scores, indices = self.retriever.search(
            query_embedding, top_k=self.top_k
        )
        documents = [self.retriever.get_doc(idx) for idx in indices]
        return documents

    def generate(self, query: str, documents: List[str]) -> str:
        """基于检索结果生成答案"""
        context = "\n\n".join(documents)
        prompt = f"""基于以下参考文档回答问题。如果文档中没有相关信息,请说明无法回答。

参考文档:
{context}

问题:{query}
答案:"""
        return self.generator.generate(prompt)

    def __call__(self, query: str) -> str:
        documents = self.retrieve(query)
        return self.generate(query, documents)

RAG 的演进

Naive RAG → Advanced RAG → Modular RAG

阶段特点改进
Naive RAG简单检索+生成基线方案
Advanced RAG查询改写+重排序提升检索质量
Modular RAG模块化组件组合灵活定制

关键技术

  • 查询改写:HyDE、Multi-Query、Step-back Prompting
  • 重排序:Cross-encoder 重排、LLM 重排
  • 混合检索:稠密检索 + 稀疏检索(BM25)
  • 自适应检索:模型决定何时检索、检索什么

检索质量是关键

RAG 的性能上限由检索质量决定。如果检索不到相关文档,再强的生成器也无法给出正确答案。因此,Advanced RAG 的核心改进几乎都集中在提升检索质量上。

RAG 的理论分析

RAG vs 预训练知识

Borgeaud et al. (2022) 的 RETRO 模型表明:

  • RAG 在知识密集型任务上持续优于纯参数化模型
  • 检索可以弥补模型参数中的知识缺口
  • 随着模型规模增长,RAG 的边际收益递减但仍为正

RAG 的局限性

  • 检索噪声:不相关文档可能误导生成
  • 上下文窗口限制:检索文档占用上下文空间
  • 延迟:检索步骤增加推理延迟
  • 知识库维护:需要持续更新知识库

评估框架

RAG 的评估需要同时衡量检索和生成质量:

指标衡量内容
上下文精确率检索文档与问题的相关性
上下文召回率所需信息是否被检索到
忠实度生成答案是否基于检索文档
答案相关性答案与问题的相关程度

相关资源

最近更新