RAG(检索增强生成)让AI能访问你的私有数据。本文从零搭建一个完整的RAG知识库系统。
一、什么是RAG?
RAG = 检索(Retrieval)+ 增强(Augmented)+ 生成(Generation)。简单说:先从知识库中检索相关内容,然后把这些内容作为上下文给LLM生成回答。
二、RAG架构
用户提问 → 向量检索 → 获取相关文档 → 组装Prompt → LLM生成回答
三、环境准备
pip install langchain chromadb openai tiktoken
四、文档处理
from langchain.document_loaders import TextLoader, PDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 加载文档
loader = TextLoader("your_document.txt")
documents = loader.load()
# 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", "。", "!", "?"]
)
chunks = text_splitter.split_documents(documents)
五、向量化
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# 创建向量数据库
embeddings = OpenAIEmbeddings()
vectordb = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
# 持久化
vectordb.persist()
六、检索问答
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
# 创建QA链
llm = ChatOpenAI(model="gpt-4o")
retriever = vectordb.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever
)
# 提问
result = qa_chain.run("你的问题")
print(result)
七、优化技巧
提升RAG质量的关键:
1. 文档分块大小:太大太小都不好,1000字左右最佳
2. 重叠度:200字重叠保证上下文连续
3. 检索数量:k=3-5,太多会引入噪音
4. 重新排序:用reranker对检索结果重新排序
5. 混合检索:向量检索+关键词检索结合
1. 文档分块大小:太大太小都不好,1000字左右最佳
2. 重叠度:200字重叠保证上下文连续
3. 检索数量:k=3-5,太多会引入噪音
4. 重新排序:用reranker对检索结果重新排序
5. 混合检索:向量检索+关键词检索结合
八、总结
RAG是让AI理解私有数据的关键技术。掌握RAG,就能搭建企业级AI知识库、智能客服、文档问答等应用。