
摘要:DeepSeek Harness(dsh)是 DeepSeek AI 开源的 Agent 运行时框架,其核心理念是"Everything is a Plugin"。本文不讨论模型能力,只从架构层面拆解它在 v0.1.0-rc.8 版本中的设计:以 Cordis 微内核为基础的插件体系,以及 Context / Service / inject 三者构成的依赖调度机制,最后落到 rc.8 在子代理、存储、终端三个方向上的实际改动。
很多人第一次看到 Harness 会把它和模型本体混淆。实际上,它的职责在模型之外:把模型调用、工具注册、会话记录、沙箱、终端交互、存储这些环节组织起来,交给一个统一的运行时去调度。
官方对它的定义很直接——"an open-source agent harness",并且强调当前处于 developer preview 阶段,会有破坏兼容性的改动。rc.8 的 SQLite 存储格式不向下兼容,就是这句话的落地。
理解这层定位,是理解后续架构的前提:Harness 解决的不是"智能从哪来",而是"智能如何被编排"。
Harness 的插件体系建立在 Cordis 之上。Cordis 的设计思想在论文《A Programming Paradigm for Spatiotemporal Composability》里有形式化描述,落到工程上可以概括为三个约束:
约束 | 含义 | 工程体现 |
|---|---|---|
可逆副作用 | 插件卸载时,注册的监听器、服务、命令全部自动回滚 | 热卸载后无状态残留 |
无特权核心 | 没有需要"打补丁"的核心代码,核心组件也是普通插件 | agentLoop 主循环同样是插件 |
分层组合 | 运行时是启动时叠加多层配置形成的插件树 | Profile → patch → --patch 逐层覆盖 |
其中"可逆副作用"是最关键的一点。传统插件框架卸载插件时,往往需要开发者手动清理自己注册的 listener 或 timer,漏一个就是内存泄漏或幽灵回调。Cordis 把这类注册动作统一包装成可撤销的操作,卸载时由框架自动回滚。
这带来的直接收益是:热替换是安全的。换掉一个模型适配器、替换一个工具,不需要重启整个进程。
理解了 Cordis 的约束,再看 Harness 内部是怎么组织代码的。它有三个反复出现的概念:
Context(上下文):所有插件共享的同一个实例,承担服务注册、事件发布/订阅、副作用绑定的职责。可以理解成一条共享的服务总线。
Service(服务):插件向外暴露能力的出口。插件继承 Service 类,把具名服务挂到 ctx 上(例如 ctx.tools),其他插件按 key 消费。调用方不关心实现方是谁,只关心有没有这个 key。
inject(注入):插件声明自己依赖哪些服务,例如 inject: ['tools'],表示"等 ctx.tools 就绪后我才启动"。
三者组合起来,形成一张依赖图。Cordis 根据这张图自动调度加载和卸载顺序;当某个服务被热替换时,依赖它的插件会自动重载。这就是为什么换一个 LLM 提供商不用重启——它本质上是 provider 级别的热切换。
有了运行时的抽象,还需要分发和配置的载体。Harness 用三个概念来组织:
dsh-base 提供模型、工具、沙箱、凭证等基础设施,dsh-web-app 提供浏览器 UI。cordis.patch.yml 个性化配置。web 和 headless 是官方内置模板。Sandbox 接口,就能接入系统。Seam 是这套架构里最值得注意的设计。它把"能力"和"实现"彻底分开,让第三方插件可以以零侵入的方式替换系统能力,而不需要修改 Harness 源码。
理论落到版本上,rc.8 有三处改动最能体现这套架构的意图:
1. 子代理解耦成 Profile Bundle
Claude Code 和 Codex 不再内置于主二进制,而是重构为可独立安装的 Profile Bundle,作为插件式子代理被动态加载。Codex 进一步支持非交互权限模式和多个命名实例。
从架构上看,这是"无特权核心"的延伸:连"子代理"这种看起来像是核心能力的东西,也被降级成了可插拔组件。
2. 存储后端的模块化替换
SQLite 后端完成了读写性能和体积优化,代价是数据格式不向下兼容。但关键在于,存储本身是一个可替换的插件,未来切换到 PostgreSQL 或内存数据库不需要改动上层逻辑。这验证了 Seam 设计在实际演进中的价值。
3. 终端与多模态的插件化
Windows PTY 引入持久化 PowerShell 会话,并在 Minimal 预设默认开启;对于不具备视觉能力的纯文本模型,Harness 会降级调用 OCR、颜色统计等工具插件,把图像转成结构化文本再交给模型。两者都是"能力按需装配"的体现。
DeepSeek Harness 的架构价值,不在于它提供了多少现成功能,而在于它把 Agent 运行时的每个环节都做成了生命周期可控、可替换、可回滚的插件单元。rc.8 的改动方向——子代理插件化、存储可替换、能力按需装配——都是在往这个目标收敛。
对于关注 Agent 基础设施的开发者,值得看的不是它今天能跑什么,而是它把"编排层"本身做成了开放变量这件事。
参考资料:DeepSeek Harness GitHub 仓库(deepseek-ai/deepseek-harness)、Cordis 论文《A Programming Paradigm for Spatiotemporal Composability》、rc.8 官方发布说明。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。