DeepSeek Harness 深度解析:从"一切皆插件"到企业级 Agent 调度层

DeepSeek Harness 封面

2026 年 8 月 13 日深夜,DeepSeek 两小时三连击:V4 Pro 正式版转正、API 涨价预告,然后是一个让整个开发者社区炸锅的项目——DeepSeek Harness。这个项目开源首日 GitHub Star 破 3 万、登顶 Hacker News,创下史上最快破 2 万 Star 的纪录,一周内突破 16 万 Star。

它不是新模型,不是聊天界面,而是一套把"模型 + 工具 + 工作区 + 权限 + 会话记忆 + 任务循环"串起来的 Agent 运行时。官方给的公式很直白:Model + Harness = Agent

本文将从痛点出发,带你彻底搞懂 DeepSeek Harness 是什么、为什么用、怎么演进、怎么在企业项目中落地,并附上可直接运行的代码。


引言:你是否也遇到了这些痛点

文章目录

场景一:AI 只会"说"不会"做"。 你用大模型写了一段代码,它告诉你"请打开终端执行 npm install",然后呢?然后你自己打开终端、自己敲命令、自己看报错、自己回去问它。模型像一个只会动嘴的顾问,所有脏活累活还是你自己干。

场景二:Agent 框架绑死了模型。 你选了 Claude Code,就只能用 Claude 模型;选了 Codex,就只能用 OpenAI 模型。公司要求数据不出内网、要用私有部署的模型,这些闭源工具直接罢工。想同时用多个模型做对比测试?得在五六个工具之间来回切。

场景三:想扩展功能比登天还难。 你想给 Agent 加一个"查询公司内部数据库"的工具,或者加一个"自动生成周报并发送到飞书"的技能。闭源工具的插件体系要么没有,要么只能通过 MCP 协议做有限扩展,连 Agent 的主循环逻辑都碰不到。想改个权限策略?对不起,源码不在你手里。

场景四:出了问题无法追溯。 Agent 跑了一个复杂任务,中间调了十几个工具、改了五六个文件,最后结果不对。你想回看它每一步看到了什么、想了什么、调了什么工具、返回了什么结果——闭源工具只给你一个最终答案,中间过程是个黑盒。

场景五:企业级需求无人满足。 你需要 RBAC 权限控制、操作审计日志、沙箱隔离、离线部署、自定义模型网关。市面上的 Agent 工具要么是个人玩具,要么是 SaaS 订阅,没有一个能真正装进企业内网、按企业规则运行。

如果你中了以上任意一条,DeepSeek Harness 就是为你准备的。


一、DeepSeek Harness 是什么

专业解释

DeepSeek Harness(命令行工具名 dsh)是由 DeepSeek AI 开发的开源 Agent 运行时框架,采用 MIT 许可证开源。它基于"一切皆插件"(Everything is a Plugin)的架构原则,底层由 Cordis 微内核驱动,模型、工具、技能、会话、沙箱、存储、调度、UI 甚至 Agent 主循环本身全部以插件形式存在,可自由替换、灵活重组。

当前处于开发者预览版(Developer Preview),最新版本为 v0.1.0-rc.8,官方明确警告会有破坏性变更。

大白话

你可以把大模型想象成一个超级聪明的大脑,但这个大脑没有手、没有脚、没有记忆、没有工具。它能告诉你"应该怎么做",但自己做不了。

Harness 就是给这个大脑装上的"身体"——它负责读文件、敲命令、上网查资料、管理记忆、拆解任务、纠错重试。官方公式 Model + Harness = Agent,翻译过来就是:大脑 + 身体 = 能干活的人

而 DeepSeek Harness 最特别的地方在于,这个身体的每一个零件都是可插拔的。你不想要它的手?换一只。你想给它加个翅膀?插一个。你想把整个大脑换成别家的?拔下来换一个就行,身体不用动。

生活案例

想象你去一家餐厅吃饭。

  • 模型是厨师,负责思考怎么做菜。
  • Harness 是整个餐厅的运营体系——传菜员、采购员、收银员、洗碗工、菜单系统、库存管理。

没有 Harness 的模型,就像一个站在空厨房里的厨师,他知道菜谱,但没有食材、没有锅碗瓢盆、没有人帮他传菜,只能干巴巴地念菜谱。

普通的 Agent 框架(如 Claude Code),就像一家品牌连锁餐厅——厨师、菜单、装修、服务流程全是品牌方定好的,你只能在固定菜单里点菜,想加一道自家特色菜?对不起,不支持。

