DeepSeek Harness 插件机制与 Cordis 入门
2026-08-16 13:28:14阅读 3
"一切皆插件"是 DSH 的口号,而真正实现它的引擎叫 Cordis——一个组合(composition)框架。这一篇不写代码,先建立心智模型:DSH 的能力是怎么被"组合"出来的,两个"平面"各管什么,以及你要扩展时该往哪一层动手。
组合而非堆砌:能力都是"行"
DSH 里每个能力都是配置中的一行(row)。不存在"另一种配置语言"——改 agent 的能力 = 改组成它的行。比如:
- id: tool-web
name: '@deepseek-ai/dsh-tool-web'这一行挂上,agent 就有了网络搜索工具。想多一个能力?加一行。想去掉?禁一行。能力与配置一一对应,这是 DSH 和"大而全的单一程序"最本质的区别。
两个平面:宿主组合 vs Agent Preset
动手之前必须先分清两件事——这是新手最容易搞混的地方:
| 宿主组合(Host composition) | Agent Preset | |
|---|---|---|
| 实例数 | 每个进程一份 | 每个会话一份,随会话销毁 |
| 放什么 | 注册表本身(tools/sessions 等)、跨会话服务(持久化/存储/遥测)、沙箱、模型路由 | 单会话的工具插件、persona、提示词段、压缩策略 |
| 谁来管 | 进程级配置 | 预设目录里的agent.cordis.yml |
判断口诀:“只有会话内才需要的东西”进 Preset,“跨会话共享的底座”留在宿主组合。 比如子代理注册表要回答跨会话查询,就必须放宿主层——放 Preset 会饿死宿主层,第二个会话还会撞名。
Cordis 是什么角色
Cordis 是 DSH 的插件底座,负责三件事:
- 组合:把各行插件按声明拼成一棵配置树(叠加规则见 配置层与 patch)
- 服务:插件之间通过注入(inject)拿服务、通过提供(provide)给服务
- 生命周期:插件的加载、卸载、作用域
你写插件时接触的核心就是两样:inject(我要什么服务)和 apply(ctx)(我干什么)。上下文对象 ctx 是插件的入口——注册工具、提供服务的 API 都挂在它上面。
你的扩展落点在哪一层
| 想做的事 | 落点 | 教程 |
|---|---|---|
| 写操作手册给 agent | 写一个 Skill(无代码) | 编写 Skill |
| 新增一个工具/服务 | 写插件(有代码) | 插件开发 |
| 组合一套工具+人设 | 建 Preset | 创建 Agent Preset |
| 分享给社区 | 发布插件 | 发布插件 |
常见疑问
| 问题 | 解答 |
|---|---|
| 加了一行没生效? | 用 dump 命令查配置树,确认行被加载(见配置层与 patch) |
| 服务“等不到提供方”? | 某行 inject 了无人提供的服务——检查依赖行是否挂上 |
| 能改官方内置预设吗? | 不能。复制出来改副本(见创建 Agent Preset) |
接下来读什么
- 零代码扩展 → 编写 Skill:自定义技能教程
- 带代码扩展 → 插件开发:从零编写第一个插件
- 官方组合文件长什么样 → Profile 是什么?核心组织单元一篇看懂
← 上一篇:4.5 沙箱与安全:三种权限模式 | 下一篇:5.2 编写 Skill:自定义技能教程 →
↑ 返回 教程总目录



.jpg)