零基础搭建个人AI知识库:2026年最完整的 RAG 系统搭建教程(含源码)
手把手教你用 LangChain + Qdrant + Ollama 本地搭建完全私有的RAG知识库,无需GPU、无需联网、保护隐私。支持PDF/网页/笔记多种数据源。
在2026年,个人知识管理正在被AI重塑。想象一下:你有一个”第二大脑”,它读过你所有文档、笔记、收藏的文章,当你问问题时,它给出精准回答并标注来源。这就是 RAG(检索增强生成)知识库。
本教程将带你从零搭建一个完全本地、无需联网、保护隐私的个人知识库。全部工具开源免费,普通笔记本就能跑。
架构概览
用户提问 → Embedding → 向量检索 → 结果召回 → LLM生成 → 回答+来源
↑
本地文档库
(PDF / Markdown / 网页)
核心组件:
- Ollama:本地运行大语言模型(推荐 Llama 3.2 或 Qwen 2.5)
- Qdrant:本地向量数据库
- LangChain:编排检索与生成的管道
- Open WebUI:美观的对话界面(可选)
第一步:部署 Ollama 并下载模型
# 安装 Ollama(Linux/macOS)
curl -fsSL https://ollama.com/install.sh | sh
# 拉取推荐模型组合
ollama pull qwen2.5:7b # 对话模型
ollama pull nomic-embed-text-v2 # 嵌入模型
Qwen2.5 7B 在中文知识问答上表现出色,对比同参数量级模型有明显优势。如果你的机器内存不足(低于 8GB),可选用 Qwen2.5:3b 或 Llama 3.2:3b。
第二步:搭建向量数据库(Qdrant)
# 使用 Docker 部署 Qdrant(推荐)
docker run -d --name qdrant -p 6333:6333 -v $(pwd)/qdrant_data:/qdrant/storage qdrant/qdrant
Qdrant 的优势在于其高效的 HNSW 索引和过滤功能,支持百万级向量在毫秒内检索。
第三步:编写 RAG Pipeline
from langchain_community.embeddings import OllamaEmbeddings
from langchain_qdrant import QdrantVectorStore
from langchain_community.document_loaders import DirectoryLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载文档
loader = DirectoryLoader("./docs", glob="**/*.md")
docs = loader.load()
# 文本分块(最佳实践:chunk_size=512, overlap=64)
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=64)
chunks = splitter.split_documents(docs)
# 建立向量存储
embeddings = OllamaEmbeddings(model="nomic-embed-text-v2")
vector_store = QdrantVectorStore.from_documents(
chunks, embeddings,
url="http://localhost:6333",
collection_name="my_knowledge_base"
)
第四步:检索与生成
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOllama(model="qwen2.5:7b", temperature=0.2)
retriever = vector_store.as_retriever(search_kwargs={"k": 5})
def ask(question):
context = retriever.get_relevant_documents(question)
prompt = ChatPromptTemplate.from_messages([
("system", "基于以下内容回答问题。如果内容不足,请明确说明。\n{context}"),
("human", "{question}")
])
chain = prompt | llm
return chain.invoke({"context": context, "question": question})
# 测试
print(ask("我去年写的年度总结里提到的主要成果有哪些?"))
进阶优化技巧
- HyDE 检索:先用LLM生成一个假设性回答,再用这个回答去检索,能提升20-30%的召回率
- 重排序(Rerank):在检索结果上加一层 BGE Reranker,将最相关的结果排到前面
- 元数据过滤:给文档打上标签(如”工作""学习""项目A”),检索时可以按分类过滤
- 增量更新:新文档加入后只需embed新内容,无需重新索引所有数据
总结
一个本地的 RAG 知识库并不复杂。初学者按上述步骤,1小时内就能跑通。而一旦上手,你会发现它带来的效率提升是革命性的。2026年,拥有一个属于自己的 AI 知识库,已经成为知识工作者的”新标配”。