DeepSeek Harness 则像一个共享厨房空间——你可以自带任何厨师(任意模型)、自带任何食材和工具(任意插件)、自己定服务流程(自定义 Agent Loop)、自己管账(自定义存储和审计)。整个空间的每一个区域都可以重新装修,没有任何一面墙是焊死的。

核心架构总览

DeepSeek Harness 架构图

如上图所示,Cordis 微内核处于中心位置,所有能力(模型适配器、工具注册表、会话日志、沙箱、Agent Loop、Web UI)都作为插件挂载到内核上,通过服务依赖和事件总线彼此协作。


二、为什么要用 DeepSeek Harness

痛点一:模型锁定的解决方案

痛点: 现有 Agent 工具与特定模型厂商深度绑定,企业无法自由选择模型。

解决方案: DeepSeek Harness 的模型适配器本身就是一个插件。你可以在配置文件中切换模型提供商,从 DeepSeek 换到 OpenAI、Anthropic、OpenRouter,甚至指向你自己部署的本地模型,不需要改任何业务代码。

# config.yaml - 模型配置示例
models:
  default: deepseek-v4-pro
  providers:
    deepseek:
      baseUrl: https://api.deepseek.com
      apiKey: ${DEEPSEEK_API_KEY}
    openai:
      baseUrl: https://api.openai.com/v1
      apiKey: ${OPENAI_API_KEY}
    internal:
      baseUrl: http://192.168.1.100:8080/v1
      apiKey: ${INTERNAL_MODEL_KEY}

痛点二:功能扩展受限的解决方案

痛点: 闭源 Agent 工具只能通过 MCP 做有限扩展,无法触及核心逻辑。

解决方案: 在 DeepSeek Harness 中,连 Agent 主循环、会话日志、沙箱策略都是插件。你可以替换推理循环、自定义沙箱安全边界、更换存储后端,所有扩展不需要修改 Harness 源码,通过配置文件组合即可。

// 自定义 Agent Loop 插件示例
import type { Context } from '@deepseek-ai/cordis'

export const name = 'custom-agent-loop'
export const inject = ['llm', 'tools', 'session']

export function apply(ctx: Context) {
  ctx.agentLoop.register({
    name: 'custom-loop',
    async run(task, context) {
      // 自定义任务拆解逻辑
      const plan = await ctx.llm.plan(task)
      for (const step of plan.steps) {
        // 自定义执行与重试策略
        const result = await executeWithRetry(step, context)
        // 自定义结果验证
        if (!validate(result)) {
          await ctx.llm.reflect(step, result)
        }
      }
    },
  })
}

痛点三:可观测性缺失的解决方案

痛点: Agent 执行过程是黑盒,出了问题无法追溯。

解决方案: DeepSeek Harness 的每一次运行都记录在追加式会话日志中(append-only session log),包括系统提示、推理过程、工具调用及结果、子代理调度、每一次上下文注入。在 Trajectory 视图中可以按来源检查这些记录,支持恢复、分叉、搜索和重放。

# 查看会话轨迹
dsh trajectory list
dsh trajectory show <session-id>
dsh trajectory replay <session-id> --step 5
dsh trajectory fork <session-id> --step 12

痛点四:企业级部署的解决方案

痛点: 数据安全要求高,无法使用 SaaS 型 Agent 工具。

解决方案: DeepSeek Harness 是 MIT 开源项目,可 100% 离线部署在企业内网。模型 API 端点可指向内部网关,所有数据不出域。配合自定义权限插件和审计插件,可满足企业级安全合规要求。


三、它是怎么演进过来的

DeepSeek Harness 演进时间线

第一阶段:模型开源(2024-2025)

DeepSeek 从 2024 年开始陆续开源了 DeepSeek-V2、DeepSeek-V3、DeepSeek-R1 等大语言模型,在模型层面积累了强大的技术实力。但此时的 DeepSeek 只提供了"大脑",没有提供"身体"——开发者拿到模型后,还需要自己搭建 Agent 运行环境。

第二阶段:内部研发(2026.6.10 - 2026.8.13)

2026 年 6 月 10 日,DeepSeek Harness 仓库第一次提交。在接下来的 64 天里,这个项目完成了 12293 次提交,附带 683 篇设计笔记,连被否决的 11 条方案都摊在仓库里。团队选择了 Cordis 作为插件元框架,并将其源码整个拷进自己仓库,修改了 18 处。启动清单只有 129 行,Agent 主循环和计时器插件的格式一模一样,没有任何零件是焊死的。

