前言¶
DeepSeek Harness (dsh) 在初始化新会话时,通常会在第一回合就将完整的工具集(包括文件编辑、bash 执行、子代理等)发送给模型。这种全量 schema 的方式容易导致模型在探索阶段过早地执行操作,而非专注于分析。dsh-minimal-anchor 是一个针对这一问题的插件,它通过挂钩 DSH 的提示词组装流程,仅在第一回合对工具列表进行裁剪,并注入结构化前言,让模型在探索阶段保持专注。
插件定位¶
dsh-minimal-anchor 是一个 DeepSeek Harness 插件,由开发者 rand0wn 维护。其核心作用是保护第一回合免受工具模式过载的影响。它采用 MIT 许可证开源。
核心功能¶
- 第一回合工具裁剪:仅在会话的第一回合,将工具列表限制在白名单内。
- 结构化前言注入:在第一回合的提示词中添加简短的探索导向前言。
- 后续回合无感:从第二回合开始,插件完全让路,恢复完整的工具集和正常的提示词组装流程。
安装与启用¶
安装插件需要将包添加到指定 profile 的依赖中,并显式声明在 bundles 列表中才能生效。
- 安装插件:
dsh plugin --profile <name> add dsh-minimal-anchor
- 声明激活:
插件安装为依赖后,必须将其添加到 profile 的package.json的dsh.profile.bundles字段中:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-headless",
"dsh-minimal-anchor"
]
}
}
}
- 验证安装:
使用dsh --profile <name> --dump-config检查输出中是否包含minimal-anchor条目。
典型用法¶
这是一个被动插件,无需额外的调用命令。
- 正常启动:直接使用
dsh web、dsh --profile headless "..."等常规命令启动。 - 自动生效:每个新会话的第一回合会自动带上裁剪后的工具列表和前言;后续回合保持原样。
配置¶
配置文件位于 profiles/<name>/cordis.patch.yml。以下是默认配置示例:
- insert:
- id: minimal-anchor
name: 'dsh-minimal-anchor'
config:
whitelistedTools: [read, glob, grep]
enforcePreamble: true
customPreamble: 'Your own turn-1 framing text.'
| 字段 | 默认值 | 说明 |
|---|---|---|
whitelistedTools |
[read, glob, grep] |
第一回合保留的工具名称。必须与 harness 中注册的名称完全一致。 |
enforcePreamble |
true |
是否强制注入结构化前言。 |
customPreamble |
(内置探索导向文本) | 自定义前言内容。仅在 enforcePreamble 为 true 时生效。 |
工作原理¶
该插件通过挂钩 @deepseek-ai/dsh-system-prompt 包中的 system-prompt/assemble 流水线来实现。
* 首次组装:使用 WeakSet 记录作用域,第一次组装时,将工具列表过滤为白名单,并在前面插入前言,然后调用 next() 继续执行后续监听器。
* 后续组装:同一个作用域的后续组装直接调用 next(),不做任何修改,确保工具集恢复原状。
注意事项与故障排查¶
- 工具名称匹配:如果第一回合工具列表为空,通常是因为
whitelistedTools中的名称与实际注册的工具名称不符。请使用dsh --profile <name> --dump-config查看实际工具名。 - Bundle 必须声明:仅通过
dsh plugin add安装依赖是不够的,必须将其加入dsh.profile.bundles才能激活dsh.bundle补丁。 - Config 类型限制:导出的
Config必须是schemastery的 schema(即z.object({...})),不能是普通对象。否则在 fork 场景下会报错Cannot read properties of undefined (reading 'validate')。 - 生态说明:DSH 采用插件化架构,本插件为社区开发,与 DeepSeek 官方无直接从属关系。
总结¶
dsh-minimal-anchor 适合希望在会话初期引导模型进行探索而非立即执行操作的 DSH 使用者。它通过极轻量的介入,解决了第一回合模式过载的问题。
- 目录页:dsh-minimal-anchor
- GitHub 仓库:rand0wn/dsh-minimal-anchor