📄 一句话概括
实测配置里 4 个 provider 用的是同一个包名 @deepseek-ai/dsh-tool-subagent——spawn/fork/codex/claude-code;换实现连包都不用换。
📝 本节和前面几节的关系
PTC 讲完,第二个大件是 Subagent。先看它最漂亮的一点:一种能力,四份实现。
一、实测四行配置
spawn→ 工具名subagent,continuable,启用。fork→ 工具名subagent_fork,continuable,启用。codex→ 工具名subagent_codex,one-shot,停用。claude-code→ 工具名subagent_claude_code,one-shot,停用。
四条 name 一模一样——差别全在 config 里。
二、7.3.1 那句话的另一种形态
7.3.1 说【能力是一个 id,实现是一个包】;这里更进一步:连包都共用,实现落在字段上。
也就是说,可替换性有两种露法:换包,或者换同一个包里的配置。
三、两处细节很有意思
tool-subagent-fork在顶层是one-shot,在标准预设内部是continuable——同一份实现被不同的组合配成不同行为。- 还有一件
tool-ralph(subagentProvider: spawn,maxRounds: 64)——循环式委派:一句话派一个反复迭代的子任务。
四、动手验证
实验 B 已经把 provider 从 spawn 换到 fork:实质改 1 行、0 警告。
接口名 subagent 一个字没动——用它的模型与调用方都不必知道换了实现。
五、动手 Demo:同一种 Subagent 能力,四份实现
一个包名,四份 config:
impls = [("spawn", "subagent", "continuable", True),
("fork", "subagent_fork", "continuable", True),
("codex", "subagent_codex", "one-shot", False),
("claude-code", "subagent_claude_code", "one-shot", False)]
for p, t, b, on in impls:
print(" %-12s %-20s %-12s %s" % (p, t, b, "启用" if on else "停用"))
实跑输出:
--------------------------------------------------------------------
同一种 Subagent 能力,四份实现
--------------------------------------------------------------------
实测:配置里 4 个 provider 用的是**同一个包名**——
`@deepseek-ai/dsh-tool-subagent`,差别全在 config 里:
provider 工具名 后台模式 默认状态
------------------------------------------------------------------
spawn subagent continuable 启用
fork subagent_fork continuable 启用
codex subagent_codex one-shot 停用
claude-code subagent_claude_code one-shot 停用
------------------------------------------------------------------
同一个包、四份配置——**能力不变,实现可换**。
这比【四个包】更能说明问题:换实现连包都不用换。
同一个包、四份配置——能力不变,实现可换。 这比【四个包】更能说明问题:换实现连包都不用换。 同一份 fork 实现被两处配成不同行为——预设就是组合清单。
30 秒实验
- 在配置树里找出这四条,核对包名是不是同一个。
- 对比 fork 在顶层与预设内部的 backgroundMode 差异。
- 想想 one-shot 与 continuable 各适合什么活。
常见误区
- 错误:四种 provider 是四个插件。——纠正:同一个包——差别全在 config 里。
- 错误:换实现要装新插件。——纠正:改一个字段就行——实验 B 实测实质只改 1 行。
- 错误:同一份实现的配置到处一样。——纠正:同一份 fork 有 continuable 与 one-shot 两种配法——组合不同,行为不同。
自测三问(点开对答案)
1. 四个 subagent provider 用几个包? —— **一个**:`@deepseek-ai/dsh-tool-subagent`——差别在 config。 2. fork 在顶层与预设内部有什么不同? —— 顶层是 `one-shot`,标准预设内部是 `continuable`——**组合决定行为**。 3. 换实现实测改了几行? —— **实质 1 行**(provider 由 spawn 改 fork),接口名不动。- ☐ 下一节(7.4.2 委派子任务的 3 个问题)
相关笔记
- 代码执行能力与具体实现分离 —— 同一个道理的两种露法
- DSH 的 4 套 Preset 不是 4 个独立 Agent —— 组合清单的思想
- 本章小结 —— 上一轮的收口
- 🐳 DeepSeek Harness · 索引