用Python + LangChain打造个人AI知识库:从零搭建RAG系统实战教程
RAG(检索增强生成)是2025年最实用的AI应用范式之一。本文将手把手教你用Python + LangChain从零搭建一个个人知识库RAG系统,让你的AI助理能够基于你自己的文档回答问题。
一、什么是RAG?
RAG = Retrieval Augmented Generation(检索增强生成)。简单来说:
1. 用户提问 → 2. 从文档库中检索相关片段 → 3. 将片段拼入提示词 → 4. AI基于检索到的信息回答
相比直接问AI,RAG的优点是:答案基于你的数据,幻觉率大幅降低,且支持私有知识不泄露。
二、环境搭建
pip install langchain langchain-community langchain-openai chromadb pypdf python-docx tiktoken
# 或使用国内镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain langchain-community langchain-openai chromadb pypdf python-docx tiktoken
三、核心代码实现
3.1 文档加载器
from langchain_community.document_loaders import PyPDFLoader, TextLoader, Docx2txtLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
import os
def load_documents(folder_path):
documents = []
for file in os.listdir(folder_path):
path = os.path.join(folder_path, file)
if file.endswith('.pdf'):
loader = PyPDFLoader(path)
elif file.endswith('.txt'):
loader = TextLoader(path, encoding='utf-8')
elif file.endswith('.docx'):
loader = Docx2txtLoader(path)
else:
continue
documents.extend(loader.load())
return documents
3.2 文本分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["
", "
", "。", ".", " ", ""]
)
chunks = text_splitter.split_documents(documents)
chunk_size=500、chunk_overlap=50是通用推荐值。对于技术文档,建议使用”\n\n”作为首选分隔符。
3.3 向量存储
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
建议使用text-embedding-3-small模型,兼顾性能与成本。中文文档也可以用BGE或M3E等国产模型。
3.4 检索问答链
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.2)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(search_kwargs={"k": 4}),
return_source_documents=True
)
result = qa_chain.invoke({"query": "公司的技术架构是什么样的?"})
print(f"答案:{result['result']}")
四、进阶优化技巧
1. Hybrid Search: 结合关键词搜索(BM25)和向量搜索,提升检索准确率。
2. Reranker: 检索后用Cross-Encoder对结果重排序,将最相关的内容排前面。
3. Query Transformation: 在检索前让LLM对用户问题做改写/扩展,提升检索命中率。
4. Context Compression: 压缩检索结果,只保留最相关的内容片段,减少Token消耗。
五、完整项目目录结构
my_rag/
├── data/ # 存放文档(pdf/txt/docx)
├── chroma_db/ # 向量数据库持久化目录
├── main.py # 主程序
├── ingest.py # 文档入库脚本
└── requirements.txt # 依赖清单
六、总结
用LangChain搭建RAG系统只需要不到100行代码,但真正好用的RAG系统需要针对你的场景调优:文档分块策略、检索参数、提示词模板,每个环节都值得深入打磨。建议先用30份文档做实验,找到最优参数后再批量处理。
