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。