零基础搭建个人AI知识库:2026年最完整的 RAG 系统搭建教程(含源码)

📅 2026/7/15 ✍️ 小文 📖 约 1 分钟

手把手教你用 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("我去年写的年度总结里提到的主要成果有哪些?"))

进阶优化技巧

  1. HyDE 检索:先用LLM生成一个假设性回答,再用这个回答去检索,能提升20-30%的召回率
  2. 重排序(Rerank):在检索结果上加一层 BGE Reranker,将最相关的结果排到前面
  3. 元数据过滤:给文档打上标签(如”工作""学习""项目A”),检索时可以按分类过滤
  4. 增量更新:新文档加入后只需embed新内容,无需重新索引所有数据

总结

一个本地的 RAG 知识库并不复杂。初学者按上述步骤,1小时内就能跑通。而一旦上手,你会发现它带来的效率提升是革命性的。2026年,拥有一个属于自己的 AI 知识库,已经成为知识工作者的”新标配”。

📤 分享到