RAG Retrieval-Augmented Generation

检索增强生成 — 让大模型拥有实时知识库

核心技术 知识库 热门

📖 定义

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索技术与大型语言模型相结合的AI架构。它允许模型在生成回答之前,先从外部知识库中检索相关信息,从而提供更准确、更及时、更可验证的答案。

核心理念:不是让模型记住所有知识,而是教会它如何查找和使用知识。

⚙️ 工作原理

1

文档预处理

将文档切分成chunks,使用Embedding模型转换为向量,存入向量数据库

2

检索阶段

用户问题向量化,在向量库中查找最相似的文档片段

3

生成阶段

将检索到的上下文与问题一起送入LLM,生成回答

🎯 核心优势

🆕

知识时效性

可实时更新知识库,无需重新训练模型

可溯源

答案基于检索到的文档,可追溯来源

💰

成本更低

比微调模型更节省计算资源和成本

🔒

数据隐私

私有数据无需上传到模型服务商

💻 代码示例

使用 LangChain 实现基础 RAG

from langchain import OpenAI, VectorDBQA
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader

# 1. 加载文档
documents = TextLoader('knowledge_base.txt').load()

# 2. 切分文档
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 3. 创建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# 4. 创建RAG链
qa = VectorDBQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    vectorstore=vectorstore
)

# 5. 查询
query = "什么是RAG技术?"
result = qa.run(query)
print(result)

使用 LlamaIndex 的高级 RAG

from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index.retrievers import VectorIndexRetriever
from llama_index.query_engine import RetrieverQueryEngine

# 加载文档
documents = SimpleDirectoryReader('data').load_data()

# 构建索引
index = VectorStoreIndex.from_documents(documents)

# 配置检索器
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=5
)

# 创建查询引擎
query_engine = RetrieverQueryEngine(retriever=retriever)

# 查询
response = query_engine.query("解释RAG的工作流程")
print(response)

🚀 应用场景

  • 企业知识库问答:基于内部文档的智能客服
  • 法律/医疗咨询:引用专业文献的精准回答
  • 学术论文助手:检索相关研究并提供总结
  • 代码文档查询:基于技术文档的编程助手
  • 产品手册查询:帮助用户快速找到产品信息

🛠️ 常用工具与框架

LangChain 最流行的RAG开发框架
LlamaIndex 专注于数据索引和检索
Chroma 轻量级向量数据库
Pinecone 托管向量数据库服务
Milvus 开源分布式向量数据库

📚 进阶技术

Hybrid Search (混合检索)

结合向量相似度搜索和关键词搜索,提升检索准确性

Reranking (重排序)

使用交叉编码器对初筛结果重新排序,获取更精准的相关文档

Multi-hop RAG

多跳推理,处理需要多个信息源组合的复杂问题

GraphRAG

结合知识图谱的RAG,处理实体关系复杂的问题