本地私人知识库智能问答(Local RAG)
基于本地 AI 大模型的私有知识库 RAG 问答技能。所有文档处理、向量嵌入、检索与生成均在本地完成(OpenVINO 加速),隐私数据绝对不出机。
技术架构
用户指令 → run.ps1 → client.py ──命名管道──→ server.py(长驻)
├─ doc_loader.py 文档加载与分块
├─ vector_store.py 向量存储(NumPy)
└─ rag_engine.py 嵌入→检索→生成
├─ Qwen3-Embedding-0.6B(INT8)
└─ Qwen2.5-1.5B-Instruct(INT4)
- 嵌入模型:
OpenVINO/Qwen3-Embedding-0.6B-int8-ov(多语言,INT8 量化) - 生成模型:
OpenVINO/qwen2.5-1.5b-instruct-int4-ov(INT4 量化) - 推理框架:OpenVINO GenAI(无需 PyTorch,轻量独立运行)
- 向量存储:NumPy 余弦相似度(零外部数据库依赖)
- 部署方式:Client/Server 命名管道架构(模型常驻内存,秒级响应)
Usage
唯一入口为 scripts\run.ps1,切勿直接调用其他脚本。
命令示例
| 功能 | 命令 |
|------|------|
| 导入文档 | scripts\run.ps1 add "C:\docs\报告.pdf" |
| 批量导入 | scripts\run.ps1 add "C:\docs\file1.pdf" "C:\docs\file2.txt" |
| 导入目录 | scripts\run.ps1 add "C:\docs\folder" |
| 导入文本 | scripts\run.ps1 add-text "这是一段知识内容" --source "笔记" |
| 知识库问答 | scripts\run.ps1 ask "这份报告的主要结论是什么?" |
| 指定检索数 | scripts\run.ps1 ask "问题" --top-k 8 |
| 列出来源 | scripts\run.ps1 list |
| 移除来源 | scripts\run.ps1 remove "报告.pdf" |
| 清空知识库 | scripts\run.ps1 clear |
| 查看状态 | scripts\run.ps1 status |
| 关闭服务 | scripts\run.ps1 shutdown |
支持的文档格式
.txt .md .pdf .docx .csv .html .htm
输出解读
- ask:返回
答:答案正文 +引用来源:来源文件列表 +检索片段:匹配文本预览及相似度分数 - add:返回每个文件的导入分块数,失败文件单独标注
- status:返回服务状态(running/downloading/loading/error)、PID、运行时间、知识库分块数与设备信息
--continue 续传协议
首次运行时模型需从 ModelScope 下载(约 1.5GB)。若下载未在 8 分钟内完成:
- 客户端保存待处理请求到
~/.openvino/local-rag-pending-request.json - 输出提示:
模型正在下载中,请稍后使用 --continue 继续运行 - 退出码
3 - 用户执行
scripts\run.ps1 --continue自动恢复中断的请求
失败处理
- 服务未启动:客户端自动拉起服务端进程(独立模式)
- 模型下载失败:检查网络连接,重新运行或使用
--continue - 文档格式不支持:返回不支持的格式列表及已支持的格式
- 知识库为空时问答:返回提示信息,引导用户先导入文档
Important
- 唯一入口:仅通过
scripts\run.ps1调用,不要直接运行client.py或server.py - 首次运行:需下载模型(约 1.5GB),请确保网络畅通;后续运行无网络需求
- 平台要求:推荐 Intel AIPC(GPU/NPU 加速);非 AIPC 平台以 CPU 模式运行
- 无云端回退:所有推理纯本地完成,不发送任何数据到云端
- 数据隐私:文档内容、向量索引均存储在本地
~/.openvino/data/local-rag/ - 内存占用:建议 ≥ 4GB 可用内存(模型常驻 + 推理峰值)
安装到 TRAE Work / WorkBuddy / Qoder
将本技能目录复制到宿主应用的 skills 目录:
- TRAE Work:
.trae\skills\local-rag\ - WorkBuddy: 对应 skills 目录
- Qoder: 对应 skills 目录
宿主应用会根据 SKILL.md 的 description 字段自动路由用户意图到本技能。
Scan to join WeChat group