Skip to content

使用 Ollama 与 Qdrant 构建企业级本地 RAG 知识库 (2026版)

毛佳国
更新于:

在之前的文章中,我们探讨了如何在 Homelab 中通过 Ollama 运行本地开源大模型。

但许多朋友在部署后发现痛点:“模型能聊天,但它并不知道我个人或公司的私域数据;面对本地成百上千篇 Markdown 笔记或内部代码库,它频繁产生幻觉。”

这正是 检索增强生成(RAG, Retrieval-Augmented Generation) 的用武之地。

通过将文档切片并计算高维嵌入向量(Embedding),存入基于 Rust 构建的顶级极速向量数据库 Qdrant,结合多路召回与重排模型,打造一套 100% 物理隔绝、无任何数据外流风险的私人智能大脑!

[!NOTE] 📌 核心速览(TL;DR / 快问快答):

  • 为什么选择 Qdrant:用 Rust 编写,内存占用与检索延迟显著优于 Python 原生框架(如 ChromaDB);支持单节点 Docker 极速部署,原生产生极高吞吐的 HNSW 向量索引。
  • 黄金 RAG 流程链:文档分块(Chunk 500~800 字 + 10% Overlap) -> bge-m3 / nomic-embed-text 生成向量 -> Qdrant 存储 -> 混合检索(向量语义 + BM25 关键词) -> BGE Reranker 重排序打分 -> 送入 qwen2.5:14b 生成精准回答。
  • 100% 离线隐私:全链路无需连接任何公网云服务,企业敏感财务报表、机密客户名册与代码库均在本地闭环。

🌐 2026 生产级本地 RAG 架构流程图

graph TD
    Docs[私域 Markdown / PDF / 代码库] --> Splitter[智能递归切片 (Chunk 600 + Overlap 60)]
    Splitter --> EmbedModel[Ollama: nomic-embed-text / bge-m3]
    EmbedModel --> VectorDB[(Qdrant 向量数据库: Rust 高速 HNSW 索引)]
    UserQuery[用户提问: 2025 主板推荐?] --> QueryEmbed[计算问题向量]
    QueryEmbed --> VectorDB
    VectorDB -->|粗筛召回 Top 15 证据块| Reranker[BGE-Reranker-v2 二次重排打分]
    Reranker -->|精选 Top 3 高分上下文| LLM[Ollama 本地大模型: Qwen 2.5 14B]
    LLM --> FinalAnswer[输出精准无幻觉回答并附带原文引用]

🛠️ 2026 生产级 Qdrant Docker Compose 部署

在服务器创建 compose.yaml:

services:
  qdrant:
    image: qdrant/qdrant:latest
    container_name: local_qdrant
    restart: unless-stopped
    ports:
      - "6333:6333" # HTTP REST API
      - "6334:6334" # 高性能 gRPC 端口
    volumes:
      - ./qdrant_storage:/qdrant/storage
    environment:
      - QDRANT__SERVICE__GRPC_PORT=6334

启动数据库:docker compose up -d。


🚀 核心 Python 代码:构建问答索引通道

from langchain_community.document_loaders import DirectoryLoader
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Qdrant
from langchain_community.llms import Ollama
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 1. 初始化 Ollama 向量模型
embeddings = OllamaEmbeddings(model="nomic-embed-text", base_url="http://localhost:11434")

# 2. 文件夹递归加载并切片
loader = DirectoryLoader('./my_notes', glob="**/*.md")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=600, chunk_overlap=60)
docs = text_splitter.split_documents(documents)

# 3. 极速写入 Qdrant
qdrant = Qdrant.from_documents(
    docs,
    embeddings,
    url="http://localhost:6333",
    collection_name="private_second_brain",
)

# 4. 检索并由本地大模型合成回答
retriever = qdrant.as_retriever(search_kwargs={"k": 3})
llm = Ollama(model="qwen2.5:14b", base_url="http://localhost:11434")

question = "根据我的笔记,2025 年推荐的服务器主板是什么?"
relevant_docs = retriever.invoke(question)
context = "\n".join([doc.page_content for doc in relevant_docs])
prompt = f"基于以下参考信息精准回答:\n\n{context}\n\n问题:{question}"

print(llm.invoke(prompt))

❓ 常见问题与 AI 快问快答 (FAQ)

Q1: 搜索专业英文缩写或变量名(如 AUTH_KEY)经常搜不到怎么办?

答:纯语义向量检索对精确字面匹配不敏感;在 Qdrant 中开启 混合检索 (Hybrid Search),融合稠密向量(Dense Vector)与稀疏向量(Sparse Vector / BM25 词频统计),精准匹配专业专有名词。

Q2: 自建跨地域同步私有知识库推荐哪家专线海外 VPS?

答:在 DMIT 或 搬瓦工 的 中国电信 CN2 GIA 或 联通 AS9929 专线 VPS 上部署私有 Qdrant 集群节点,跨国多点同步向量嵌入数据吞吐极快。选购参考见 《2026 国外 VPS 选购指南》。


(相关资源导航:如果您需要购买部署云端向量数据库与 AI 服务的独立 VPS,欢迎阅读 《2026 国外 VPS 选购指南》 获取 DMIT、搬瓦工与 CloudCone 优惠;商用专线推荐见 《“饿饭CC云”深度评测》!)

上一篇
Ansible 自动化:批量管理 VPS 与内网服务器的终极方案 (2026版)
下一篇
Sing-box 高效配置与出站路由全解析:从入门到真实场景实战 (2026版)