DeepSeek 开源 Harness:一切皆插件,4 万星,5 天爆火的 Agent 架构到底有什么不一样
DeepSeek 开源 Harness:一切皆插件,4 万星,5 天爆火的 Agent 架构到底有什么不一样
DeepSeek 又放了一个大招。
8 月 13 日,他们开源了一个叫 DeepSeek Harness(dsh)的项目。
GitHub 地址:https://github.com/deepseek-ai/deepseek-harness 官网:https://deepseek.com/harness
5 天,39353 颗星。 TypeScript 编写,MIT 协议。
一句话定位:Everything is a Plugin(一切皆插件)。
这不是又一个 Claude Code 的克隆,不是又一个 Coding Agent CLI。 这是一个从底层架构开始,就按照"一切皆插件"的哲学重新设计的 Agent Harness。
它的每一个组件——模型适配器、工具注册表、会话日志、Agent Loop 本身——全部都是插件。 没有特权核心,没有硬编码的逻辑,没有任何一个组件是不可替换的。
这种架构激进到什么程度? 你甚至可以把 Agent Loop 本身替换掉,换成你自己的实现,其他什么都不用改。
这就是 DeepSeek Harness 和其他所有 Agent 框架最根本的区别。
核心哲学:没有内核,只有插件
绝大多数 Agent 框架的架构是这样的:
核心引擎(不可变)
├── 模型调用模块(内置)
├── 工具系统(内置)
├── 会话管理(内置)
├── Agent Loop(内置)
└── 插件接口(你只能在这里扩展)核心引擎是编译好的、不可修改的。你只能在它预留的插件接口处扩展。 想换一个 Agent Loop 的实现?不行。想换一个会话日志的格式?不行。想换一个模型调用的底层机制?不行。
DeepSeek Harness 的架构完全不同:
共享上下文(Context)
├── 模型适配器(插件,可替换)
├── 工具注册表(插件,可替换)
├── 会话日志(插件,可替换)
├── Agent Loop(插件,可替换)
├── 系统提示词(插件,可替换)
├── 沙箱策略(插件,可替换)
├── 审批策略(插件,可替换)
└── ... 你自己的插件没有"核心引擎"这个概念。 一切都是插件,一切都在共享上下文里注册自己的能力。 想换什么,就把对应的插件替换掉。 不需要 fork 代码,不需要改源码,只需要写一个新插件,挂上去就行。
这就是"Everything is a Plugin"的真正含义。
底层框架:Cordis —— 时空可组合性
DeepSeek Harness 的底层不是 Express、不是 Fastify、不是任何你熟悉的 Web 框架。 它基于一个叫 Cordis 的框架。
Cordis 是什么? 它的设计哲学在一篇论文里描述:《A Programming Paradigm for Spatiotemporal Composability》(一种时空可组合性编程范式)。
简单说,Cordis 做了三件事:
1. 插件向共享上下文贡献服务
每个插件启动时,会向一个共享的 Context 注册自己提供的服务。比如:
- 模型适配器插件注册
ctx.llm - 工具系统插件注册
ctx.tools - 会话管理插件注册
ctx.sessions
其他插件可以通过 Context 获取这些服务,不需要直接 import。
2. 类型化事件
插件之间通过类型化的事件通信。比如:
agent/pre-step:Agent 即将执行一步tools/pre-execute:工具即将执行session/event:会话事件被追加到日志
事件是扩展点。你想拦截某个行为,不需要改源码,只需要监听对应的事件。
3. 可逆副作用
这是 Cordis 最独特的设计。 插件注册的服务、监听的事件、创建的资源,全部都是可逆的。 当插件被卸载时,它注册的所有东西都会自动回滚——注册的服务会被移除,监听的事件会被取消,创建的资源会被清理。
这意味着你可以热插拔插件。 Agent 运行的时候,你可以动态加载和卸载插件,不需要重启。
Profile 和 Bundle:可组合的配置系统
DeepSeek Harness 的配置系统由两层组成:
Profile(配置档案)
一个 Profile 是一个命名的插件组合方案。比如:
web:Web UI 模式,包含浏览器界面 + 所有核心插件headless:无头模式,只有核心插件,没有 UI,适合 CI/CD
你可以创建自己的 Profile,组合任意的 Bundle。
Bundle(插件包)
一个 Bundle 是一组 Cordis 配置行和对应代码的分发格式。 比如:
dsh-base:基础层,包含模型适配器、工具、持久化、沙箱、审批策略、设置、凭证、遥测dsh-web-app:Web 应用层,在 base 之上加浏览器界面dsh-headless:无头层,在 base 之上加一次性运行器
层叠式配置
配置按以下顺序层叠应用:
1. Profile 中列出的 Bundle(按顺序)
2. Profile 级别的 cordis.patch.yml
3. Home 级别的 cordis.patch.yml
4. 命令行 --patch 覆盖每一层都可以覆盖或新增配置。你可以看到你的机器实际启动时的完整配置树:
dsh --profile web --dump-config输出的任何一行都可以被你自己的 patch 替换。
核心子系统
| 包 | 职责 | Context Key |
|---|---|---|
core/session |
追加式 SessionEvent 日志和内存存储 | ctx.sessions |
core/system-prompt |
提示词部分和工具 schema 组装 | ctx.systemPrompt |
core/tools |
作用域工具注册表和受保护的执行管道 | ctx.tools |
core/agent |
Agent 接口和实时注册表 | ctx.agents |
core/agent-loop |
默认驱动器实现 | ctx.agentLoop |
core/scope |
每个 Agent 的作用域注册原语 | 库,无 key |
llm/llm |
消息和流词汇加上适配器接缝 | ctx.llm |
注意:这些都是"核心"包,但它们不是特权代码。 它们和其他插件一样,通过 Cordis 的标准机制注册到 Context。 你可以用你自己的实现替换它们中的任何一个。
Agent 的完整生命周期
DeepSeek Harness 定义了一套完整的、事件驱动的 Agent 生命周期:
turn/start ← 轮次开始
claim next-step input ← 领取下一步的输入
assemble prompt + tools ← 组装提示词和工具 schema
→ agent/pre-step ← Agent 预处理(可拦截)
step/start ← 步骤开始
append messages ← 追加消息到日志
derive model history ← 从日志派生模型历史
agent/request → llm/stream ← 模型请求和流式响应
→ tools/pre-execute ← 工具预执行(可拦截)
→ tools/execute ← 工具执行
→ tools/post-execute ← 工具后处理(可拦截)
step/end ← 步骤结束
→ agent/turn-stopping ← 轮次停止判断
turn/end ← 轮次结束关键设计:
模型可见 = 已记录。任何到达模型请求的内容,都必须可以从会话日志重建。这是一个运行时不变量——如果你试图向模型发送一个没有对应日志事件的内容,系统会直接报错。
事件分三类:
- 持久事件(
turn/*,step/*,user/message,assistant/*,tool/*):追加到会话日志,重载后依然存在 - 实时事件(
agent/*):携带实时 Agent 状态,用于观察或拦截进行中的工作 - 能力事件(
fs/*,tools/*,telemetry/*):附加策略和适配器,不需要导入循环代码
能力接缝(Capability Seams):一个替换改变一切
这是 DeepSeek Harness 最精妙的设计。
一个"接缝"由三个角色组成:
- Service Definition:声明接口
- Service Provider:实现接口
- Consumer:使用接口(通常是模型面对的工具)
关键在于:一个 Provider 的替换,可以改变整个产品的行为。
举个例子: 文件系统和子进程 Provider 共享一个执行世界。如果你把它们的 Provider 指向一个远程沙箱,那么 Bash、PTY、LSP 全部自动跟着迁移到远程沙箱。不需要改任何工具代码。
这就是"接缝"的威力——你换一个底层 Provider,上层所有消费者自动适配。
扩展点大全:你能改什么?
| 你想做什么 | 怎么做 |
|---|---|
| 添加模型 provider | 在 ctx.llm 上注册适配器 |
| 添加模型面对的能力 | 在 ctx.tools 上注册,schema 自动加入提示词 |
| 给某个会话不同的能力集 | 组合一个 Agent preset |
| 添加 shell 执行 | 注册 ctx.shell 后端 |
| 添加持久终端 | 注册 ctx.terminals 后端 + dsh-tool-terminal |
| 添加人类命令 | 在 ctx.commands 上注册,不需要模型轮次 |
| 添加后台任务 | 在 ctx.jobs 上注册 |
| 添加文件系统访问或策略 | 注册 ctx.fs provider 或监听 fs/* 事件 |
| 限制生成的进程 | 使用 ctx.sandbox 后端 |
| 拦截请求/工具/轮次 | 使用 agent/* 或 tools/* 事件 |
| 注入模型可见的上下文 | 调用 agent.inject() |
| 添加 UI 或编辑器集成 | 驱动 ctx.agents 并从 session/event 渲染 |
| Fork 一个实时会话 | ctx.sessions.fork(source, boundary?, childSessionId?) |
每一个扩展点都有对应的事件和 API,不需要改源码。
怎么用?一条命令
npx @deepseek-ai/dsh web打开浏览器,访问 http://127.0.0.1:3080,你就有了一个完整的 Agent Harness Web UI。
从源码运行:
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web就这么简单。
和其他 Agent 框架的对比
| 维度 | Claude Code | OpenShell | Better Harness | DeepSeek Harness |
|---|---|---|---|---|
| 架构 | 单体式 | 分层防护 | 分析工具 | 一切皆插件 |
| 可替换性 | 低 | 中 | N/A | 极高 |
| Agent Loop | 内置 | 内置 | N/A | 可替换 |
| 模型适配器 | 内置 | 内置 | N/A | 可替换 |
| 会话日志 | 内置 | 内置 | N/A | 可替换 |
| 热插拔 | ❌ | ❌ | N/A | ✅ |
| 底层框架 | 自研 | Rust/Axum | Node.js | Cordis |
| 语言 | TypeScript | Rust | TypeScript | TypeScript |
| 定位 | 产品 | 安全运行时 | 分析工具 | 平台/框架 |
DeepSeek Harness 的定位不是"一个产品",而是"一个平台"。 它给你的是一个可组合的、可替换的、可扩展的 Agent 基础设施。 你在它上面构建你自己的 Agent 产品。
这个项目真正的意义
1. Agent 框架的"Linux 时刻"
Linux 的成功在于:内核是可模块化的,你可以按需组合。 DeepSeek Harness 做了同样的事情:Agent 的每一个组件都是可替换的插件,你可以按需组合。 这可能会成为 Agent 领域的"Linux 内核"。
2. 证明了"插件化"在 Agent 领域是可行的
以前大家觉得"插件化"太慢、太复杂,不适合 Agent 场景。 DeepSeek Harness 用 Cordis 框架证明了:插件化不仅可行,而且可以做得足够快、足够优雅。
3. DeepSeek 的生态布局
从 DeepSeek V4 模型,到 DeepSeek Harness,DeepSeek 正在构建一整套 AI Agent 生态。 模型是大脑,Harness 是身体。DeepSeek 想要做的是"模型 + 框架"的整体解决方案。
4. 中国 AI 公司在基础设施层面的突破
以前中国在 AI 领域的强项是应用层。DeepSeek Harness 是在基础设施层面的重大突破——它不是在做应用,它是在定义 Agent 的架构范式。
写在最后
39353 颗星,5 天。
这个数字本身就说明了整个行业对"插件化 Agent 架构"的渴望。
所有人都在忍受"Agent 框架太死板"的痛苦——你想改一个东西,但是它编译在核心里,你改不了。你只能 fork,然后维护一个自己的版本,然后永远跟不上上游的更新。
DeepSeek Harness 给出了另一个答案: 不要有核心。一切都是插件。你想改什么,就替换什么。
这不是一个产品,这是一个架构宣言。
它告诉所有人:Agent 框架不应该是黑盒。Agent 框架应该是透明的、可组合的、可替换的。
如果你在做 Agent 相关的开发,这个项目值得你认真研究。不是因为它是一个好用的工具,而是因为它代表了一种全新的架构思路。
这种思路,可能会定义未来五年 Agent 框架的演进方向。
作者: itech001 来源: 公众号:AI人工智能时代 网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。
本文首发于 AI人工智能时代,转载请注明出处。