DSH 的插件化架構允許開發者通過 Host Bundle 擴展能力。當本地積累了多個 SKILL.md 文件時,Agent 面對自然語言指令往往難以精準定位。dsh-skill-indexer 解決這個問題,它是一個 DSH host bundle 插件,通過建立兩級索引,讓 Agent 用一句話意圖從本機所有 SKILL.md 裏召回對的技能。
核心功能¶
該插件通過以下機制實現本地技能的檢索與路由:
- 兩級召回索引:掃描
~/.workbuddy/skills與$DSH_HOME/skills,解析 SKILL.md 的 frontmatter(YAML 子集),抽取關鍵詞並歸納大類,生成skills-index.json。 - 一句話意圖路由:L1 大類打分(關鍵詞覆蓋 × IDF),L2 類內技能排序(詞表包含 keywords/triggers/name,trigger 命中權重更高)。
- 三態回退:命中(
hit)、低置信(low,回退全庫 top-k)、未命中(miss)三種狀態,默認閾值θ1=0.35、θ2=0.12。 - 技術特性:純本地運行,零第三方運行時依賴,只讀源目錄,支持哈希增量更新。
安裝¶
通過官方命令安裝:
dsh plugin --profile web add github:NattoCB/dsh-skill-indexer
安裝後,DSH host 啓動時會自動建立索引。
典型用法¶
命令行交互¶
在 DSH host 中,可以通過命令行控制索引與查詢:
# 重建索引
/skill-index scan
# 意圖召回
/skill-index query 把這週的ETF拉出來畫個圖
# 查看分類
/skill-index categories
# 查看狀態
/skill-index status
代碼工具調用¶
Agent 側可以直接調用模型工具:
skill_index(query="把這個PDF轉成markdown")
工具返回包含 state(hit/low/miss)、intent、categories、hits 和 text 的結果,其中 text 可直接作爲上下文注入。
配置說明¶
通過 cordis.patch.yml 的 config 段配置,關鍵項如下:
| Key | Default | Meaning |
|---|---|---|
roots |
[](缺省掃描兩個路徑) |
掃描根目錄,默認爲 ~/.workbuddy/skills 和 $DSH_HOME/skills。 |
theta1 |
0.35 |
命中閾值,max_c ≥ θ1 判定爲 hit。 |
theta2 |
0.12 |
未命中閾值,max_c < θ2 判定爲 miss。 |
dataDir |
$DSH_HOME/skill-indexer |
存儲索引文件 skills-index.json 和日誌 usage.log 的目錄。 |
categoriesYaml |
'' |
人工大類覆蓋文件路徑,優先級高於內置詞表。 |
適用場景與注意¶
- 中文分詞特性:中文關鍵詞按「連續中文串」抽取,長串會粘住短詞(如「當面對高槓杆」會粘住「高槓杆」),短查詢召回可能偏弱。
- 詞表覆蓋:內置大類詞表(10 類)是 MVP 覆蓋。跨機部署或特定語料場景下,建議在目標語料上做
θ1/θ2網格標定並增補詞表。 - 運行環境:插件以 DSH 進程權限運行,不改動技能源目錄,索引文件僅寫入
dataDir。無常駐進程、無 HTTP 服務、無 UI、無 embedding/GraphRAG。