第三阶段:开源发布(2026.8.13)

2026 年 8 月 13 日深夜,DeepSeek Harness v0.1.0-rc.1 以 MIT 协议开源。发布首日 GitHub Star 破 3 万,登顶 Hacker News 首页。Hacker News 主贴下有一条高赞评论:"这次它看起来相当原创。"一个长期被指责套壳的公司,第一次在那个社区被承认原创——靠的不是新模型,是一个开源的 Harness。

第四阶段:快速迭代(2026.8.17 - 2026.8.19)

  • 8 月 17日 RC.7: 将 Codex 和 Claude Code 的子代理任务接入 Job Panel 统一管理,web_search 支持并发查询。
  • 8 月 19日 RC.8: 原生看图能力上线,/goal、/plan 等核心命令支持图文混合输入;Claude Code 和 Codex 作为 Profile Bundle 可按需安装,在 Harness 工作流中当具体任务的执行者;Codex 支持非交互权限模式和多个命名实例;配套 reportDelivery 机制及时回传结果并唤醒等待中的父任务。

竞对的产品,变成了自己的零件。这就是 DeepSeek Harness 的野心——它要当 Agent 时代的"调度层",让所有模型、所有 Agent 工具都跑在自己的运行时之上。


四、核心架构:Cordis 与"一切皆插件"

Cordis 是什么

Cordis 是 DeepSeek Harness 底层的插件元框架,其设计理念发表在论文《A Programming Paradigm for Spatiotemporal Composability》中。Cordis 不关心你怎么实现工具,它只做三件事:

  1. 插件生命周期管理: 加载、初始化、卸载
  2. 依赖注入: 插件按依赖顺序启动
  3. 事件总线: 插件通过服务(service)和类型化事件(typed event)彼此协作

插件卸载时,它的所有注册会被反向撤销,不留孤儿状态。这意味着你可以在运行时热插拔插件,不需要重启整个系统。

"一切皆插件"意味着什么

在 DeepSeek Harness 中,以下所有能力都是插件:

能力类别 说明 可替换性
模型适配器 连接不同 LLM 提供商 可替换为任意模型
工具注册表 管理模型可调用的工具 可扩展任意工具
技能(Skill) 给模型注入操作说明与资源 可自定义技能包
会话日志 记录所有运行轨迹 可更换存储后端
沙箱 隔离执行环境 可自定义安全策略
Agent Loop 主任务循环逻辑 可替换推理策略
调度器 子代理任务调度 可自定义调度算法
Web UI 用户界面 可自定义主题和功能

官方仓库自带 159 个插件包,用户插件与官方插件地位完全平等。这不是比喻——你可以在不碰其他部分的情况下替换推理循环,可以用自己的企业安全边界替换沙箱,可以接入 GPT-4、Claude 或任意开源模型。

插件的核心契约

一个最小的 Harness 插件只需要导出 apply(ctx) 函数:

// 最小插件示例
import type { Context } from '@deepseek-ai/cordis'

export const name = 'my-first-plugin'

export function apply(ctx: Context) {
  // 在这里注册能力
  ctx.on('ready', () => {
    console.log('插件已加载')
  })
}

如果插件依赖其他服务,通过 inject 声明:

export const inject = ['tools', 'llm']

export function apply(ctx: Context) {
  // ctx.tools 和 ctx.llm 已就绪
}

五、四种运行模式

DeepSeek Harness 四种运行模式

DeepSeek Harness 提供四种运行模式,适应不同场景:

Standard 模式(标准模式)

完整的编码 Agent,包含文件编辑、Shell、文件和网页搜索、技能、规划、目标、子代理和工作流。这是日常开发的默认模式。

dsh web --mode standard

Code 模式(代码模式)

在 Standard 模式基础上,通过 Code Mode SDK 将工具暴露给模型,使模型能够在一个 TypeScript 程序中组合多步操作。适合需要精细控制工具调用序列的复杂任务。

dsh web --mode code

Minimal 模式(极简模式)

仅保留持久化 Bash 和 str_replace_editor 两个工具的编码 Agent,用于在最小环境中对模型进行基准测试。适合模型评测和性能对比。

dsh web --mode minimal

Creator 模式(创作者模式)

用于创建自定义 Agent 预设,包含所有 Standard 模式能力,加上运行时检查、内存中测试 Cordis 插件、预设编写指导。适合插件开发者和需要自定义运行环境的高级用户。

dsh web --mode creator

六、怎么用:从安装到第一个插件

第一步:环境准备

