🧠 本地RAG知识库: 用 n8n + Qdrant + Ollama 打造轻量级私有知识检索系统

📁 学习

本地 RAG 知识库 - 拒绝臃肿,200MB 撑起海量笔记检索

项目愿景:搭建一套完全本地化、隐私安全的 RAG(检索增强生成)系统。不依赖外部 API,无需庞大显存,Qdrant 仅需 200MB 内存,配合 n8n 工作流和 Ollama 本地模型,实现个人知识库的智能检索。


🏗️ 架构概览

整套系统将 Obsidian 笔记通过 n8n 自动化处理后存入 Qdrant 向量数据库,最后通过 AI Agent 进行检索回答。

1
2
3
4
5
6
Obsidian ──▶ N8N ──▶ Qdrant
(笔记) (工作流) (向量库)


Ollama
(Embedding)

数据流向

  1. 数据源:宿主机上的 Markdown 笔记(Obsidian)
  2. **编排层 (n8n)**:读取文件 → 切片 → 调用本地模型向量化
  3. **模型层 (Ollama)**:提供 Embedding 能力
  4. **存储层 (Qdrant)**:存储向量数据并提供检索

🐳 环境部署

1. 部署 Qdrant 向量数据库

创建 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
services:
qdrant:
image: qdrant/qdrant:latest
container_name: qdrant
restart: always
ports:
- "6333:6333" # REST API + Web Dashboard
- "6334:6334" # gRPC 接口
volumes:
- ./qdrant_data:/qdrant/storage
deploy:
resources:
limits:
memory: 8G
networks:
- nca-network

networks:
nca-network:
external: true
name: nca-network
1
2
3
# 创建网络并启动
docker network create nca-network
docker-compose up -d

访问 http://localhost:6333/dashboard 进入管理界面。

2. 配置 N8N 挂载目录

在 Docker Desktop → Settings → Resources → File Sharing 中添加笔记目录所在盘符,然后修改 N8N 配置:

1
2
3
4
5
6
services:
n8n:
volumes:
- "D:/你的笔记目录:/app/obsidian:ro"
networks:
- nca-network

⚙️ 关键配置:向量维度

Collection 的维度必须与 Embedding 模型输出完全一致! 这是新手最容易踩坑的地方。

维度 对应模型 说明
768 Qwen3-Embedding-8B, BGE 中文文本推荐 ✅
1536 OpenAI text-embedding-3-small OpenAI 小模型
4096 Qwen2.5:7b 作为 Embedding 时

创建 Collection

通过 HTTP Request 或 Dashboard 创建:

1
2
3
4
5
6
7
PUT http://qdrant:6333/collections/obsidian_notes
{
"vectors": {
"size": 768,
"distance": "Cosine"
}
}

🔧 N8N 工作流搭建

读取文件配置

N8N 的 “Read File(s) From Disk” 节点不支持递归通配符,需要手动指定多层路径:

1
2
3
/app/obsidian/*.md
/app/obsidian/*/*.md
/app/obsidian/*/*/*.md

完整工作流

1
2
3
4
[Manual Trigger] 
→ [Read File(s) From Disk]
→ [Embeddings Ollama]
→ [Qdrant Vector Store] (Insert)

Qdrant Vector Store 节点配置

  • Operation: Insert Documents
  • Qdrant URL: http://qdrant:6333(容器内网络)
  • Collection: obsidian_notes

🚨 踩坑实录:AI 为什么死活不查库?

这里分享一个真实的”翻车”经历。

问题现象
工作流搭建完毕,数据库里也有数据,但问 AI Agent 具体笔记内容时,总是报错 Invalid configuration provided for the tool,或者直接胡编乱造。

排查过程
检查了 Docker 网络、API Key、向量维度,看似都没问题。最后发现问题出在 Tool Description 这一栏。

原因
因为偷懒,我在 Qdrant Tool 的描述栏里随手打了一串乱码。AI 是通过 Description 来理解工具用途的,乱码导致大模型根本不知道这个工具是干嘛的。

解决方法
将 Description 修改为清晰的自然语言:

“Use this tool to search for related context from the user’s local knowledge base about Obsidian notes.”

修改后,Agent 瞬间跑通!


❓ 常见问题

向量维度不匹配

1
Error: Vector dimension error: expected dim: 768, got 4096

解决:删除 Collection,重新创建,维度设为与 Embedding 模型输出一致。

读取不到文件

检查清单

  1. Docker Desktop 是否添加了目录共享
  2. docker-compose 路径格式是否正确
  3. 容器是否重启
  4. 验证挂载:docker exec n8n ls /app/obsidian

📦 资源下载


为了方便大家直接上手,我整理了完整的部署文件:

📥 点击下载部署文件包

包含内容:

  • docker-compose.yml - Qdrant 部署配置(含详细注释)
  • ollama/docker-compose.yml - Ollama + Open WebUI 部署配置

📈 项目亮点总结

  1. 极致轻量: Qdrant 仅需 200MB 内存,告别显存焦虑
  2. 完全本地: 不依赖外部 API,数据隐私有保障
  3. 自动化流程: n8n 工作流一键导入笔记
  4. 灵活扩展: 支持多种 Embedding 模型切换

🎯 这套方案最大的优势就是。希望这篇排错记录能帮到正在折腾本地知识库的你!