Skip to content

RAG核心概念

概述

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索和文本生成的AI技术架构。它通过从外部知识库检索相关信息,增强大模型的生成能力,有效解决大模型知识截止、幻觉问题以及领域知识不足等痛点。

什么是RAG

基本定义

RAG将信息检索系统与大语言模型相结合,在生成回答前先从知识库中检索相关文档片段,然后将这些片段作为上下文提供给LLM,从而生成更准确、更有依据的回答。

工作流程

用户查询 → 向量化 → 向量检索 → 获取相关文档 → 构建Prompt → LLM生成 → 返回答案

核心组件

组件功能技术选型
文档处理文本分块、清洗LangChain、LlamaIndex
向量化文本转向量OpenAI Embeddings、BGE
向量存储向量索引与检索Pinecone、Milvus、Chroma
检索器相似度搜索FAISS、HNSW
生成器文本生成GPT-4、Claude、通义千问

RAG vs Fine-tuning

对比分析

维度RAGFine-tuning
知识更新实时更新知识库需要重新训练
成本较低,按需检索较高,训练费用大
适用场景知识密集型任务风格适配、特定任务
可解释性高,可追溯来源低,黑盒模型
数据隐私数据不进入模型数据用于训练
部署速度快,即插即用慢,需要训练时间

选择建议

适合RAG的场景:

  • 知识频繁更新的场景(新闻、政策)
  • 需要引用来源的场景(法律、医疗)
  • 企业私有知识库问答
  • 实时数据查询需求

适合Fine-tuning的场景:

  • 特定风格或格式要求
  • 领域专业术语理解
  • 复杂推理任务
  • 减少Prompt长度

混合方案:

  • RAG + Fine-tuning 结合使用
  • Fine-tuning优化模型能力,RAG提供知识支持

RAG架构模式

1. 简单RAG

最基础的RAG架构,直接检索并生成。

python
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA

embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=retriever
)

answer = qa_chain.run("什么是RAG?")

2. 高级RAG

增加预处理、重排序、后处理等环节。

python
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

llm = OpenAI(temperature=0)
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=retriever
)

docs = compression_retriever.get_relevant_documents("查询内容")

3. 模块化RAG

灵活组合各个模块,支持复杂场景。

python
class ModularRAG:
    def __init__(self):
        self.query_transformer = QueryTransformer()
        self.retriever = HybridRetriever()
        self.reranker = Reranker()
        self.generator = Generator()
    
    def process(self, query):
        expanded_queries = self.query_transformer.expand(query)
        docs = self.retriever.retrieve(expanded_queries)
        reranked_docs = self.reranker.rerank(docs, query)
        return self.generator.generate(query, reranked_docs)

关键技术点

向量嵌入

将文本转换为高维向量,捕捉语义信息。

python
from openai import OpenAI

client = OpenAI()

def get_embedding(text):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

embedding = get_embedding("这是一段测试文本")
print(f"向量维度: {len(embedding)}")

相似度计算

常用余弦相似度衡量向量相似程度。

python
import numpy as np

def cosine_similarity(vec1, vec2):
    dot_product = np.dot(vec1, vec2)
    norm1 = np.linalg.norm(vec1)
    norm2 = np.linalg.norm(vec2)
    return dot_product / (norm1 * norm2)

similarity = cosine_similarity(embedding1, embedding2)

检索策略

策略说明适用场景
密集检索向量相似度搜索语义相似查询
稀疏检索关键词匹配精确匹配需求
混合检索结合密集与稀疏综合效果最好
多查询检索扩展多个查询提高召回率

RAG的优势与挑战

优势

  1. 知识可更新:无需重新训练,更新知识库即可
  2. 减少幻觉:基于检索事实生成,降低编造风险
  3. 可追溯性:提供信息来源,增强可信度
  4. 成本可控:避免频繁微调的高昂成本
  5. 数据安全:敏感数据不进入模型参数

挑战

  1. 检索质量:检索不准确影响生成效果
  2. 上下文长度:检索文档过多超出窗口限制
  3. 延迟问题:检索步骤增加响应时间
  4. 知识冲突:多个来源信息不一致
  5. 冷启动:知识库构建需要时间和成本

实际应用场景

企业知识库

python
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = DirectoryLoader('./docs', glob="**/*.pdf")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)

vectorstore = Chroma.from_documents(chunks, embeddings)

智能客服

结合企业FAQ和产品文档,提供精准客服支持。

法律咨询

检索相关法条和案例,辅助法律决策。

医疗问答

基于医学文献和临床指南,提供专业医疗建议。

小结

RAG技术通过检索增强生成,有效解决了大模型的知识局限性和幻觉问题。相比Fine-tuning,RAG在知识更新、成本控制和可解释性方面具有明显优势。掌握RAG的核心概念和架构模式,是构建企业级AI应用的重要基础。

下一章将深入讲解文档处理与分块策略,这是RAG系统的第一步关键环节。