前言¶
在 DeepSeek Harness(DSH)里跑智能体时,宿主往往注册了大批工具。若首轮就把每个工具的完整 JSON Schema 全部塞进上下文,即使用不到的定义也会占 token,还会拉长模型首轮阅读成本。更麻烦的是,宿主侧工具升级可能在同一会话中途悄悄改掉模型已经读过的 wire 定义,模型很难判断「我现在看到的参数表」是否还和上一回合一致。
下面介绍社区插件 dsh-tool-discovery(维护者 KouzakiUmi,npm 包名 dsh-tool-discovery,manifest 主线版本 0.5.0)。它用固定的三个控制入口和「按需披露」策略,把首轮上下文压到有界摘要与默认初始集合,其余工具的真实 schema 在模型显式选定后的下一轮才出现;同一缓存周期内已披露内容只增不改,只有成功压缩才会重置周期。
这是什么¶
dsh-tool-discovery 是 DSH 分类为「工作流」的插件:Progressive tool discovery for DSH——三入口控制协议(tool_list / tool_search / tool_load),内核与宿主解耦(host-independent domain kernel + DSH adapter)。
它不替代 DSH 自身的工具审批、沙箱与权限链;内核不持有工具、也不绕过宿主。渐进式披露解决的是上下文占用与定义稳定性,不是执行速度。
- 目录页:https://www.skillhub.cn/plugins/KouzakiUmi/dsh-tool-discovery
- 源码与文档:https://github.com/KouzakiUmi/dsh-tool-discovery
- 许可证:MIT(README badge)
核心功能¶
首轮只带必要的东西¶
首轮请求里只有三个固定入口、每类能力的简短摘要,以及默认初始集合的完整 schema:DSH 自带核心工具(手动基线)与当前 agent preset 登记的工具(默认保留)。其它普通工具首轮不披露,不占上下文。
三个入口¶
| 入口 | 回答的问题 | 改变激活集合? |
|---|---|---|
tool_list |
这个类别里有哪些可发现的工具? | 否 |
tool_search |
哪个工具适合当前任务? | 否 |
tool_load |
我要用这些工具。 | 是 |
tool_search 提供 Top-K 候选卡(短用途 + ref/revision);tool_list 提供分页的完整名称。两者都不改变激活集合。
tool_load 不会执行目标工具,只记录选择;真实 schema 的披露发生在下一轮,模型读到的定义与选择一致。未按需加载的普通工具会被拒绝;action: "unload" 会被拒绝,因此两次成功压缩之间已披露集合只增不减。
可通过 tool_load 回执与 view: "state" 投影查看 selected / advertised / invalidated,回答「现在到底激活了哪些工具」。
已披露的不被悄悄改写¶
健康 native 缓存周期内,已披露内容与顺序只增不改:首次披露时记录的 wire 会持续原样发送,宿主侧工具升级不会在会话中途静默改写模型已读定义。只有成功压缩(手动 /compact 或 DSH 自动压缩,且成功有摘要)才会重置周期。
冻结承诺目前限于 native 路径。同名新 schema 与已冻结定义冲突时,tool_load 返回 COMPACTION_REQUIRED,须等用户或 DSH 成功压缩后再加载。可选 PTC 兼容(ptcCompatibility)不保证 native 式逐字冻结;默认 PTC 旁路。
设置与配置面¶
安装并启用 bundle 后,在 设置 → 工具发现 可开关功能、管理全局工具目录(按名称筛选、勾选、恢复 DSH 默认),以及高级预算 / 语言字段。配置依赖 peer @deepseek-ai/schemastery;缺少时内核仍可运行,但无 Config 界面,插件记录 ConfigUnavailable。
插件无必需配置;常用扁平根字段示例(节选,完整见仓库 README「配置」节):
{
"initialToolsEnabled": true,
"alwaysAllowPresetTools": true,
"ptcCompatibility": false,
"locale": "auto"
}
若只希望三个发现入口、尽量少带初始工具,可设 alwaysAllowPresetTools: false 且 initialToolsEnabled: false,或配合 alwaysVisible 与 respectAlwaysVisible(详见 README)。三个入口本身不可删除。
安装与启用¶
环境要求¶
- DSH Core
>=0.2.1-alpha.1(dshReleases中0.2.1-alpha.1与0.2.1-alpha.2标为 compatible,其它版本未测试)。 - Node
^22.19.0 || >=24.0.0。 - 每会话单个活动 agent;单会话内多 agent 并发不受支持。
DSH profile 安装(示例)¶
文档给出的是公共 CLI 的 Web profile 示例;web 需换成你实际目标 profile。安装时使用 GitHub Release 构建资产,<build-tag> 为提交级标签,例如 build-80216ba3effa:
dsh plugin --profile web add \
"dsh-tool-discovery@https://github.com/KouzakiUmi/dsh-tool-discovery/releases/download/<build-tag>/dsh-tool-discovery.tgz"
更新已安装副本:
dsh plugin --profile web update \
"dsh-tool-discovery@https://github.com/KouzakiUmi/dsh-tool-discovery/releases/download/<build-tag>/dsh-tool-discovery.tgz"
Node 项目也可 npm install dsh-tool-discovery(包自 0.2.1 起发布到 npm,当前资料中 npm 版本 badge 与 manifest 0.5.0 以 Release / 清单为准)。
经过上面的步骤:
- 安装并启用 bundle,按部署方式重载或重启(仅刷新页面不保证 Host 升级)。
- 在设置页按需调整工具目录与配置。
- 回到会话,三个入口即生效;每次工具调用仍走 DSH 原有审批与权限链。
桌面用户应使用目标安装提供的 CLI 与 profile,勿照搬文档中的内部 bootstrap 路径;详见 DeepSeek Harness 官方 CLI 插件管理与 Desktop 文档。
典型用法(会话内)¶
模型侧工作流可概括为:
- 用
tool_search按任务意图检索 Top-K 候选,或tool_list分页浏览某类别下的工具名。 - 选定后调用
tool_load登记要用的工具(不立刻执行)。 - 下一轮 请求中才会出现对应工具的完整 native schema,再按 DSH 常规范式发起工具调用。
需要确认当前披露状态时,使用 tool_load 的 state 投影查看 selected / advertised / invalidated。
适用场景与注意¶
适合谁: 工具注册表很大、希望首轮上下文可控、又需要模型在会话内按需「开工具」的 DSH 单用户单 profile 场景。
权限与边界(安装前宜读 README「权限与外部依赖」):
- 插件不发起出站网络、不执行子进程、不读凭据;持久状态经
@deepseek-ai/dsh-storage-domain落盘(每会话工具名名单等)。 - 面向单用户、单 profile 构建与验证,不承诺多租户或共享部署中的隔离边界;会话历史与存储是受信任输入。
- 插件以当前 DSH 进程权限运行;安装前应查看源码与 MIT 许可证,并钉住你验证过的 Release
build-<sha>标签。
兼容说明: native 为完整披露路径;PTC 默认旁路。开启 ptcCompatibility 时行为与 native 冻结承诺不同,生产环境请按 README「当前实现契约」自行验证。
结尾¶
dsh-tool-discovery 把「全量 schema 首轮灌入」改成「三入口 + 按需披露 + 周期内冻结 wire」,让大工具集下的 DSH 会话更省上下文、定义更可预期。进一步了解设计与契约见仓库 plugin/docs/。