English · 简体中文
, message }`,不向外 throw。
## 触发场景
1. 「把这份 PDF / 文档 / 网页收进知识库」→ `import_document`
2. 「查一下知识库里关于 X 的内容」→ `search_kb`
3. 「在所有知识库里找 Y」→ `multi_kb_search`
4. 「这条引用出自哪里 / 上下文是什么」→ `get_chunk`
5. 「检索效果不好,看看各阶段分数」→ `search_kb({ debug: true })`
6. 「大改前先留个备份」→ `create_snapshot`
7. 「回滚到改之前的状态」→ `restore_snapshot`
8. 「把这个知识库打包带走 / 迁到另一台机器」→ `export_kb` + `import_kb`
9. 「本地文件改了知识库会更新吗」→ 目录监听自动增量同步
10. 「看看知识库的规模和状态」→ `list_kbs` / `get_kb_stats`
## 配置
默认即可全离线使用。可在受信 Profile 中覆盖(插件 `id: kb-manager`):
| 字段 | 默认值 | 说明 |
| --- | --- | --- |
| `storage_path` | `~/.dsh/kb-manager/` | 存储根目录,`~` 展开为用户主目录 |
| `default_embedding_model` | `hash-embed-v1` | 离线兜底;也可填 OpenAI 兼容模型名 |
| `embedding_api_base` | `''` | OpenAI 兼容 endpoint;留空用 HashEmbedder |
| `embedding_api_key` | `''` | embedding API key |
| `chunk_size` | `512` | 分块大小(字符数) |
| `chunk_overlap` | `50` | 分块重叠长度 |
| `chunk_strategy` | `recursive` | `fixed` / `recursive` / `semantic` |
| `top_k` | `5` | 检索默认返回条数 |
| `enable_rerank` | `true` | 是否在 RRF 后启用 rerank |
| `rerank_endpoint` | `''` | 远程 rerank;留空用内置规则式 reranker |
| `index_type` | `hnsw` | `hnsw` / `flat` |
| `auto_sync_dir` | `''` | 目录监听路径;留空关闭 |
| `auto_sync_kb_id` | `''` | 同步目标知识库 |
| `auto_sync_interval` | `300` | 补扫间隔(秒) |
| `max_file_size_mb` | `100` | 单文件大小上限(MB) |
| `read_only` | `false` | 只读模式开关 |
示例:
```yaml
- id: kb-manager
config:
storage_path: ~/.dsh/kb-manager/
default_embedding_model: text-embedding-3-small
embedding_api_base: https://api.openai.com/v1
chunk_strategy: recursive
index_type: hnsw
enable_rerank: true
read_only: false
```
## 使用边界
- 读写 `storage_path`;`import_document` / `import_kb` 还会读取用户指定的本地路径或 URL;`export_kb` 写出到 `output_path`。
- 不支持的格式返回 `unsupported_format`;超限文件由 `max_file_size_mb` 拒绝。
- 默认全本地运行;仅在配置了 `embedding_api_base` / `rerank_endpoint` 或导入 URL 时才发起网络请求。
- `export_kb` 不修改知识库数据,只读模式下仍可用。
- 纯 TS 索引:无需额外部署原生向量库进程。
## 与常见 RAG 方案的差异
| 能力 | 本插件 | 常见 RAGFlow / Dify / kotaemon / pdfkb-mcp 方案 |
| --- | --- | --- |
| KB 版本快照与回滚 | ✅ | 通常缺失 |
| `.kbpack`(原文+分块+索引+元数据) | ✅ | 通常缺失 |
| 目录监听 + 停机补扫 | ✅ chokidar + SHA-256 | 部分支持 / 缺失 |
| 检索管线逐阶段 debug 分数 | ✅ vector / BM25 / RRF / rerank | 多为黑盒 |
| 全离线 embedding 兜底 | ✅ HashEmbedder | 往往依赖外部服务 |
| 只读模式 | ✅ | 少见 |
## 目录结构
```
dsh-kb-manager/
├── package.json cordis.patch.yml tsconfig.json tsdown.config.ts vitest.config.ts
├── awesome-entry.yml README.md README_ZH.md
├── assets/readme/ # hero.png(请粘贴生成图到此处)
├── src/
│ ├── index.ts # 插件入口(name / inject / Config / apply)
│ ├── config.ts # Schemastery 配置 schema
│ ├── core/ parse/ chunk/
│ ├── embed/ index/ search/
│ ├── kb/ # KBService、快照、同步、kbpack
│ ├── tools/ # 16 个 Agent 工具
│ └── client/ # Web 面板
└── tests/
```
## 开发
```sh
npm install # 安装依赖(prepare 自动构建)
npm run build # tsdown 双入口 → lib/index.js + lib/client.js
npm test # vitest
npm run typecheck # tsc --noEmit
```
## 许可证
[MIT](./LICENSE) © 2026 xiaoshi7915