什么是RAG
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与文本生成相结合的技术架构。它让大语言模型能够在生成回答时引用外部知识库中的相关信息,从而解决模型的「幻觉」问题和知识截止日期限制。
RAG的核心流程
一个标准的RAG系统包含以下步骤:
- 文档加载:从PDF、网页、数据库等来源加载文档
- 文本分割:将长文档分割成适当大小的文本块(chunks)
- 向量嵌入:使用嵌入模型将文本块转换为向量表示
- 向量存储:将向量存入向量数据库
- 检索:根据用户查询检索最相关的文本块
- 生成:将检索结果作为上下文,由LLM生成最终回答
RAG技术栈
构建RAG系统涉及以下技术组件:
- LLM:DeepSeek、GPT-4、Claude等大语言模型
- 嵌入模型:text-embedding-3、bge-large-zh等
- 向量数据库:Chroma、Pinecone、Milvus、Weaviate
- 文档处理:LangChain文档加载器、Unstructured等
- 编排框架:LangChain、LlamaIndex、Haystack
LangChain RAG实现
以下是使用LangChain构建RAG应用的完整示例:
from langchain.document_loaders import TextLoader, PDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import DeepSeek
# 1. 加载文档
loader = TextLoader("knowledge_base.txt")
documents = loader.load()
# 2. 文本分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = text_splitter.split_documents(documents)
# 3. 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 4. 创建检索链
retriever = vectorstore.as_retriever(
search_kwargs={"k": 4}
)
qa_chain = RetrievalQA.from_chain_type(
llm=DeepSeek(),
chain_type="stuff",
retriever=retriever
)
# 5. 查询
result = qa_chain.run("什么是RAG?")
print(result)RAG的挑战与优化
- 检索质量:使用混合检索(关键词+语义)提升召回率
- 上下文窗口:精心设计chunk大小,避免超出模型上下文限制
- 答案准确性:添加引用溯源,让用户验证答案来源
- 延迟优化:使用缓存、并行检索等技术降低响应时间
总结
RAG是当前让AI「接地气」的最佳方式。从简单的文档问答开始,逐步添加高级特性,你就能构建出真正有用的AI应用。