架构与设计 - 一切皆插件的 DeepSeek Harness
DeepSeek Harness 的架构哲学可以用一句话概括:一切皆插件。产品由一棵插件树组成,每一部分都可以从配置替换。
一切皆插件
DeepSeek Harness 基于具有时空可组合性的 Cordis 插件系统构建:
- Cordis 元框架只负责插件的加载与卸载以及依赖关系
- Agent Harness 的所有具体组件——模型、工具、技能、会话、沙箱、存储、循环、调度、UI——都是不同的 Cordis 插件
- 插件通过 Cordis 服务与事件彼此协作,并可以在配置层自由组合
开发者无需改动 DeepSeek Harness 的源码本身,就能以插件的方式独立选择、替换或扩展其中的任一能力。
不存在需要打补丁的特权内核:扩展 dsh 的方式是把插件挂载到其他插件旁边,而各项注册都是副作用,会在其插件卸载时撤销。
Profile 与组合包
运行中的 dsh 是一棵插件树,由启动时按序叠加的各层组合而成:
- profile:存放在 Harness home 中的具名组装,列出自己叠放的组合包、存放自己安装的树外插件,并保存用户自己的
cordis.patch.yml。web和headless作为模板随发行版交付 - 组合包(bundle):Cordis 配置项及其挂载代码的分发格式,因此它插入的内容始终可被其上各层 patch
各层按序应用:先按 profile 列出的顺序应用每个组合包,然后是 profile 的 cordis.patch.yml,然后是 home 级的那份,最后是任意 --patch overlay。
dsh --profile web --dump-config上面命令打印你机器实际启动的配置树——打印出的任何条目,都可以由你自己的 patch 替换。
多种运行模式
针对不同的使用场景,四种模式各自默认加载不同的插件集合:
| 模式 | 默认加载 |
|---|---|
| 标准模式 | 完整的工具组合 |
| PTC 模式 | 程序化工具调用(Programmatic Tool Calling),由模型生成的一段代码组合多轮工具调用 |
| 极简模式 | 仅一个 shell 工具 + 一个文件编辑工具,用于最小环境下的模型基准测试 |
| 创造模式 | 可检查当前运行时、在内存中试验 Cordis 插件,并据此组合和创作新模式 |
每一次运行都有迹可循
模型看到的一切,都会写入仅追加(append-only)设计的会话日志:
- 记录内容:系统提示词、思维链、工具调用与结果、子 Agent 调度,以及每一次上下文注入
- Trajectory 视图:按来源查看这些信息
- 恢复、分叉、检索与回放共享同一份事件流
模型可见即已记录:抵达模型请求的一切都必须能从日志重建,并由一项运行时不变式断言这一点。
能力 seam
一个 seam 是一项可替换能力,包含三种角色:
- 声明接口的 Service Definition
- 实现它的 Service Provider
- 使用它的 Consumer(通常是面向模型的工具)
seam 正是替换一个提供方就能改变整个产品的原因。例如,文件系统与进程提供方共享同一个执行世界,把它们指向远程沙箱,也就把 Bash、PTY 和 LSP 一并搬了过去,无需提供方专用 fork。
核心包
以下是向 Cordis 树贡献内容的部分核心包:
| 包 | 职责 |
|---|---|
core/session | 仅追加的 SessionEvent 日志和内存存储 |
core/system-prompt | 提示词片段与工具 schema 的组装 |
core/tools | 作用域化的工具注册表和带把关的执行流水线 |
core/agent / core/agent-loop | Agent 接口与实现该接口的默认驱动器 |
core/scope | 按 agent 划分作用域的注册原语 |
llm/llm | 消息与流式词汇表,以及适配器 seam |
想深入了解?
完整的架构说明见官方仓库 docs/architecture.md。