dsh-skill-indexer:本地 SKILL.md 的两级意图检索插件

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。
羽毛球分组比赛记分
小程序二维码

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

小夜