快速回答
DeepSeek Harness(dsh)的架构主张只有一句话:一切皆插件。文件系统、shell、模型适配器、Web UI、子代理——都不是内置写死的,而是可插拔的插件,统一由一个叫 Cordis 的运行时驱动。
这套设计不是装饰,它直接决定了 dsh 的三个能力:能力面可裁剪、provider 可替换、工具可自定义。下面拆开讲。
Cordis 是什么
Cordis 是驱动 dsh 的插件运行时(其设计见论文 A Programming Paradigm for Spatiotemporal Composability)。它的核心思想可以概括为两点:
- 注册即效果,且可逆:提示词片段、工具 schema、适配器、provider、监听器都通过
ctx.effect()或ctx.on()安装,reload 和 teardown 时能有序回滚。 - 时空可组合:不同插件在同一上下文里按声明顺序组合,能力能叠加、也能撤销。
对使用者来说,你不需要读懂 Cordis 源码,只需要记住:dsh 的能力 = 你加载的插件的组合。想加能力就挂插件,想减能力就卸插件。
Seam:可替换能力的「三件套」
dsh 架构文档里反复出现一个词——seam(可替换能力)。它是 dsh 里「换一个 provider 就能换掉整个产品」的机制基础。
一个 seam 包含三个角色:
| 角色 | 职责 | 例子(shell) |
|---|---|---|
| Service Definition | 声明接口 | dsh-shell |
| Service Provider | 提供实现 | dsh-bash-local(本地)/ dsh-bash-sandbox(沙箱) |
| Consumer | 使用该能力的模型工具 | dsh-tool-bash |
同样的结构贯穿整个框架:模型 provider(ctx.llm 上注册适配器)、文件系统(ctx.fs)、Web 运行时(ctx.web)、子代理(ctx.subagents)。
为什么这重要? 因为三个角色解耦后,换实现只动 Provider,接口和 Consumer 都不变。把 shell 从本地换到远程沙箱,bash 工具的模型可见 schema 不变——对 agent 来说是无感的。
三个实际好处
1. 可裁剪能力面。 不是每个 agent 都需要网络。你可以只挂 bash + 文件读写,不给 web_search,得到一个更可控、更便宜的 agent。
2. 可换 provider。 模型后端就是一个 seam。把 DEEPSEEK_BASE_URL 从官方 API 指到 TeamoRouter,一行环境变量,别的插件原封不动:
export DEEPSEEK_BASE_URL="https://api.teamorouter.com/v1"
export DEEPSEEK_API_KEY="sk-teamo-你的Key"
3. 可自定义工具。 想给 agent 加一个「查内部工单系统」的工具?写一个 Cordis 插件,注册到 ctx.tools,agent 就多了一个工具。这比「等官方支持」快得多。
一个最小的心智模型
把 dsh 想成一个插槽板:
[ bash 插件 ] [ 文件插件 ] [ 子代理插件 ] [ Web 搜索插件 ] [ 模型适配器插件 ] ...
└──────────── 全部挂到 Cordis 运行时 ────────────┘
│
agent 的实际能力
你决定插哪些、不插哪些。这套心智模型能解释 dsh 绝大多数设计决策——为什么「默认预设」包含 bash + 文件读写,为什么「无头模式」只需环境变量。
常见疑问
Q:Cordis 和 dsh 是什么关系? Cordis 是底层的插件运行时(独立项目,MIT),dsh 是构建在它之上的 agent 框架。dsh 的「一切皆插件」正是 Cordis 的「注册即效果、可逆、可组合」落到 agent 场景的结果。
Q:我需要会写 Cordis 插件才能用 dsh 吗? 不需要。日常使用只需装好、配好环境变量即可。写插件是「想扩展 dsh」时才需要的进阶能力。
Q:「默认预设」(agent preset)是什么? 预设是「一组插件的打包」。dsh 的标准预设通常包含 bash、文件读写、glob/grep 等工具;自定义预设可以裁剪或扩充。这也是「能力面可裁剪」的落地形式。
Q:换 provider 真的完全无感吗? 对 agent 的能力面是的——工具 schema 不变。但不同 provider 的模型能力、价格、限流不同,这是模型层的差异,不是框架层的差异。
Q:这个架构对我有什么直接价值? 两点:一是省钱——把便宜模型(DeepSeek V4)接到 dsh,同样的 agent 循环成本低一个数量级;二是可控——你能精确决定 agent 能碰什么、不能碰什么。
想体验这套架构,到 TeamoRouter 拿 key,把模型 adapter 指过去,dsh 的其余插件一行不用改。