在之前的文章中,我们探讨了如何在 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云”深度评测》!)