📖 定义
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,处理实体关系复杂的问题