DeepSeek Harness 基于 Node.js 运行,需要 Node.js 18 及以上版本(推荐 22.19+)。

# 检查 Node.js 版本
node --version

# 如果没有安装,使用 nvm 安装
nvm install 22
nvm use 22

第二步:一行命令启动

最简单的方式是通过 npx 直接运行:

npx @deepseek-ai/dsh web

这条命令会自动下载并启动 DeepSeek Harness 的 Web UI,默认监听 http://127.0.0.1:3080,并自动在浏览器中打开。

如果是 SSH 远程启动,不会自动打开浏览器,只会打印主机 URL。使用 --no-open 参数可以禁止自动打开浏览器。

# 不自动打开浏览器
npx @deepseek-ai/dsh web --no-open

# 指定端口
npx @deepseek-ai/dsh web --port 8080

第三步:全局安装(日常使用推荐)

npm install -g @deepseek-ai/dsh

# 验证安装
dsh --version

# 启动 Web UI
dsh web

第四步:源码构建(开发者/二次定制)

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness

# 启用 corepack 并安装依赖
corepack enable
pnpm install

# 构建
pnpm run build

# 启动
pnpm dsh web

第五步:配置 API Key

首次启动后,在 Web UI 的设置页面配置模型 API Key,或者通过环境变量配置:

# 配置 DeepSeek API Key
export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxx"

# 配置 OpenAI API Key(可选)
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxx"

# 启动
dsh web

也可以使用 YAML 配置文件:

# ~/.dsh/config.yaml
models:
  default: deepseek-v4-pro
  providers:
    deepseek:
      baseUrl: https://api.deepseek.com
      apiKey: sk-xxxxxxxxxxxxxxxx

第六步:开发第一个工具插件

DeepSeek Harness 插件开发流程

下面我们创建一个 text_stats 工具插件:输入任意文本,返回字符数、非空白字符数、行数和粗略 Token 估算。

创建插件目录:

mkdir -p my-plugin/src

编写插件代码 my-plugin/src/index.ts

import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'

export const name = 'text-stats'
export const inject = ['tools']

export function apply(ctx: Context) {
  ctx.tools.register(
    defineTool({
      name: 'text_stats',
      description: 'Count characters and lines, then estimate token usage.',
      parameters: {
        text: {
          type: 'string',
          required: true,
          description: 'The text to inspect.',
        },
        charsPerToken: {
          type: 'number',
          description: 'Positive estimation ratio; defaults to 4.',
        },
      },
      output: {
        schema: { type: 'string' },
        render: (_args, value) => [{ type: 'text', text: value }],
      },
      async execute(args) {
        const ratio = args.charsPerToken ?? 4
        if (!Number.isFinite(ratio) || ratio <= 0) {
          throw new Error('charsPerToken must be a positive number.')
        }

        const characters = [...args.text].length
        const nonWhitespace = [...args.text].filter(
          (char) => !/\s/u.test(char)
        ).length
        const lines =
          args.text.length === 0 ? 0 : args.text.split(/\r?\n/u).length
        const estimatedTokens = Math.ceil(characters / ratio)

        return JSON.stringify({
          characters,
          nonWhitespace,
          lines,
          estimatedTokens,
          charsPerToken: ratio,
        })
      },
    })
  )
}

这里有四个不能省略的契约:

  1. inject = ['tools'] 保证工具服务就绪后才执行 apply
  2. parameters 会在 execute 前完成基础类型和必填项校验。
  3. execute 返回值必须符合 output.schema;基础设施故障应抛出异常。
  4. 注册与插件 Fiber 绑定;插件卸载或热更新时,工具会自动注销。

创建 Patch 配置文件 my-plugin/cordis.yml

- insert:
    - id: text-stats
      name: '/absolute/path/to/my-plugin/src/index.ts'

启动调试:

pnpm dsh web --patch ./my-plugin/cordis.yml

打开 Web UI 后输入:

请必须调用 text_stats,统计下面文本的字符数和行数:
DeepSeek Harness
Everything is a Plugin.

如果模型的调用记录中出现 text_stats,并返回包含 characterslinesestimatedTokens 的 JSON,说明注册、参数校验、执行和渲染链路都已打通。

第七步:封装为 Bundle 并发布

当插件开发完成后,可以封装为 Bundle 分发:

{
  "name": "dsh-bundle-text-stats",
  "version": "1.0.0",
  "dsh": {
    "bundle": {
      "plugins": ["./src/index.ts"],
      "config": {
        "defaultCharsPerToken": 4
      }
    }
  }
}

