在 AI 应用爆发的 2026 年,如何让大语言模型理解你的私有文档和专业知识?答案就是 RAG(Retrieval-Augmented Generation,检索增强生成)系统。本文将手把手教你搭建一个生产级的 RAG 系统。
什么是 RAG?
RAG 是一种将外部知识库与大语言模型结合的技术。它通过检索相关文档,然后将检索结果作为上下文提供给 LLM,从而解决模型”幻觉”和知识过期的问题。
技术架构
一个完整的 RAG 系统包含以下核心组件:文档加载 → 文本分块 → 向量嵌入 → 向量数据库 ← 用户查询 ← 相似度检索
实战代码:基于 LangChain 的 RAG 实现
1. 环境准备
bash
pip install langchain langchain-community chromadb
pip install sentence-transformers ollama
2. 文档加载与处理
python
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader("knowledge.pdf")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)
print(f"生成 {len(chunks)} 个文本块")
3. 向量存储
python
from langchain_community.embeddings import OllamaEmbeddings
from langchain_chroma import Chroma
embeddings = OllamaEmbeddings(
model="nomic-embed-text",
base_url="http://localhost:11434"
)
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
collection_name="my-knowledge-base"
)
print("向量数据库创建成功!")
4. 构建问答系统
python
from langchain_community.chat_models import ChatOllama
from langchain.chains import RetrievalQA
llm = ChatOllama(model="qwen2.5:14b", temperature=0.7)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)
result = qa_chain.invoke({"query": "这份文档的核心要点是什么?"})
print(result["result"])
性能优化技巧
混合检索策略
python
from langchain_community.retrievers import BM25Retriever
from langchain.retrievers import EnsembleRetriever
bm25_retriever = BM25Retriever.from_documents(chunks)
ensemble_retriever = EnsembleRetriever(
retrievers=[vectorstore.as_retriever(), bm25_retriever],
weights=[0.7, 0.3]
)
生产环境部署建议
- 向量数据库:Pinecone(云端)、Milvus(大规模)、Chroma(轻量级)
- LLM 部署:Ollama 本地部署,vLLM 高吞吐量场景
- 缓存策略:Redis 缓存频繁查询
总结
RAG 系统是 AI 应用落地的关键技术,让大语言模型能够”看见”你的私有数据。通过本文的实战代码,你可以快速搭建自己的知识库问答系统。后续还可以探索多模态 RAG、Agent + RAG 等进阶方向。
觉得有用就点个赞吧~