← 返回列表
需源码安装
kb-rag — 带段落级溯源的本地文献 RAG
暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/16 · 已提供中文文档
本地优先的文献知识库 RAG(DeepSeek Harness 插件):混合检索正文与图注,把模糊记忆定位到具体段落与图表,DOI 一键直达原文。Local-first literature RAG for DSH — turn a fuzzy memory into an exact passage/figure, one-click DOI to source.
综合分
38.6
GitHub 分
38.6
用户评分
—
★ Stars
11
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Breeze136/dsh-kb-rag仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-kb-rag(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
仓库缺少 package.json,无法用 dsh 插件安装命令安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/18 09:26:24
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
kb-rag — 带段落级溯源的本地文献 RAG
npm version
npm downloads
GitHub release
License: MIT
Awesome DSH Plugin
dsh.so security
kb-rag 是面向 DSH(DeepSeek Harness)以及任何支持 MCP 的 agent 的本地文献知识库。它将 PDF 和 Zotero 文库索引到单个 SQLite 文件中,然后用段落而非转述来回答问题:每个结果都带有其所属章节、PDF 物理页码以及可点击的 DOI——并且检索到的段落中的每一条文内引用都可以追溯到被引用的文献,包括该文献是否已在你的文库中。
索引、嵌入和重排全部在本地运行。没有 API 费用,也不会上传。
快速开始 ·
部署形态 ·
工具参考 ·
文档 ·
实测性能
输出长什么样
单次 kb_rag 调用会以如下形式返回证据。该工具目前以中文渲染其界面,因此下面这段是该输出的译文;它打印的库内标记在此处显示为 [in-library]:
Knowledge base sources Top-2
deep · reranked with BAAI/bge-reranker-base · cache hit
1. Chemical vapour deposition of graphene on copper substrates — Author A; Author B · 2024 · Carbon · Results · p.4
graphene domains nucleate on the copper surface and coalesce into a continuous film ... at a growth rate of ~2 um/min
citations from this evidence ([in-library] = already held, searchable)
· [Ref 4] Author C, et al. Carbon 48, 1234 (2010)
[in-library] Nucleation and growth of graphene on transition metals (Author C · 2010 · Carbon) (this evidence's Ref 4) · open in Zotero
· 3 further citations collapsed (Ref 6-8); use the numbers to fetch them
Related work
- [A Practical Guide to Raman Spectroscopy of Graphene] — Author G et al. · 2020 (same author, related topic)
完整的操作演示,包括 agent 的回答以及解决页码问题的后续追问,都在 docs/OUTPUT-FORMAT.md 中。该示例使用中立的占位数据:作者、期刊和 DOI 均为虚构。
定位
检索只是基本要求;问题在于结果距离原始证据有多远。kb-rag 返回的是位置而非摘要:章节、PDF 物理页码、可点击的 DOI,以及该段落背后的引用链。
三个刻意的取舍定义了本项目:
- 本地优先,零上传。 嵌入和重排序在本地 bge 模型上运行。整个索引就是一个 kb.sqlite 文件,可以复制或归档。
- 垂直领域,而非通用。 感知章节的分块(摘要和方法部分加权)、原生 Zotero 迁移,以及 DOI 引用惯例。它是为论文而构建的,而非用于任意文档管理。
- 明确说明局限。 没有文本层的扫描版 PDF 会被跳过,图注作为文本而非图像被索引,跨语言检索较弱。这些都在已知局限中记录,而不是被承诺为即将推出的功能。
[!IMPORTANT]
范围与预期。 检索质量受限于文献库本身:该工具无法从它未收录的文档中作答,也无法读取没有文本层的扫描页面。有三个行为值得提前了解:
- 首次使用较慢。 嵌入模型(约 95 MB)和重排序器(约 1.1 GB)会在首次使用时下载,首次查询需等待约十秒以加载它们。随后常驻守护进程会将它们保留在内存中,后续查询为亚秒级。
- 锚点是摄取时的数据。 页码锚点和上标引用标记在文档被解析时生成。在 v1.6 之前索引的文献库仍可正常工作,但这些字段会保持为空,直到使用 force 重新摄取文档。
- 批量摄取是异步的。 当待处理文件超过 KB_ASYNC_THRESHOLD(默认 25)时,kb_ingest 会将批次作为后台任务 fork 出去,并立即返回一个 job_id,而不是阻塞会话——在两种部署形态下都是如此,因此宿主端的调用超时不会中断该工作。使用 kb_status 轮询任务,直到它报告 done。
三种部署形态
一个引擎(kb_engine.py),一种数据格式,三个入口点:
| 形态 | 入口点 | 工具集 |
|---|---|---|
| DSH 插件(主要) | plugin/ — 在 DSH 会话内进行对话式使用 | 10 个工具,新增 kb_scope(查询范围和严格模式,一个 DSH 会话概念)和 kb_status(后台任务轮询) |
| MCP 服务器 | mcp-server/server.py — stdio,用于 Claude Desktop、Cherry Studio、Kimi、DeepSeek、Cursor 等 | 9 个工具;kb_status 在两种形态中都存在,因此只有 kb_scope 是 DSH 特有的 |
| npm 包 | dsh-kb-rag — 声明 dsh.bundle,因此 dsh plugin add 一步即可安装并激活 | 与 DSH 插件相同 |
快速开始
1. 环境要求
Python 3.9 或更高版本。安装程序会检查 Node 和 pnpm,如果缺少 pnpm 会自动安装。DSH 用户在 DSH 配置文件中操作;MCP 用户只需要 Python。
Windows — 从 v1.6.3 起支持非 ASCII 用户名
Windows PowerShell 5.1 默认将管道编码设为 ASCII,这会把临时路径中的非 ASCII 用户名变成 ?,导致引擎冒烟测试失败并报 WinError 123。从 v1.6.3 起,安装程序在脚本开头强制使用 UTF-8 管道编码。详情见:docs/install-winerror123-fix.md。
受限网络 — 模型下载回退到镜像
当直接下载失败时,安装程序和引擎都会通过 hf-mirror.com 重试(_apply_hf_mirror 会修补 huggingface_hub 的常量,因为在导入后设置环境变量不起作用)。如需手动指定:HF_ENDPOINT=https://hf-mirror.com。
2. 安装
在 Windows 上不想碰命令行? 使用配套的
一键安装程序:从
dsh-oneclick 发布页面下载 zip,
完整解压后,双击 install.cmd。它会补装缺失的
Node.js(无需管理员权限)、官方 DSH CLI 并创建桌面快捷方式,还会
询问一次是否需要此知识库——按回车后,Python、引擎
依赖以及约 1.2 GB 的检索模型也会一并安装。再次运行即可
更新。它是第三方辅助工具,并非由 DeepSeek 发布:它通过官方渠道
安装官方软件包。
方案 A — 一条命令(如果你有终端,推荐)
npx dsh-kb-rag-install
安装程序会运行整个流程:Python 依赖、引擎冒烟测试、Node/pnpm 检查、dsh plugin add 激活,以及模型预下载(默认开启;传入 --no-models 可跳过)。如果未指定配置文件,它会检查 ~/.dsh/profiles/:只有一个配置文件时直接使用,有多个时提供选择,一个都没有时回退到 web。
不使用微包时的等效命令:npx --yes --package dsh-kb-rag -c "dsh-kb-rag-install --profile web"
方案 B — DSH 用户,直接安装插件
dsh plugin --profile web add dsh-kb-rag
方案 C — 从源码安装
git clone https://github.com/Breeze136/dsh-kb-rag.git && cd dsh-kb-rag
./npm-package/scripts/install.sh # macOS / Linux / Git Bash
Windows: install.cmd, or npm-package\scripts\install.ps1
3. 构建知识库
在 DSH 对话中,让它摄取一个文件夹(kb_ingest)或同步 Zotero(kb_zotero)。单篇论文可以先通过标识符获取(kb_fetch——它会优先解析出版商版本,这在校园网或机构网络下有效,并回退到开放获取)。
批量摄取——让宿主超时不再碍事
当待处理文件数超过 KB_ASYNC_THRESHOLD(默认 25)时,kb_ingest 在两种部署形态下都会切换为后台任务;该计数在调用到达时进行(DSH 插件让引擎统计文件数,MCP 服务器在宿主侧统计)。调用会立即返回一个 job_id;用 kb_status 轮询它,直到状态为 done。整库 Zotero 迁移使用 kb_zotero(async_mode=true)。该任务在它自己的子进程中运行,因此 60 秒的客户端超时不会中断它。
4. 提问
- “库中哪些论文讨论了铜上石墨烯生长?”——kb_search
- “这是哪篇论文的哪一页说的?”——读取证据上的 page 字段,或点击 Zotero 页面链接
- “仅根据库内容回答”——用 kb_scope 开启严格模式(DSH)
- “快速查看”与“深入分析”——kb_search 默认为 quick(亚秒级),kb_rag 默认为 deep(重排序、引文链接、相关工作)
安装后重启 DSH 并打开新会话:工具在创建会话时注入,因此现有会话不会加载它们。分步说明和常见陷阱见 QUICKSTART.md。
5. 升级
DSH 配置文件是一个 pnpm 工作区(它包含 pnpm-lock.yaml,而且 dsh plugin 本身会转发给 pnpm),因此升级使用与安装插件相同的命令:
dsh plugin --profile web add dsh-kb-rag # latest
dsh plugin --profile web add dsh-kb-rag@1.6.7 # or pin a version
重新运行安装程序效果相同,并且还会协调 Python 依赖:
npx dsh-kb-rag-install --profile web
[!WARNING]
不要在 DSH 配置文件内运行 npm install dsh-kb-rag。 它会在 pnpm 的符号链接存储旁边写入一个 npm 风格的 node_modules,此后两种布局将不一致;后续的 dsh plugin 操作会变得不可预测。npm install 仅适用于完全手动管理的部署(见 npm-package/README.md,选项 3)。
升级后,重启 DSH 并打开新会话。现有的 .kb 库会自动迁移(见 docs/MIGRATION.md),但对于较早索引的文档,页面锚点和上标引文标记需要使用 force 重新摄取——迁移只添加列,不会重新解析文档。当库的一部分由较旧的解析器版本写入时,kb_stats 会报告 stale_docs,随后插件会在会话的首次检索时询问一次如何处理:忽略、仅刷新元数据,还是重新摄取。
工具参考
DSH 插件(10 个工具)
| 工具 | 用途 | 示例请求 |
|---|---|---|
| kb_ingest | 摄取文件或文件夹:增量跳过、去重、按章节分块、向量化(PDF/TXT/MD/DOCX)。metadata_only=true 会原地刷新标题/作者/年份/期刊/DOI,rebuild=true 会重新解析每个已索引文档;大批量会自动转为后台任务 | “摄取 papers 文件夹” |
| kb_status | 通过 job_id 轮询后台摄取任务:running 并显示进度(已处理 / 错误 / 分块),done 并显示该任务的汇总和最近文件,error,或 not_found | “摄取进展如何?” |
| kb_zotero | 迁移本地 Zotero 文库,包括 PDF 附件 | “同步 Zotero” |
| kb_search | 混合检索,返回带有精确来源信息的段落(标题、作者、年份、期刊、DOI、页码、章节) | “搜索铜上石墨烯的化学气相沉积” |
| kb_rag | 证据问答,默认取前 3 条,带编号引用 | “在 CVD 过程中石墨烯如何在铜上生长?” |
| kb_scope | 查询范围(仅文库 / 文库加网络 / 仅网络)、严格模式、检索深度 | “切换到严格模式” |
| kb_dedup | 删除重复文档,保留最早的一份 | “去重” |
| kb_clear | 清空所有文档和索引;需要 confirm=true | “清空知识库” |
| kb_stats | 文档、分块和向量数量,最近摄取记录,以及 stale_docs(由较旧解析器版本写入的文档) | “文库中有什么?” |
| kb_fetch | 通过 DOI 或 arXiv ID 下载 PDF(优先出版商版本,因此校园或机构订阅可生效;开放获取作为回退) | “下载 10.5555/12345678” |
MCP 服务器通过 9 个工具暴露同一引擎,并且还提供 kb_status(后台任务轮询);只有 kb_scope 仍为 DSH 特有。配置和客户端片段:mcp-server/README.md。
引擎能力
- 感知章节的分块。 摘要加权 ×1.5,方法 ×1.2,内联标题检测,摘要提升,图注块;非文章类文档进行段落合并。
- 混合检索。 支持 CJK 双字词的 BM25 关键词匹配,bge-small 向量余弦相似度,RRF 融合,章节权重。
- 重排序。 bge-reranker-base 交叉编码器,从 top 20 到 top 3,并在交叉编码器不可用时自动回退到 bge-large-en 双编码器。
- 页面锚点(schema v3)。结果携带 PDF 物理页码,并渲染为 section · p.N,可映射到 Zotero 的 ?page=N 深度链接。
- 引用链接。 正文中的 [n] 标记会解析到参考文献条目;Nature 风格的上标会根据字体度量检测(graphene1,2 变为 graphene[1,2]);被引作品会通过 DOI、规范化标题或第一作者加年份与文库匹配,匹配项在渲染结果中标记为文库内。
- 快速和深度模式。 quick 直接返回混合命中结果(不进行重排序、引用链接或相关工作),deep 运行完整链路。
- 增量索引与去重。 SHA-256 内容哈希会跳过未更改的文件(重新运行时约快 40 倍),并拦截跨路径的重复文件。
- 元数据刷新与陈旧数据检测(schema v4)。每个文档都会记录写入它的解析器修订版本(docs.indexed_with),因此 kb_stats 可以报告 stale_docs —— 即由较旧修订版本写入、增量摄取否则永远不会再访问的行。kb_ingest(metadata_only=true) 会重新提取标题、作者、年份、期刊和 DOI,而无需重新分块或重新嵌入(实测每文档约 90 毫秒),而 kb_ingest(rebuild=true) 会就地重新解析每个已索引的文档。
- 查询缓存。 相同的查询和过滤器不会被重新计算;任何摄取都会使其失效。
- 常驻守护进程。 模型只加载一次,守护进程会从崩溃中恢复,并且在插件停止时被回收。
查询指南
查询会原样到达引擎:它从不翻译、扩展或重写查询,因此检索取决于查询是否与已索引文本的语言匹配。典型的文库绝大多数是英文(实测:正文文本约 98%),这带来了实际后果:
- 谁来编写查询是首要问题。 在 DSH 会话中,你从不自己编写查询——由 agent 编写,而它的工具描述已经指示它在调用 kb_search / kb_rag 之前将 CJK 问题重写为英文术语字符串。因此用中文提问是预期之中的,也没问题。只有当你直接驱动这些工具(MCP 客户端、脚本、引擎 CLI)时,才需要自己编写英文术语字符串。
- 为什么英文术语字符串检索效果更好。 BM25 基于 token 匹配,因此 CJK 查询会让混合排序中的关键词部分处于闲置状态——CJK 二元组无法匹配英文正文——命中与否仅取决于跨语言向量相似度。对于同一个问题,英文术语字符串的检索效果明显优于其译文。
- 使用 3–12 个词的模式 材料/体系 + 方法/工艺 + 性能/表征,而不是完整问句:用 graphene CVD copper single crystal nucleation suppression,而不是 “how is nucleation suppressed on copper during chemical vapour deposition of graphene”。
- 将限制条件放在 filters 中,而不是查询中。 年份、期刊、作者、章节和文件类型都是元数据过滤器;将它们留在查询文本中会把关键词浪费在排序后的正文文本并不包含的词语上。一个注意事项:journal 仅由 Zotero 迁移路径填充,因此对于所有通过 kb_ingest 索引的内容,它都保持为 NULL,对其过滤通常不会返回任何结果——请改用作者、年份、标题或章节。
- 仅当确实需要该语言的文档时,才用原始语言发送第二个查询——例如当文库中还包含中文综述时。
当查询包含 CJK 字符而文库几乎完全是英文时,引擎会在响应中添加一条 lang_note 说明这一点,插件会将其渲染在结果旁边。
架构
DSH model / MCP client (Claude, Cherry, Kimi, Cursor, ...)
| tool call: kb_ingest / kb_search / kb_rag / kb_stats ...
v
plugin host (JS) or MCP server (server.py + engine_client.py)
| JSON lines over stdio, one request/response per line
v
kb_engine.py -- resident serve daemon (models load once)
|-- ingest: sha256 skip -> PyMuPDF extraction -> section chunking -> bge-small encode
| (committed per file; above KB_ASYNC_THRESHOLD the batch is forked as a job
| under .kb-jobs/ and a job_id is returned for kb_status to poll, while
| metadata_only reads page 1 only and rebuild re-parses the library's
| own recorded paths)
|-- search: SQL prefilter -> BM25 + vector -> RRF fusion -> bge-reranker rerank
| -> top-N verbatim passages with DOI, page, section and score
-- storage: /kb.sqlite (docs, chunks, vecs, cache; schema v4,
migrations gated by PRAGMA user_version)
实测性能
| 指标 | 结果 |
|---|---|
| 摄取吞吐量 | 242 个 PDF/DOCX 文件(1.8 GB)耗时 85.9 秒,约每份文档 355 毫秒 |
| 增量重跑 | 同一目录重新摄取耗时 2.17 秒,提速 40 倍 |
| 查询延迟 | 2 万个分块下热启动为 0.4–1.3 秒(含重排序);quick 模式下约 16 毫秒 |
| 库大小 | 209 份文档、19,832 个分块、19,832 个向量,存于单个 SQLite 文件 |
| 引文解析 | 跨 11 份出版商 PDF:某 Wiley 综述从 0 增至 399 条,某 Nature 快报从 8 增至 37 条,某 Science 论文从 0 增至 29 条——严格递增 |
| 全量重建索引(GPU) | 316 个 PDF / 2.35 万个分块 / 2.01 万个向量在 8 GB 消费级 GPU 上重建耗时 219 秒,零错误 |
| 嵌入吞吐量 | GPU 上 164 个分块/秒 vs CPU 上 37 个分块/秒(约 4.4 倍);从批次 32 到 256 保持平稳,因此瓶颈在 CPU 侧的分词——而非 GPU |
在 Windows 上实测;前四行采用 CPU 推理。方法与设计依据见 docs/DESIGN.md。
设备处理(GPU / CPU)
摄取与搜索共用同一个嵌入模型,且会自动选用 CUDA 版 torch——无需任何配置(KB_DEVICE=auto,即默认值):
- 在首次加载模型前会用一个微型矩阵乘法探测设备。仅报告有 GPU 的驱动是不够的——版本不匹配、容器以及独占计算模式都会在第一个内核处失败——因此探测会提前捕获这些问题,并以可读的原因回退到 CPU,而不是在后续模型加载时才失败。KB_GPU_PROBE=0 可跳过探测。
- 调用过程中的设备故障会降级而非中止:批次先减半,再降至 4,然后将模型移至 CPU,调用仍能完成。生效过的批次大小会在该进程的剩余时间内被记住。非设备类错误(文件缺失、模型目录错误)会原样抛出——回退机制绝不会掩盖真正的问题。
- reload 会重新启用 GPU:修复驱动或安装 CUDA 版 torch 后,reload 会重置设备判定,而 drop_models=true 会将模型重新加载到 GPU 上——无需重启主机。
- 批大小取决于设备和空闲 VRAM(低于 8 GB 时分级);调大它们并不会加速小模型。KB_EMBED_BATCH / KB_RERANK_BATCH 会覆盖默认值。
- 仅 CPU 时,嵌入步骤大约慢 4 倍。 PDF 文本提取(PyMuPDF)、分块、引用判定和 BM25 无论如何都受 CPU 限制,因此更快的 CPU 也能缩短摄取时间。
kb_stats 会报告结果——device: {requested: auto, probe: ok, cuda_available: true, gpu: …, vram_gb: 8.0, embed_device: cuda:0, rerank_device: cuda:0, batch: {…}}——以及发生回退时的 gpu_disabled_reason 和 note。
文档
| 文档 | 内容 |
|---|---|
| QUICKSTART.md | 五分钟设置:依赖项、索引、检索、常见陷阱 |
| docs/DESIGN.md | 设计说明:存储模型、分块策略、检索流水线、引擎协议 |
| docs/OUTPUT-FORMAT.md | 输出和引用约定:页面锚点、引用链接、快速和深度模式 |
| docs/MIGRATION.md | 模式迁移:PRAGMA user_version 门控,v1 到 v4 |
| docs/BACKLOG.md | 已知缺口:未修复的问题、仍需验证的项,以及如何验证更改 |
| mcp-server/README.md | MCP 配置、工具映射、异步行为和超时 |
| npm-package/README.md | npm 包文档和故障排除表 |
| SECURITY.md | 执行模型和安全边界:会启动、读取、写入、下载什么 |
| UNINSTALL.md | 移除:停止插件并删除索引,保持 PDF 和 Zotero 不受影响 |
| CHANGELOG.md | 发布历史 |
配置
| 变量 | 默认值 | 适用于 | 描述 |
|---|---|---|---|
| KB_EMBED_MODEL | BAAI/bge-small-zh-v1.5 | 引擎 | 嵌入模型;首次使用时下载到 Hugging Face 缓存 |
| KB_RERANK_MODEL | BAAI/bge-reranker-base | 引擎 | 重排序模型 |
| KB_DEVICE | auto | 引擎 | auto 会在 CUDA 版 torch 找到可用设备时使用 GPU;cpu / cuda / cuda:1 / mps 强制指定选择。任何设备故障都会自动回退到 CPU |
| KB_GPU_PROBE | 1 | 引擎 | 0 会跳过一次性的“此设备是否真的能计算?”探测(一个小型矩阵乘法),直接加载模型——这是针对异常环境的逃生通道 |
| KB_EMBED_BATCH | GPU 128 / CPU 32(低于 8 GB VRAM 时分级) | 引擎 | 用于摄取和搜索的嵌入批大小。调大它对小模型没有帮助——实测吞吐量在 32 到 256 之间基本持平 |
| KB_RERANK_BATCH | GPU 64 / CPU 16(低于 8 GB VRAM 时分级) | 引擎 | 重排序批大小 |
| KB_MODEL_RETRY_SECS | 120 | Engine | 失败的模型加载在重试前被记住的时长(0 = 每次调用都重试,负值 = 永不重试) |
| HF_ENDPOINT | 无 | Engine | 在受限网络上设置为 https://hf-mirror.com |
| KB_AUTO_PIP | 0 | npm 包 | 1 会在启动时安装缺失的 Python 依赖(固定 argv;默认仅打印命令)。动态插件宿主会报告但不会安装 |
| KB_RAG_ROOT | DSH:会话工作区 .kb;MCP:~/.kb-rag | MCP | 知识库目录;可通过 kb_root 按调用覆盖 |
| KB_RAG_PYTHON | 当前解释器 | MCP | 用于引擎的解释器,以避免裸 python 解析到其他位置 |
| KB_ASYNC_THRESHOLD | 25 | Engine | 待处理文件数超过此值时,kb_ingest 会派生一个后台任务并返回 job_id(用 kb_status 轮询) |
| KB_SQLITE_WAL | 关闭 | Engine | 1 启用 SQLite WAL;当 .kb 目录被同步时,默认值更安全 |
| UNPAYWALL_EMAIL | 内置占位符 | Engine | kb_fetch 用于 Unpaywall 查询的联系地址;请设置为你自己的 |
仓库结构
kb-rag/
├─ kb_engine.py Python 引擎:分块、检索、重排序、serve 守护进程
├─ install.cmd Windows 入口点(双击运行 scripts\install.ps1)
├─ scripts/ 安装脚本(install.ps1、install.sh)
├─ plugin/ DSH 动态插件(kbrag.plugin.json、host.js、client.js)
├─ npm-package/ npm 包 dsh-kb-rag(发布内容、cordis.patch.yml)
├─ dsh-kb-rag-install/ 提供裸 npx dsh-kb-rag-install 命令的微型包
├─ mcp-server/ MCP 服务器(server.py、engine_client.py)
├─ docs/ DESIGN.md、OUTPUT-FORMAT.md、MIGRATION.md、install-winerror123-fix.md
├─ tools/ 内部维护脚本(不发布)
└─ QUICKSTART.md、CHANGELOG.md、SECURITY.md、UNINSTALL.md、LICENSE
运行时数据:DSH 插件写入会话工作区中的 .kb/kb.sqlite;MCP 服务器默认使用 ~/.kb-rag/kb.sqlite。后台任务文件位于 /.kb-jobs/,任务完成后会被删除。
已知限制
- 不支持扫描版 PDF。 没有文本层的文档会被跳过;OCR 有意不在范围内。
- 页码锚点仅适用于 PDF。 TXT、MD 和 DOCX 文件,以及在 schema v3 之前索引的文档,都没有页码,会回退到章节级定位,直到用 force 重新摄取。
- 引用链接需要重新摄取。 上标检测和当前的参考文献拆分在解析时运行;较旧的库需要 force 才能获得这些功能。
- 元数据可能被误读。 当 PDF 元数据缺失时,标题和年份会从页面文本推断;Zotero 元数据会覆盖此结果。
- 跨语言检索在引擎层面较弱。 引擎从不进行翻译:针对英文全文的 CJK 查询依赖向量路径,响应中会带有说明这一点的 lang_note。智能体层通过在调用前将 CJK 问题重写为英文术语字符串来进行补偿,因此在 DSH 会话中提出的中文问题能够得到处理;引擎内查询翻译仍在路线图中。参见查询指南。
- 字幕仅为文本。 字幕可作为文本进行搜索,但仅出现在图中的内容则无法搜索。
- 规模。 关键词匹配是内存中的实现。超过几十万个块后,FAISS HNSW 或 SQLite FTS5 将是合适的下一步。
联系方式
- Bug 报告和功能请求:GitHub Issues
- 问题和讨论:GitHub Discussions
- 安全报告:参见 SECURITY.md
相关项目
- awesome-dsh-plugin — DSH 插件精选列表
- dsh-plugin-registry — DSH 设置的插件市场面板
许可证
MIT。捆绑的模型(BAAI/bge-*)在运行时下载,并仍受其各自许可证的约束。扫码进群