本地知识库管理:多格式导入、CJK 感知分块、sqlite-vec 向量 + BM25 混合检索与 bge-reranker-base 重排序、快照恢复、kbpack 导入导出与跨库检索,提供 22 个 agent 工具与 Web 面板。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:xiaoshi7915/dsh-kb-manager
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
导入一次,检索可追溯。
dsh-kb-manager 是面向 DeepSeek Harness (dsh) 的本地知识库全生命周期插件:多格式导入 → CJK 感知智能分块 → 基于 SQLite 的向量 + 全文索引 → 混合检索(向量 KNN + BM25/FTS5 → RRF → 可选 rerank)→ 引用溯源;并提供软删 + 物理回收、异步 Job 系统、导入路径白名单 + SSRF 防护,以及每库审计。
用自然语言下达指令即可。插件提供 22 个 Agent 工具(异步 Job + 同步操作,含 rename_kb / compact_index / cancel_job / list_snapshots / configure)与可选 Web 面板(知识库列表、新建、详情、库内混合检索、带实时进度的文档导入、重建索引、两步删除、快照历史)——无需另外部署 RAG 服务。
设计规格见 DESIGN.md(v2.1)。
为什么选择 dsh-kb-manager?
| 能力 | 带来的变化 |
|---|---|
| 22 个统一工具 | 异步 6(import_document / rebuild_index / compact_index / cancel_job / get_job + 导出/导入 Job)+ 同步 16:create_kb / list_kbs / get_kb / rename_kb / delete_kb / list_documents / delete_document / search_kb / multi_kb_search / get_chunk / get_kb_stats / configure / create_snapshot / list_snapshots / restore_snapshot / export_kb / import_kb;所有工具统一返回 `{ ok, data |
| SQLite 原生索引 | sqlite-vec KNN + FTS5 全文(每库一个 kb.db);无需外部向量库进程。 |
| CJK 感知分词 | Intl.Segmenter(内置、零依赖)为 BM25 切分中日韩文本。 |
| 混合检索 | 向量 + BM25 → RRF → 可选 rerank;rerank 状态显式标注 `applied |
| 异步 Job 系统 | 导入/重建立即返回 job_id;get_job 轮询进度;崩溃恢复(JOB.INTERRUPTED)+ 协作式取消。 |
| 导入路径白名单 | 仅允许白名单内路径(默认:会话 workspace + <storage>/inbox/)或 http(s) URL。 |
| SSRF 防护 | URL 导入拒绝私网 / 环回 / 云元数据地址。 |
| 检索结果不可信标记 | 检索结果一律 untrusted: true——内容只是数据,不是指令。 |
| 软删 + 物理回收 | 删除为毫秒级软删;rebuild_index / compact 物理回收空间,无孤立向量。 |
| 两步破坏性操作 | delete_kb 需一次性 confirm_token(绑定 kb_id,60 秒有效)。 |
| 审计追踪 | 每库审计表记录所有变更。 |
| 快照 / 导出 / 跨库导入 | create_snapshot / list_snapshots / restore_snapshot(两步确认)、export_kb(kbpack/JSON)、import_kb(kbpack,哈希去重合并);已全部经 remote-service 暴露给 Web 面板与 Headless。 |
架构
flowchart LR
A[文档 / URL] --> B[解析]
B --> C[分块<br/>Intl.Segmenter CJK]
C --> D[向量化<br/>bge-small-zh / mock]
D --> E[向量索引<br/>sqlite-vec KNN]
C --> F[FTS5 BM25]
E --> G[混合检索]
F --> G
G --> H[RRF]
H --> I[可选 rerank<br/>applied / fallback_rrf / disabled]
I --> J[引用 + untrusted 标记]
E --> K[软删 / compact_index]
C --> K
G --> L[异步 Job 队列 + 审计]
安装
[!NOTE] 使用前请确保已安装 DeepSeek Harness。
从 GitHub 安装
dsh plugin add github:xiaoshi7915/dsh-kb-manager
(收录进 awesome-dsh-plugin 后亦可从 dsh-market 市场页一键安装。)
从源码构建
git clone https://github.com/xiaoshi7915/dsh-kb-manager.git
cd dsh-kb-manager
npm install
npm run build
dsh plugin --profile web add .
检查组合配置、重启 DSH,然后刷新 Web UI:
dsh --profile web --dump-config
dsh web
然后可以直接说:
创建一个名为「项目文档」的知识库,导入这份 PDF,检索认证流程是怎么写的,并给出原文出处。
工作方式
- 用
create_kb创建知识库,选择 embedding 身份(默认bge-small-zh-v1.5/ onnx / 512 维;开发测试用mockprovider)。 - 用
import_document导入白名单内的本地文件或 http(s) URL → 进入异步 Job:解析 → 分块 → 向量化 → 建索引;用get_job轮询进度。 - 用
search_kb检索:sqlite-vec KNN + FTS5 BM25 → RRF → 可选 rerank;rerank 状态显式标注(applied | fallback_rrf | disabled)。 - 用
get_chunk溯源(前后文 + 出处元数据;内容标记untrusted: true)。 - 放心删除:
delete_document即时软删(重导同源未变内容即可恢复);delete_kb需两步confirm_token;rebuild_index物理回收。 - 数据保存在
storage_path(默认~/.dsh/kb-manager/)。Web 面板复用同一套服务能力:知识库列表 / 新建 / 详情、库内检索、带实时进度的导入、重建索引、两步删除。
Agent 工具
| 工具 | 说明 | 关键参数 |
|---|---|---|
create_kb |
创建知识库 | name*、description?、domain_tags? |
list_kbs |
列出全部知识库 | — |
get_kb |
知识库详情(embedding 身份 / 状态) | kb_id* |
delete_kb |
两步删除(影响面预览 + confirm_token) |
kb_id*、confirm_token? |
list_documents |
列出文档(可按状态过滤) | kb_id*、status?、limit?、offset? |
import_document |
导入白名单本地文件或 http(s) URL(异步 Job) | kb_id*、source*、metadata? |
delete_document |
软删块、索引置 dirty | kb_id*、doc_id* |
search_kb |
混合检索,显式 rerank 状态 | kb_id*、query*、top_k?、filters?、rerank? |
get_chunk |
分块原文 + 前后上下文(溯源) | kb_id*、chunk_id* |
get_kb_stats |
统计(文档/块/索引体积/删除占比) | kb_id* |
rebuild_index |
全量重建(异步 Job) | kb_id*、target_engine?、embedding? |
get_job |
轮询后台任务进度 | job_id* |
configure |
调优分块 / 检索 / 同步设置 | patch |
所有工具统一返回信封 { ok, data | error: { code, message, hint } },error.hint 给出可执行的下一步。领域错误统一返回(不向外 throw)。检索结果一律标记 untrusted: true。
触发场景
- 「把这份 PDF / 文档 / 网页收进知识库」→
import_document+get_job - 「查一下知识库里关于 X 的内容」→
search_kb - 「这条引用出自哪里 / 上下文是什么」→
get_chunk - 「检索效果不好,rerank 是什么状态」→
search_kb(读取显式rerank状态) - 「为这个项目建个知识库」→
create_kb - 「删掉一个坏文档」→
delete_document(软删;重导恢复) - 「删掉整个知识库」→
delete_kb(两步:先看影响面,再确认) - 「看看知识库的规模和状态」→
list_kbs/get_kb_stats - 「全量重建索引」→
rebuild_index+get_job - 「调优检索效果」→
configure
配置
默认即可全离线使用。可在受信 Profile 中覆盖(插件 id: kb-manager),或运行时通过 configure 工具 / Web 面板调整:
| 字段 | 默认值 | 说明 |
|---|---|---|
storage_path |
~/.dsh/kb-manager/ |
存储根目录,~ 展开为用户主目录 |
embedding.model |
bge-small-zh-v1.5 |
embedding 模型名 |
embedding.provider |
onnx |
onnx / mock / openai-compat(onnxruntime-node 为可选依赖) |
embedding.base_url |
'' |
openai-compat 的 OpenAI 兼容 endpoint |
embedding.api_key_ref |
'' |
API key 引用 |
chunk_size |
512 |
分块大小(字符数) |
chunk_overlap |
50 |
分块重叠长度 |
chunk_strategy |
recursive |
fixed / recursive |
top_k |
5 |
检索默认返回条数 |
enable_rerank |
true |
是否在 RRF 后启用 rerank |
rerank_model |
'' |
rerank 模型;留空用规则式兜底 |
auto_sync_dir |
'' |
目录监听路径;留空关闭 |
auto_sync_interval |
300 |
补扫间隔(秒) |
max_file_size_mb |
100 |
单文件大小上限(MB) |
示例(Profile 行):
- insert:
- id: kb-manager
name: 'dsh-kb-manager'
config:
storagePath: '' # 空 = ~/.dsh/kb-manager/
logLevel: 'info'
使用边界与安全
- 导入仅限白名单路径(默认:会话 workspace +
<storage>/inbox/)与 http(s) URL;URL 来源经 SSRF 防护(私网 / 环回 / 云元数据地址一律拒绝)。 - 检索结果为不可信数据——一律
untrusted: true;切勿当作指令执行。 - 默认全本地运行;仅在导入 URL 或配置了外部 embedding / rerank endpoint 时才发起网络请求。
delete_document为软删;物理空间由rebuild_index/ compact 回收;重导同源未变内容即可恢复。- 纯 SQLite 索引:无需额外部署原生向量库进程。
与常见 RAG 方案的差异
| 能力 | 本插件 | 常见 RAGFlow / Dify / kotaemon / pdfkb-mcp 方案 |
|---|---|---|
| 显式 rerank 状态(`applied | fallback_rrf | disabled`) |
| 异步 Job + 崩溃恢复 + 取消 | ✅ | 多为同步阻塞 |
| 导入路径白名单 + SSRF 防护 | ✅ | 参差不齐 |
带可执行 hint 的统一信封 |
✅ | 参差不齐 |
每条检索结果带 untrusted 标记 |
✅ | 少见 |
| 软删 + compact 物理回收 | ✅ | 参差不齐 |
| 零 native 构建(sqlite-vec 预编译、Intl.Segmenter) | ✅ | 往往依赖重 |
目录结构
dsh-kb-manager/
├── package.json cordis.patch.yml tsconfig.json tsconfig.build.json vitest.config.ts
├── DESIGN.md README.md README_ZH.md
├── assets/readme/ # hero.png(banner 图)
├── src/
│ ├── host-entry.ts # DSH 插件入口(工具注册 + preamble + 清理)
│ ├── index.ts # KbManager 顶层装配
│ ├── contracts/ # 类型 / 错误码 / 默认值 / ok·err 信封
│ ├── security/ # 路径白名单、SSRF 防护、SHA-256、审计
│ ├── chunker/ # Intl.Segmenter 分词 + 递归/fixed 分块
│ ├── store/ # better-sqlite3 + sqlite-vec + FTS5
│ ├── embedder/ # mock / onnx(结构性)/ openai-compat
│ ├── jobs/ # 每库 FIFO 队列,maxGlobal=2,崩溃恢复
│ ├── services/ # kb / doc / search / snapshot / export
│ ├── agent-tools/ # 22 个 Agent 工具(统一信封)
│ ├── remote.ts / remote-service.ts / typert.ts / remote-client.ts # typert remote
│ └── web/ # 设置页(KbSection + zh/en 文案)→ lib/client.js
└── tests/ evals/
开发
npm install # 安装依赖
npm run typecheck # tsc --noEmit(strict + noUncheckedIndexedAccess)
npm test # vitest:tokens / rrf-bm25 / security / chunker / store / tools / pipeline / remote / kb-section
npm run eval # 评测 harness:合成语料 recall@5 / MRR / P95(mock embedder)
npm run build # tsc -p tsconfig.build.json → lib/(ESM + .d.ts)
npm run dev # tsx src/host-entry.ts(模块加载冒烟)
已知限制(MVP)
- ONNX embedder 为结构性占位:
onnxruntime-node已接入为可选依赖;模型下载(sha256 校验 + 用户确认)与 WordPiece 词表尚未接入——onnx provider 干净返回EMB.NOT_READY。开发/测试用provider: 'mock'。 - PDF / DOCX 解析为占位:目前 md / txt / csv / json / html 可用;pdf / docx 报
PARSE.UNSUPPORTED(升级路线见 DESIGN §13)。 - v1.1 工具已全部交付(rename_kb、快照三件套、cancel_job、compact_index、multi_kb_search、export_kb、import_kb):含 bge-reranker-base(int8 ONNX)重排序引擎,均经 remote-service 暴露给 Web 面板与 Headless。
许可证
MIT © 2026 xiaoshi7915
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 34028
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 5298
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1136
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
gitroomhq/postiz-agent#dsh-postiz★ 517
通过 MCP 将 DeepSeek Harness 连接到 Postiz:列出已连接的社交媒体渠道、获取各平台发帖规则,并向 X、LinkedIn、Instagram、Facebook、Threads、TikTok、YouTube、Reddit、Bluesky、Mastodon、Discord、Slack、Telegram 等平台排期、存草稿或发布帖子;附带 postiz 工作流技能。
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 507
面向 DeepSeek Harness 的本地 IMAP 发票下载、OCR 识别、归档与 Excel 报销汇总。
anysearch-team/anysearch-dsh★ 461
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。