发布到 npm 后,其他用户可以通过 Profile 安装:

dsh profile install dsh-bundle-text-stats

七、企业项目实战

DeepSeek Harness 企业部署架构

场景一:企业内网代码审查 Agent

某科技公司需要一个能在内网环境中自动审查代码的 Agent,要求:

  • 数据不出内网
  • 连接公司内部 GitLab
  • 审查结果自动提交到代码评审系统
  • 所有操作有审计日志

部署架构:

# enterprise-config.yaml
models:
  default: internal-deepseek-v3
  providers:
    internal:
      baseUrl: http://model-gateway.internal:8080/v1
      apiKey: ${INTERNAL_MODEL_KEY}

plugins:
  - id: gitlab-tools
    name: '@company/dsh-gitlab-tools'
    config:
      baseUrl: https://gitlab.internal.com
      token: ${GITLAB_TOKEN}
  - id: audit-logger
    name: '@company/dsh-audit-logger'
    config:
      endpoint: http://audit.internal:9200
      index: dsh-audit

sandbox:
  mode: read-only
  allowedPaths:
    - /workspace/repos
    - /tmp/dsh-work

自定义 GitLab 工具插件:

// gitlab-tools/src/index.ts
import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'
import axios from 'axios'

export const name = 'gitlab-tools'
export const inject = ['tools']

export function apply(ctx: Context) {
  const gitlab = axios.create({
    baseURL: ctx.config.gitlab.baseUrl,
    headers: { 'PRIVATE-TOKEN': ctx.config.gitlab.token },
  })

  // 工具1:获取 Merge Request 变更
  ctx.tools.register(
    defineTool({
      name: 'gitlab_get_mr_changes',
      description: 'Get the diff changes of a GitLab merge request.',
      parameters: {
        projectId: { type: 'string', required: true },
        mrIid: { type: 'string', required: true },
      },
      output: { schema: { type: 'string' } },
      async execute(args) {
        const { data } = await gitlab.get(
          `/projects/${args.projectId}/merge_requests/${args.mrIid}/changes`
        )
        return JSON.stringify(data.changes)
      },
    })
  )

  // 工具2:提交代码审查评论
  ctx.tools.register(
    defineTool({
      name: 'gitlab_post_review_comment',
      description: 'Post a review comment on a GitLab merge request.',
      parameters: {
        projectId: { type: 'string', required: true },
        mrIid: { type: 'string', required: true },
        body: { type: 'string', required: true },
        filePath: { type: 'string' },
      },
      output: { schema: { type: 'string' } },
      async execute(args) {
        const { data } = await gitlab.post(
          `/projects/${args.projectId}/merge_requests/${args.mrIid}/notes`,
          { body: args.body }
        )
        return JSON.stringify({ id: data.id, url: data.web_url })
      },
    })
  )
}

使用方式:

# 启动企业版 Agent
dsh web --config enterprise-config.yaml

# 在 Web UI 中输入:
# 请审查 projectId=123 的 MR !45,重点关注安全性和性能问题,
# 将审查意见通过 gitlab_post_review_comment 提交到对应文件。

场景二:多模型对比测试平台

某 AI 团队需要同时用多个模型执行同一组任务,对比输出质量和成本。

// multi-model-benchmark.ts
import type { Context } from '@deepseek-ai/cordis'

export const name = 'multi-model-benchmark'
export const inject = ['llm', 'session']

export function apply(ctx: Context) {
  ctx.commands.register('benchmark', {
    description: 'Run a task across multiple models and compare results.',
    async execute(args: { task: string; models: string[] }) {
      const results = []
      for (const model of args.models) {
        const start = Date.now()
        const output = await ctx.llm.complete({
          model,
          messages: [{ role: 'user', content: args.task }],
        })
        const duration = Date.now() - start
        results.push({
          model,
          output: output.content,
          durationMs: duration,
          tokens: output.usage,
        })
      }
      return JSON.stringify(results, null, 2)
    },
  })
}
# 运行对比测试
dsh run benchmark --task "实现一个快速排序算法" --models "deepseek-v4-pro,claude-sonnet-4,gpt-4o"

场景三:自动化日报生成 Agent

某团队需要每天自动收集 Git 提交记录、CI/CD 状态、项目进度,生成日报并发送到飞书群。

// daily-report-agent/src/index.ts
import type { Context } from '@deepseek-ai/cordis'
import { defineTool } from '@deepseek-ai/dsh-tools'

