返回博客列表

DeepSeek 开源 Harness:一切皆插件,4 万星,5 天爆火的 Agent 架构到底有什么不一样

2026-08-19T12:00:00+08:00
DeepSeek HarnessAgent 架构Cordis插件化Agent LoopTypeScript

DeepSeek 开源 Harness:一切皆插件,4 万星,5 天爆火的 Agent 架构到底有什么不一样

DeepSeek 又放了一个大招。

8 月 13 日,他们开源了一个叫 DeepSeek Harnessdsh)的项目。

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人工智能时代,转载请注明出处。

分享给朋友