本地私有知识库 RAG(local-kb-rag)
把个人 PDF/Markdown 笔记沉淀为「永不掉线、完全私有」的数字第二大脑。 全链路 OpenVINO 本地推理:BGE-M3 Embedding 与 BGE-reranker 精排跑在 NPU, Qwen2.5-7B-Instruct INT4 生成跑在 iGPU,无加速硬件时自动回退 CPU。 语料、向量、模型全部驻留本机,仅答案文本回传 Agent。
何时使用本 Skill
| 用户意图 | 应调用的工具 |
|---|---|
| 「把这个 PDF/笔记加入知识库」「记住这份文档」 | kb_ingest |
| 「在我的笔记里找…」「知识库里关于 X 的片段」(只要原文,不要生成) | kb_search |
| 「根据我的文档回答…」「知识库问答」(需要归纳的答案 + 引用) | kb_ask |
| 「知识库里都有什么文档」 | kb_list_sources |
| 「RAG 服务状态怎么样」「模型跑在什么设备上」 | kb_status |
工具使用指引(供 Agent 大脑决策)
- 先摄入后问答:若用户给出文件路径,先
kb_ingest(path=...);kb_ingest幂等, 同一 doc_id 重复摄入会覆盖更新。 - search vs ask:用户要「原文片段/出处定位」用
kb_search(秒级,实测约 2–5s); 要「归纳性答案」用kb_ask(检索+精排+本地 LLM,十秒级,视设备而定)。 - 引用可信:
kb_ask返回的citations[]是真实检索片段回填, 答案中 [1][2] 编号与之对应,可直接展示给用户核对出处。 - 首次调用:会自动拉起常驻推理 server;首跑需下载模型(数 GB,支持断点续传),
请先调用
kb_status告知用户state(downloading/loading/running)。 - 空文件/不支持格式:
kb_ingest支持.pdf.md.markdown.txt; 其他格式请先转换或用content参数直接传入文本。
接入方式
第 0 步:安装环境(两种方式都需要)
& .\scripts\install-env.ps1 # 默认官方 PyPI
& .\scripts\install-env.ps1 -Mirror # 国内网络推荐:清华镜像
脚本会自动:
- 选择 Python 3.12/3.11/3.10 创建专用 venv(
%USERPROFILE%\.openvino\venvs\local-kb-rag), 3.13+ 会被拒绝(openvino/onnxruntime 无预编译轮子,源码编译必败); - 屏蔽外部 pip 配置与
PIP_TARGET/PYTHONPATH污染,强制--only-binary :all:; - 装完实测 import 验证通过才写完成标记,失败可直接重跑(幂等)。
方式 A:MCP(Qoder / WorkBuddy / TRAE Work 推荐)
在宿主的 MCP 配置(如 Qoder mcp.json)中注册:
{
"mcpServers": {
"local-kb-rag": {
"command": "%USERPROFILE%\\.openvino\\venvs\\local-kb-rag\\Scripts\\python.exe",
"args": ["<skill_root>\\scripts\\mcp_adapter.py"]
}
}
}
首次注册前先执行 scripts\install-env.ps1 完成环境安装。
方式 B:标准 CLI(官方 run.ps1 入口)
& .\scripts\run.ps1 status
& .\scripts\run.ps1 ingest --source "C:\notes\spec.pdf"
& .\scripts\run.ps1 search --query "OpenVINO 如何部署到 NPU"
& .\scripts\run.ps1 ask --query "本方案如何保证隐私不出机?"
& .\scripts\run.ps1 list-sources
& .\scripts\run.ps1 remove-source --doc-id a1b2c3
& .\scripts\run.ps1 shutdown
两种方式经同一条 named pipe(\\.\pipe\local-kb-rag)调同一个常驻 server,
模型只加载一次;空闲 300s 自动关停释放显存。
运行要求
- Windows AIPC(Intel Core Ultra 推荐,NPU/iGPU 自动探测,无则 CPU 兜底; 实测 CPU+iGPU 机型可正常降级运行)
- 内存 ≥ 8GB;磁盘 ≥ 10GB(模型缓存)
- Python 3.10–3.12(硬性要求:闭源推理包仅发布 cp310–cp312 预编译轮子,
3.13/3.14 无法安装;
install-env.ps1会自动校验并拒绝不合规版本) - 首跑需联网下载模型(ModelScope,支持断点续传),此后完全离线
离线能力(实机断网验证)
本 Skill 的数据面(推理/向量库/问答全链路)100% 本地,断网可用; 但宿主 Agent 的「大脑」(如 Qoder 云端模型)离线时不可用:
| 场景 | 断网后 | 用法 |
|---|---|---|
| MCP 工具调用(自然语言) | ❌ 宿主云端大脑不可达 | 恢复联网后可用 |
| CLI 直调(本地数据面) | ✅ ingest/search/ask 全链路正常 | & .\scripts\run.ps1 … |
前提:模型已下载完成(首跑联网一次)。
故障排查
日志与运行时文件(%USERPROFILE%\.openvino\ 下):
| 文件 | 用途 |
|---|---|
| logs\local-kb-rag\server.log | server/pipeline 主日志(状态机、设备分配、异常) |
| logs\local-kb-rag\server.stderr.log | 原生层崩溃取证(Python traceback 之外的硬崩) |
| runtime\local-kb-rag\server.pid | 常驻 server 进程号 |
常见问题:
- server 硬崩后能自愈:单实例判活基于 pipe 实探而非 pidfile,残留 pidfile / PID 复用不会导致拒启,下次调用自动拉起新 server。
- 脚本升级后无需手动重启:client 比对脚本 hash,变更时自动
shutdown 旧 server 并重启(日志可见
script hash changed, restarting server)。 - 磁盘占用迁移:模型/venv 占用数 GB,可用 NTFS junction 把
%USERPROFILE%\.openvino\{models,venvs}透明映射到大盘(代码零改动):New-Item -ItemType Junction -Path "$env:USERPROFILE\.openvino\models" -Target "D:\openvino-store\models"。 - 首次安装失败:确认 Python 版本在 3.10–3.12,国内网络加
-Mirror重跑; 模型下载中断后重跑会断点续传,已下载的原始权重不会丢失。
微信扫一扫