export const name = 'daily-report'
export const inject = ['tools', 'scheduler', 'llm']

export function apply(ctx: Context) {
  // 飞书消息发送工具
  ctx.tools.register(
    defineTool({
      name: 'feishu_send_message',
      description: 'Send a message to a Feishu group.',
      parameters: {
        webhookUrl: { type: 'string', required: true },
        content: { type: 'string', required: true },
      },
      output: { schema: { type: 'string' } },
      async execute(args) {
        const res = await fetch(args.webhookUrl, {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({
            msg_type: 'text',
            content: { text: args.content },
          }),
        })
        return JSON.stringify({ status: res.status })
      },
    })
  )

  // 定时任务:每天 18:00 生成日报
  ctx.scheduler.register('daily-report-cron', {
    cron: '0 18 * * 1-5',
    async run() {
      const gitLog = await ctx.tools.call('shell_exec', {
        command: 'git log --since="1 day ago" --pretty=format:"%h %s"',
      })
      const report = await ctx.llm.complete({
        messages: [
          {
            role: 'system',
            content: '你是一个项目日报生成器,根据Git提交记录生成简洁的日报。',
          },
          { role: 'user', content: `今日Git提交记录:\n${gitLog}` },
        ],
      })
      await ctx.tools.call('feishu_send_message', {
        webhookUrl: process.env.FEISHU_WEBHOOK,
        content: report.content,
      })
    },
  })
}

八、竞品对比

DeepSeek Harness 竞品对比

对比维度 DeepSeek Harness Claude Code Codex CLI OpenHands
开源协议 MIT 闭源 闭源 MIT
模型绑定 任意模型(可插拔适配器) 仅 Claude 系列 仅 OpenAI 系列 任意模型
插件架构 一切皆插件(含 Agent Loop) MCP 扩展 MCP 扩展 技能扩展
可观测性 完整追加式轨迹日志,支持分叉/重放 托管转录记录 托管转录记录 有限
企业离线部署 支持,100% 内网运行 不支持 不支持 支持
子代理调度 原生支持,可收编 Claude Code/Codex 有限 有限 有限
运行模式 四种(Standard/Code/Minimal/Creator) 单一 单一 单一
自定义 UI 可替换(UI 是插件) 固定 固定 固定
当前状态 开发者预览(v0.1.0-rc.8) 正式版 正式版 正式版
内置工具数 53+ 个文档化工具 精选集 + MCP 精选集 + MCP 基础工具集
默认沙箱 read-only(故障安全) 权限提示 权限提示 容器隔离
社区生态 爆发式增长(一周 16 万 Star) 成熟 成熟 中等

各产品适用场景

  • DeepSeek Harness: 需要深度定制运行时、多模型混用、企业内网部署、插件生态建设的团队。如果你想把 Agent 运行时本身作为产品来做,dsh 是目前唯一的选择。
  • Claude Code: 个人开发者在现有代码库中进行交互式编码,追求开箱即用和 Claude 模型的高质量输出。文档成熟、生态完善,但绑定 Anthropic 模型。
  • Codex CLI: OpenAI 生态用户,适合可并行化、自包含的任务,偏好 PR 审查工作流而非直接文件修改。
  • OpenHands: 开源社区驱动的 Agent 平台,适合需要基础开源方案但不需要深度插件定制的场景。

关键差异总结

DeepSeek Harness 的插件体系是结构性的——连 Agent Loop 和会话日志都是插件,其他框架的插件是功能性的——在固定核心上扩展功能。这个差异决定了:如果你需要一个可以深度定制的 Agent 平台底座,dsh 是唯一选择;如果你只是需要一个能写代码的工具,Claude Code 和 Codex 目前更成熟。


九、常用场景

场景 1:全栈开发助手

使用 Standard 模式,让 Agent 帮你创建项目、编写代码、运行测试、修复 Bug。支持文件编辑、Shell 执行、网页搜索、代码规划等完整工具集。

dsh web --mode standard
# 输入:帮我在当前目录创建一个 NestJS + Vue3 的全栈项目,
# 包含用户登录注册功能,使用 PostgreSQL 数据库。

场景 2:模型基准测试

使用 Minimal 模式,在最小工具环境中对不同模型进行编码能力基准测试,排除工具差异对结果的干扰。

dsh web --mode minimal
# 输入:请实现一个支持并发请求的 HTTP 客户端,要求连接池管理、超时重试、请求取消。

场景 3:复杂工作流编排

使用 Code 模式,让模型生成 TypeScript 代码来编排多轮工具调用,实现精细控制的复杂工作流。

