RAG技术详解:让AI真正读懂你的私有知识库

为什么需要RAG?大模型的两大核心局限

直接使用大语言模型(LLM)构建企业应用时,面临两个根本性问题:

  • 知识截止日期:LLM的训练数据有截止时间,无法了解最新信息(如今天的新闻、公司最新政策)。
  • 幻觉问题(Hallucination):当模型不知道答案时,它会”编造”听起来合理的内容,在企业场景中这是不可接受的。

RAG(Retrieval-Augmented Generation,检索增强生成)通过在生成回答前先检索相关文档,将事实性内容注入提示词,从根本上解决了这两个问题。

RAG 完整工作流程

RAG系统分为两个阶段:

阶段一:离线索引(Indexing)

  1. 文档加载:读取PDF、Word、网页、数据库等各种格式的知识源。
  2. 文档分块(Chunking):将长文档切割成适合检索的小块(通常256~512 tokens),同时保留上下文重叠(Overlap)。
  3. 向量化(Embedding):用Embedding模型将每个文本块转换为高维向量(如1536维),语义相近的文本向量距离相近。
  4. 存入向量数据库:将向量及原文存储到向量数据库(如Chroma、Milvus、Pinecone、Weaviate)中建立索引。

阶段二:在线检索与生成(Retrieval & Generation)

  1. 查询向量化:用相同的Embedding模型将用户问题转换为向量。
  2. 相似度检索:在向量数据库中找出与查询向量最相似的Top-K个文档块(常用余弦相似度)。
  3. 上下文注入:将检索到的文档块与用户问题拼接成完整的Prompt。
  4. LLM生成:大模型基于注入的上下文生成准确、有依据的回答。

核心技术:向量数据库对比

向量数据库特点适用场景
Chroma轻量级,嵌入式,开源开发测试、小型项目
Milvus高性能,分布式,开源大规模生产环境
Pinecone全托管云服务快速上线,免运维
Weaviate多模态支持,混合检索图文混合知识库
PGVectorPostgreSQL扩展已有PG数据库的场景

从 Naive RAG 到 Advanced RAG

基础RAG在复杂问题上效果不佳,高级RAG引入了多项优化:

  • 混合检索(Hybrid Search):结合向量相似度检索和关键词检索(BM25),提升召回率。
  • 查询改写(Query Rewriting):用LLM将用户问题扩展或改写为多个子查询,提升检索覆盖面。
  • 重排序(Re-ranking):用专门的Cross-Encoder模型对初步检索结果重新排序,提升精准度。
  • 自反思RAG(Self-RAG):模型在生成过程中主动判断是否需要检索,检索后对结果质量打分,实现更智能的检索控制。
  • GraphRAG:微软提出的基于知识图谱的RAG增强方案,对需要跨文档推理的复杂问题效果显著。

RAG 实战架构参考(LangChain方案)

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. 加载文档
loader = PyPDFLoader("company_policy.pdf")
docs = loader.load()

# 2. 分块
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 3. 向量化 + 存储
vectordb = Chroma.from_documents(chunks, OpenAIEmbeddings())

# 4. 构建RAG链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4-turbo"),
    retriever=vectordb.as_retriever(search_kwargs={"k": 4})
)

# 5. 查询
answer = qa_chain.invoke("公司年假政策是什么?")
print(answer['result'])

RAG 效果评估指标

指标含义评估工具
Context Recall检索到的相关文档覆盖率RAGAS框架
Context Precision检索结果的准确率(有多少是真正相关的)RAGAS框架
Faithfulness生成答案与检索内容的一致性(防幻觉)RAGAS框架
Answer Relevancy回答与问题的相关程度RAGAS框架