本地私有知识库 MCP 工具:把本地文档导入本地向量库,供 Claude 等 MCP 客户端语义检索,数据不出本机
Project description
🧠 ff_PrivateRag – 本地私有知识库 MCP 工具
一个基于 MCP(Model Context Protocol)的本地知识库服务,让 AI 助手(如 Claude Desktop、Cursor)能直接检索你的私人文档和代码库。
📌 项目目标
- 私有化:所有数据、模型均运行在本地,无需联网,确保隐私安全。
- 本地检索增强:为 AI 助手提供本地文件(文档、代码)的语义检索能力,提升问答准确性。
- 轻量易用:通过 MCP 协议无缝集成到主流 AI 客户端,操作简单。
- 可追溯:记录文档来源、变更时间,支持审计与版本回溯。
🧩 技术选型
| 组件 | 选型 | 说明 |
|---|---|---|
| 编程语言 | Python 3.10+ | 生态成熟,AI/ML 库丰富 |
| MCP 框架 | FastMCP | 简化 MCP 服务器开发,装饰器风格 |
| 向量数据库 | ChromaDB | 轻量级,持久化,易用 |
| 嵌入模型 | BAAI/bge-small-zh-v1.5 | 本地运行,无需 API,面向中文检索,体积小 |
| 答案生成 | 由 MCP 客户端自身 LLM 完成 | 工具只做本地检索、返回片段;纯本地、隐私不出机 |
| 文档解析 | 按扩展名分发(.txt/.md/.pdf,pdfplumber) | 不引入 python-magic,后续可扩展更多格式 |
| 版本控制集成 | GitPython | 读取文件变更历史(用于追溯,Git 非必需) |
🏗️ 系统架构
graph TD
A[AI 客户端<br>Claude Desktop / Cursor] -->|MCP协议 stdio| B[ff_PrivateRag MCP Server]
B --> C[FastMCP 路由]
C --> D1[工具: ingest_document]
C --> D2[工具: query_knowledge]
D1 --> E[文本分块 Chunking]
E --> F[嵌入模型 Embedding]
F --> G[ChromaDB 向量存储]
D2 --> H[向量检索]
H --> G
H --> I[返回相关片段]
I --> J[LLM 生成答案(由客户端调用)]
🚀 安装
pip install ff-privaterag
安装后会注册命令行入口 ff-privaterag,用于以 stdio 方式启动 MCP 服务器。
首次执行检索/导入时会自动下载嵌入模型
BAAI/bge-small-zh-v1.5(约 95MB)并缓存到本地,之后离线可用。🇨🇳 中国大陆网络:
huggingface.co通常无法直连。工具会自动探测并回退到镜像https://hf-mirror.com,一般无需手动设置。
- 想指定其他端点:
export HF_ENDPOINT=https://your-mirror(PowerShell:$env:HF_ENDPOINT="...")- 想禁用自动回退:
export FF_PRIVATERAG_NO_HF_MIRROR=1
🔌 在 Claude Code CLI 中集成
claude mcp add ff-privaterag -- ff-privaterag
注册后重启 / 新开 Claude Code 会话,即可在对话中调用 ingest_document 与 query_knowledge 两个工具。
其他 MCP 客户端(Claude Desktop / Cursor)也兼容,在其配置中把
ff-privaterag注册为本地 stdio server 即可。
数据目录
向量库默认持久化在全局目录 ~/.ff_privaterag/chroma,与启动目录无关(适配被客户端作为子进程拉起的场景)。如需自定义:
export FF_PRIVATERAG_DATA_DIR=/your/custom/path # 覆盖默认持久化目录
💡 使用示例
在 Claude Code 对话中用自然语言即可,由模型自动调用工具:
导入文档
你:把 D:\docs\需求文档.md 导入知识库
→ 工具 ingest_document(file_path="D:\\docs\\需求文档.md")
← 成功导入文档 '需求文档.md',共 8 个文本块。
导入整个代码仓库(v0.2 新增)
你:把 D:\Workspace\my-vue-app 这个仓库导入知识库
→ 工具 ingest_directory(dir_path="D:\\Workspace\\my-vue-app")
← 目录 'my-vue-app' 导入完成:新增 187 个、更新 0 个文件,共 1432 个文本块;跳过 23984 个文件(gitignored 23800,unsupported_ext 150,too_large 20,binary 14)。
ingest_directory会:
- 递归导入目录下所有受支持的文本/代码/配置文件
- 自动剪枝
node_modules、.git、dist、build、__pycache__、.venv等无关目录- 跟随仓库
.gitignore跳过被忽略的文件- 跳过超大文件(默认 >1MB,可经
FF_PRIVATERAG_MAX_FILE_BYTES调整)与二进制文件- 每个文件沿用幂等逻辑:内容未变跳过、变更覆盖
支持的扩展名:文档(
.txt/.md/.pdf)、前端(.js/.ts/.jsx/.tsx/.vue/.css/.scss/.less/.html)、Python(.py/.pyi)、后端(.java/.go/.rs/.cpp/.c/.h/.cs/.kt/.rb/.php)、配置(.json/.yaml/.yml/.toml/.xml/.ini)。
⚡ 性能(v0.4):
- 流式写入:目录导入边嵌入边落盘(每满
FF_PRIVATERAG_FLUSH_CHUNKS块写一次,默认 512),导入中库逐步增长、中途中断已导入部分保留、再次导入自动跳过未变文件(断点续传)。- 快速模式(int8 量化,约 3× 提速):纯 CPU 下嵌入慢的解法。
pip install "ff-privaterag[fast]" # 装 optimum/onnxruntime export FF_PRIVATERAG_FAST_EMBED=1 # 启用 ONNX int8 量化后端实测 bge-small-zh 在 CPU 上约 21→72 块/秒(~3.4×),检索质量几乎无损(余弦 0.995)。首次会构建并缓存量化模型(约几十秒,仅一次,存于~/.ff_privaterag/onnx-int8/)。未装[fast]或加载失败时自动回退 PyTorch,不影响使用。
- 量化配置默认
avx512_vnni(现代 Intel/AMD);老 CPU/ARM 可设FF_PRIVATERAG_QUANT_CONFIG=avx2(或arm64)。- Git 元数据:目录导入只打开一次仓库(约 2.8× 提速);
FF_PRIVATERAG_NO_GIT_META=1可完全跳过(最快,但检索结果无作者信息)。- 进度与规模信息输出到 stderr 日志(Claude Code 的 MCP 日志面板可见);MCP 协议下没有实时进度条。
- 仓库很大时仍建议先导核心子目录(如
src/)。- 🔒 并发导入(v0.5):同一知识库同一时刻只能有一个导入在写(ChromaDB 限制)。若已有导入在进行时再发起导入,会立即收到友好提示(不再无声卡死),等前一个完成再试即可。极端情况下进程崩溃残留的锁会被自动接管;如有需要也可手动删除
<数据目录>/.import.lock。查询不受影响。
检索知识
你:知识库里关于"系统模块划分"是怎么说的?
→ 工具 query_knowledge(query="系统模块划分", n_results=3)
← 找到 3 条相关信息:
--- 结果 1 (来自: D:\docs\需求文档.md, 作者: zhangsan, 修改: 2026-06-20, 相似度: 0.812) ---
系统分为用户管理、订单管理...
🛠️ 本地开发
python -m venv .venv && .venv/Scripts/activate # Windows
pip install -e .[dev] # 可编辑安装 + 测试依赖
pytest # 运行测试
python -m build # 构建分发包到 dist/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ff_privaterag-0.5.0.tar.gz.
File metadata
- Download URL: ff_privaterag-0.5.0.tar.gz
- Upload date:
- Size: 108.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5db013816358c431a7b931afee7bedea219710cc804c660f33cb784b4ca12c6f
|
|
| MD5 |
c55474dc7b8c83641c8d831d3360a0d8
|
|
| BLAKE2b-256 |
408d696957642cab8343064a01d4ae93e0aa9566b2dfbea8b67d5141588510ab
|
File details
Details for the file ff_privaterag-0.5.0-py3-none-any.whl.
File metadata
- Download URL: ff_privaterag-0.5.0-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1f4c5219981b2ffc98426a4dc0860d091701be9e380b75c2dc777cf876eb2c8
|
|
| MD5 |
89ca13b1df2de7404b90463554dd06cc
|
|
| BLAKE2b-256 |
ab70687f4be0a3a3e6c5b61456146ae14b8888419afde6a3d30f767a1dd5b069
|