dsh web --mode code
# 输入:编写一个工作流:1) 克隆仓库 2) 运行测试 3) 如果测试失败,
# 分析错误日志并修复 4) 重新运行测试 5) 生成修复报告。

场景 4:自定义 Agent 预设开发

使用 Creator 模式,在运行时检查当前环境、实验 Cordis 插件、组合自定义运行模式。

dsh web --mode creator
# 输入:检查当前加载的所有插件,创建一个只包含数据库查询和文件分析工具的自定义预设。

场景 5:多 Agent 协作

利用子代理调度能力,将 Claude Code 和 Codex 作为子代理收编到 Harness 中,各司其职。

# multi-agent-profile.yaml
bundles:
  - name: claude-code-subagent
    version: latest
  - name: codex-subagent
    version: latest
    config:
      instances:
        - name: codex-frontend
          model: gpt-4o
        - name: codex-backend
          model: gpt-4o
dsh web --profile multi-agent
# 输入:开发一个全栈应用。前端任务交给 codex-frontend,
# 后端任务交给 codex-backend,架构设计由主 Agent 协调。

十、面试官高频面试题

题目 1:DeepSeek Harness 和传统 Agent 框架(如 LangChain)有什么本质区别?

参考答案:

传统 Agent 框架(如 LangChain)是"库"的思路——你调用它的 API 来组装 Agent,核心逻辑在你的代码里,框架提供的是工具函数和抽象类。DeepSeek Harness 是"运行时"的思路——它本身就是一个完整的 Agent 执行环境,所有能力以插件形式挂载到 Cordis 微内核上,通过配置组合而非代码调用来组装 Agent。

最本质的区别在于可组合性的粒度:LangChain 你可以换 Chain、换 Memory,但 Agent 的主循环、工具调用协议、会话管理是框架定死的;而在 Harness 中,连 Agent Loop、会话日志、沙箱策略都是可替换的插件。这使得 Harness 适合作为企业级 Agent 平台的底座,而 LangChain 更适合快速原型开发。

题目 2:解释一下 Cordis 的"时空可组合性"是什么意思?

参考答案:

Cordis 的设计论文《A Programming Paradigm for Spatiotemporal Composability》提出了两个维度的可组合性:

  • 空间可组合性(Spatial): 指在同一时刻,多个插件可以在共享上下文中并存,通过服务依赖和事件总线协作。插件之间没有硬编码的直接调用,而是通过内核提供的服务发现机制解耦。这意味着你可以在运行时添加或移除插件,不需要修改其他插件的代码。
  • 时间可组合性(Temporal): 指插件的生命周期是可管理的——加载、初始化、卸载都有明确的时序。插件卸载时,它的所有注册(工具、事件监听、服务)会被反向撤销,不留孤儿状态。这使得插件可以在运行时热插拔、热更新,系统状态始终保持一致。

简单来说,空间可组合性解决"插件之间怎么共存"的问题,时间可组合性解决"插件怎么安全地来和走"的问题。

题目 3:DeepSeek Harness 的"一切皆插件"有什么优缺点?

参考答案:

优点:

  1. 极致的灵活性——任何能力都可以替换,从模型到 UI 没有任何焊死的零件。
  2. 独立演进——插件之间解耦,官方插件和社区插件可以独立开发、独立发布、独立版本管理。
  3. 企业友好——可以用自定义插件替换沙箱、权限、审计等安全相关组件,满足企业合规要求。
  4. 生态可扩展——第三方开发者可以开发插件、Bundle、Profile,形成完整的生态系统。

缺点:

  1. 复杂性高——插件之间的依赖关系和事件流比单体架构更难理解和调试。
  2. 兼容性风险——大量开发者自由定制后,插件之间的兼容性可能出问题,生态碎片化是这个路线自带的风险。
  3. 性能开销——插件通过服务发现和事件总线通信,相比直接函数调用有一定的性能开销。
  4. 文档滞后——当前处于开发者预览版,每天几百次提交,文档和最佳实践还在快速变化中。

题目 4:如何在企业环境中安全地部署 DeepSeek Harness?

参考答案:

企业安全部署需要关注以下几个层面:

  1. 网络隔离: 将 Harness 部署在企业内网,模型 API 端点指向内部模型网关,所有数据不出域。禁止直接访问外部 API,必要时通过企业代理白名单访问。

  2. 沙箱隔离: 使用 read-only 模式作为默认沙箱策略,明确指定允许写入的目录。对于需要执行命令的场景,使用容器化沙箱(如 Docker 或 Landlock)限制系统调用。

  3. 权限控制: 开发自定义 RBAC 插件,按角色限制可使用的工具和可访问的资源。敏感操作(如删除文件、执行系统命令)需要人工审批。

  4. 审计日志: 利用 Harness 的追加式会话日志,将所有操作(工具调用、文件修改、命令执行)同步到企业审计系统(如 ELK、Splunk),支持事后追溯和合规审查。

  5. 插件治理: 建立企业内部插件仓库,对第三方插件进行安全审查后才能使用。禁止直接从公共 npm 安装未审核的插件。

  6. 数据加密: 会话存储使用加密数据库,API Key 使用企业密钥管理服务(KMS)管理,不硬编码在配置文件中。

题目 5:DeepSeek Harness 如何实现子代理调度?它和多 Agent 框架有什么不同?

参考答案:

DeepSeek Harness 的子代理调度是通过插件化的调度器实现的。主 Agent 可以将任务分解后分配给子代理执行,子代理可以是 Harness 自身的另一个 Agent 实例,也可以是外部 Agent 工具(如 Claude Code、Codex)通过 Profile Bundle 包装后接入。

调度机制的核心是 reportDelivery——子代理完成任务后及时回传结果并唤醒等待中的父任务,多 Agent 协作不需要干等。Codex 还支持非交互权限模式和多个命名实例,一个任务里可以同时挂好几个 Codex 干不同的活。

和传统多 Agent 框架(如 AutoGen、CrewAI)的不同在于:

  1. 传统多 Agent 框架的 Agent 都是框架内部定义的,而 Harness 可以收编外部的闭源 Agent 工具作为子代理。
  2. 传统框架的调度逻辑是框架定死的,而 Harness 的调度器本身是插件,可以自定义调度策略。
  3. Harness 的子代理共享同一个会话日志和轨迹系统,所有子代理的执行过程统一可追溯,而传统框架的 Agent 之间状态隔离,追溯困难。

题目 6:DeepSeek Harness 当前处于开发者预览版,生产环境使用有哪些风险?

参考答案:

  1. 破坏性变更: 官方明确警告"THERE WILL BE COMPATIBILITY-BREAKING CHANGES",插件 API、配置格式、数据结构都可能在后续版本中不兼容。RC.8 就有 SQLite 数据结构的不兼容变更,升级前需要备份数据。

  2. 文档滞后: 每天几百次提交的仓库,文档和实际代码之间存在差距。很多功能没有文档,需要读源码理解。

  3. 生态不成熟: 虽然 Star 数增长很快,但插件生态还在早期,很多企业需要的插件(如数据库工具、CI/CD 集成、监控告警)还需要自己开发。

  4. 遥测问题: 有开发者发现跑起来后本机会生成 UUID 随每次请求发送,遥测开关并不影响它。企业环境需要注意数据泄露风险。

  5. 稳定性: 开发者预览版意味着可能存在未发现的 Bug,长时间运行的稳定性没有经过生产环境验证。

建议: 生产环境可以在非关键业务中试点使用,锁定具体版本号,做好数据备份和回滚方案。等正式版发布后再大规模推广。


十一、总结与展望

DeepSeek Harness 是 Agent 领域的一个标志性项目。它不是又一个"套壳"的 AI 编程工具,而是一套从底层设计上就追求极致可组合性的 Agent 运行时。"一切皆插件"不是营销口号,而是真正落到了代码层面——连 Agent 主循环和会话日志都是可替换的插件。

它的出现填补了市场上的一个空白:企业级、开源、模型无关、深度可定制的 Agent 平台底座。在它之前,你要么用闭源的 Claude Code/Codex(绑模型、不能定制、数据出域),要么用 LangChain 这类库(需要自己写大量工程代码、没有运行时)。DeepSeek Harness 给了第三条路:一个可以装进企业内网、按企业规则运行、自由扩展能力的 Agent 运行时。

当然,它还很年轻。开发者预览版意味着破坏性变更、文档滞后、生态不成熟。但它的发展速度令人瞩目——64 天 12293 次提交、一周 16 万 Star、两天一个 RC 版本。如果这个节奏能保持,"我该用哪套 Harness 把 Claude Code、Codex、DeepSeek 一起用起来"这个问题,答案的天平会一天天倾斜。

Agent 时代的入口之争,这才刚开打。而 DeepSeek Harness,已经站在了牌桌上。


转载声明:本文为原创文章,如需转载,请联系作者获得授权,并注明出处。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