dsh-local-kb:本机全盘文档的 SQLite 全文索引与省 token 检索

前言

在 DSH 里做 Agent 开发时,模型上下文往往装不下整盘资料:把大量 PDF、Office 文档整篇塞进会话既费 token,也不利于按关键词定位。常见做法是手工整理少数 Markdown,或靠外部云盘搜索,但本机 C: / E: 里散落的历史文件很难被 Agent 稳定引用。

下面介绍的 dsh-local-kb(维护者 hql6662)把指定磁盘下的文档抽成纯文本,写入本机 SQLite FTS5 trigram 索引;通过 DSH 侧栏搜索面板人机检索,并向 Agent 暴露名为 kb 的工具,默认只返回短片段与元信息,按需才读单篇正文。插件在 SkillHub 目录分类为「记忆」,当前 GitHub 星标为 0,版本 0.2.0(MIT)。

这是什么

dsh-local-kb 是 DeepSeek Harness 的本地知识库插件:扫描本机盘符(README 示例为 C: / E:),支持 PDF、Markdown、TXT、Word、PPT、Excel、EPUB、MOBI、CHM、RTF、HTML、JSON、CSV 等格式的正文抽取,在 kb.sqlite 中建全文索引;索引列包含 文件名、正文、完整路径,因此即使用户不记得文件名或正文措辞,仍可按目录名、路径片段(如 Desktop、实验三)检索,或用浏览模式按修改时间翻最近文件。

设计原则写得很直白:省 token——检索在脚本与 SQLite 中完成,搜索结果只给 snippet;Agent 只有显式 action=get 时才读单篇,默认截断 8000 字(上限可配到 40000),不会把整库灌进上下文。

核心功能

索引与存储

项 路径(README 示例环境)
SQLite 索引 C:\Users\hql\.dsh\local-kb\kb.sqlite
配置 C:\Users\hql\.dsh\local-kb\config.json
构建报告 C:\Users\hql\.dsh\local-kb\build_report.json
AI 标注(独立库) C:\Users\hql\.dsh\local-kb\labels.sqlite
构建脚本 tools/build_kb.py
查询 CLI tools/kb_query.py

重建索引可在面板「设置」中调整扫描磁盘、单篇最大字数、Python 解释器后点「重建索引」;后台重扫约 1–5 分钟,期间旧索引仍可用。README 记载示例库约 23,047 篇文档(含电子书与旧 Office 正文),并带规则预打的 useful / topic 标签。

侧栏面板

面板顶部展示文档数、已索引字数、索引大小、构建时间与就绪状态。搜索支持文件名、正文、路径;中文三字以上走 FTS5 trigram,短词退化为文件名加开头匹配。「浏览」在无关键词时按修改时间倒序列出全库,可叠加类型、磁盘、路径包含、时间范围(7 / 30 / 365 天)、排序等筛选。结果卡片可打开预览抽屉(默认 8000 字片段),并支持打开文件、资源管理器中显示、复制路径。

每篇文档有两类内容识别标签:useful(high / possible / low)与 topic(study / work / code / life / reference / other)。规则基线在 build_kb.py 的 classify_labels() 中零模型成本写入;拿不准的可通过面板「AI 批量识别」唤起 DSH Agent,用 kb 工具按路径与开头片段批量复核,标注存在独立的 labels.sqlite(主键为路径,重建索引不丢 AI 标注)。

Agent 工具 kb

常用 action 如下(完整表见仓库 README):

action 用途
search(默认) 全文检索,参数含 q、limit、ext、path、days、useful、topic 等
browse 无关键词按时间浏览,可叠加筛选
stats 索引健康与分组统计
get 按 id 读单篇正文,max 默认 8000
candidates / label / label-status AI 批量识别与写回标注
rebuild / rebuild-status 后台重建与进度

示例(来自 README):

kb {action:"search", q:"HarnessMM", ext:"pdf"}
kb {action:"get", id:21222, max:8000}
kb {action:"browse", path:"Desktop", days:30, ext:"doc", sort:"mtime", limit:20}
kb {action:"search", q:"实验三"}

最后一条说明路径列也会被索引:正文未出现「实验三」时,目录名仍可命中。

本地 HTTP API

插件在本机提供前缀 /local-kb/api 的接口(由 DSH WebServer 路由),包含 health、stats、search、browse、doc、candidates、labels、config、rebuild 等;README 写明仅监听本机、无需鉴权。

命令行等价

不经过 GUI 时可直接调用 tools/kb_query.py,例如:

PYTHONUTF8=1 python tools/kb_query.py stats
PYTHONUTF8=1 python tools/kb_query.py search --q "知识库" --limit 20
PYTHONUTF8=1 python tools/kb_query.py browse --path Desktop --days 30 --ext doc --sort mtime --limit 20
PYTHONUTF8=1 python tools/kb_query.py get --id 21222 --max 8000

重建索引需系统 Python 带 fitz(PyMuPDF);电子书与旧 Office 部分抽取器已 vendor 在 tools/vendor/,README 称无需额外 pip。示例完整命令:

PYTHONUTF8=1 C:/Python314/python.exe tools/build_kb.py --roots "C:/,E:/" \
  --db "C:/Users/hql/.dsh/local-kb/kb.sqlite"

安装与启用

README 给出的安装方式不是 dsh plugin add github:...,而是对本地插件目录执行 bundle 安装。示例插件目录为 E:\dsh files\local-kb:

plugin_manager  action=install_bundle  target=E:\\dsh files\local-kb

安装后侧栏未出现时,可先硬刷新 GUI(Ctrl+Shift+R);部分客户端模块需 DSH 完全重启后才生效。package.json 要求 Node >= 22.0.0。

典型用法

只记得「大概在哪个文件夹」:在搜索框或 path 过滤里输入路径片段,或用 browse 加 days、ext 缩小范围;CLI 等价如 kb_query.py browse --days 7 --ext docx。

让 Agent 查资料但控制 token:先 search 或 browse 拿 id 与 snippet,确认后再 get;批量内容识别用 candidates + label,增量模式在首次全量 full 跑完后只处理无 AI 标注的新增文件。

按价值与主题筛库:规则或 AI 合并后的 useful / topic 可叠加到 search、browse,例如 search --q 论文 --useful high --topic study。

适用场景与注意

适合已在 Windows 上把学习与工作文档分散在多盘符、又希望在 DSH 内统一检索、并让 Agent 以片段优先方式引用本机资料的用户。当前 README 与路径示例均围绕 Windows(C:\Users\...、盘符扫描);Linux 用户需自行对照配置与脚本是否匹配本机布局。

插件以 当前 DSH 进程权限 扫描与读取文件,安装前应阅读 仓库源码 与 MIT 许可证,确认扫描范围(默认可覆盖整盘)符合个人或组织安全策略。本地 HTTP API 无鉴权,仅应在本机可信环境使用。

SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系;插件列表里的「记忆」分类描述的是能力取向,不等同于官方产品能力。

结尾

dsh-local-kb 把「本机文档在哪、写了什么」拆成 SQLite 侧索引 + 侧栏面板 + kb Agent 工具三层:人机都能搜,Agent 默认只吃片段。若要查看简介与分类,可打开目录页 SkillHub · dsh-local-kb;安装细节、API 字段与格式抽取表以 GitHub 仓库 README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye