前言¶
DeepSeek Harness (DSH) 的核心设计理念之一是“一切皆插件”。在智能体开发中,将特定的命令或脚本能力注入到模型的能力列表中是常见需求。传统的做法通常涉及编写文件或依赖其他注册机制。fufu1437/dsh-model-commands 插件引入了一种新的定义方式:它允许开发者直接在 DSH 的设置页面中声明 shell 命令,并将这些声明发布到 Harness 的技能注册表中,使其在模型端表现为一个标准的技能(skill)。
插件介绍¶
该插件是 DeepSeek Harness (DSH) 的工作流插件,由用户 fufu1437 维护。它不提供工具执行能力,而是专注于将命令定义转化为模型可读取的文本内容。插件遵循 MIT 许可证。
核心功能¶
- 设置页面声明:在
Settings → Model commands页面中,通过表格界面管理技能条目。 - 技能注册:在页面中编写的每一个条目都会被发布到 Harness 的技能注册表。
- 行为一致性:发布后的条目在模型端的表现与已安装的技能完全一致。模型在技能目录中只能看到一行(
name+description),而技能的具体内容(Body)仅在模型请求加载时才被读取。 - 非执行性:该插件不执行任何工具调用。技能本质上是 Markdown 文本,模型读取文本,而非运行命令。
安装与配置¶
使用 dsh 命令行工具安装该插件。该插件依赖 DSH 0.2.1-rc.2 或更高版本。
安装¶
在终端中执行以下命令:
dsh plugin --profile web add @fufu1437/dsh-model-commands
安装后,通常需要在 Settings → Plugins 中选择对应的 bundle,或者在 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 字段中添加包名,然后刷新 Web 页面。
配置¶
在 Harness 的配置中,可以通过 YAML 格式指定存储路径和最大技能数量。
- id: fufu-model-commands
name: '@fufu1437/dsh-model-commands'
config:
storePath: /home/me/.dsh/model-commands/skills.json
maxSkills: 200
storePath:默认为<DSH_HOME>/model-commands/skills.json,这是技能表格的单一事实来源。maxSkills:限制注册表中的条目数量上限,默认为 200。
使用方法¶
在设置页面的编辑器中,填入以下字段即可定义一个技能:
- Name:使用 kebab-case 命名(例如
disk-usage),这是模型加载技能时使用的键。 - Description:必填项。这是模型在决策时唯一看到的文本,决定了模型何时调用该技能。
- Body:Markdown 格式的文本,即模型加载后接收到的内容。常见用法是将命令行工具的
--help输出粘贴至此。 - When to use:可选的额外触发文本,也会出现在目录中。
- Model can invoke:默认开启,决定该条目是否出现在模型的技能目录中。
- You can too:默认关闭,决定是否同时在人类命令界面展示该条目。
- Enabled:关闭后条目仍保留,但不会出现在目录中。
保存操作是原子的,会立即重新发布技能目录并使其对模型生效,无需重启 Harness。
行为与限制¶
- 无执行环境:该插件没有任何工具执行逻辑,没有 shell、沙盒或代码求值功能。所有内容仅作为文本存储和读取。
- 单一事实来源:技能表格是唯一的数据源,注册表只是衍生数据。
- 写入安全:写入操作是原子的(使用临时文件 + 重命名),且仅使用 Node.js 内置模块(
node:builtins)。 - 认证与路由:相关的路由接口会先进行身份验证检查,未认证请求将返回 401 或 403。
- 命名冲突:如果名称已被其他提供者注册,系统仅发出警告而非错误,注册表会根据层级和优先级决定最终覆盖哪一个。
迁移说明¶
在 DSH 0.2.0 及更早版本中,该插件可能使用 commands.json 并注册模型可用的工具。在当前版本中,所有条目均为技能,存储在 skills.json 中。旧版本的 commands.json 文件将保持不变且不再被读取。如果需要恢复旧配置,需手动将旧文件中的内容粘贴到新的设置编辑器中。
结语¶
fufu1437/dsh-model-commands 插件简化了技能定义的流程,将配置集中在 DSH 的设置界面,同时保证了模型调用的安全性和一致性。它不提供执行能力,而是专注于将命令定义转化为可读的技能文本。