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 爲準。

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

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

小夜