聊天讨论 DeepSeek Harness 开源第一天我就上手了——和 Claude Code 的差距比想象中大

193577746(kyriewen) · 2026年08月14日 · 25 次阅读

昨晚 DeepSeek 把 Harness 开源了。GitHub 一天 5 万 star,评论区全在喊"Claude Code 杀手"。

我第一时间装上跑了一遍。结论先放这:它不是 Claude Code 的替代品,它是一个完全不同的东西。差距不是"谁更强",而是"压根不在同一个赛道"。

image.png

30 秒装完,但有坑

装它只需要一行命令:

npx @deepseek-ai/dsh web

等一两分钟下载完,终端会输出一个地址:http://127.0.0.1:3080/。打开浏览器就能用。

但第一个坑来了——Web 版默认把 Skills 功能关了,不报错,你根本不知道它没生效。 需要手动 patch 才能开启:

cat > ~/enable-skills.yml <<'EOF'
- id: skill-filesystem
  disabled: false
- id: tool-skill
  disabled: false
- id: skill-badge
  disabled: false
EOF

npx @deepseek-ai/dsh web --patch ~/enable-skills.yml

启动前还要确认 3080 端口没被占用:

lsof -nP -iTCP:3080 -sTCP:LISTEN

有输出说明上一个 dsh 实例还在跑,kill 掉再启动。

对比 Claude Code 的安装:npm install -g @anthropic-ai/claude-code,然后直接在终端里敲claude就能用。不需要浏览器,不需要 patch 配置文件,不需要检查端口。

第一个差距:Claude Code 是终端原生的,DSH 是 BS 架构的 Web UI。 这不是技术优劣的问题,是设计哲学的根本分歧。

四种模式,其实是四套插件组合

DSH 内置四种预设模式:

模式 定位 加载的插件集
标准模式 完整编程助手 Shell + 文件编辑 + 搜索 + UI 全家桶
PTC 模式 程序化工具调用 TypeScript 组合多步操作
极简模式 仅 Shell+ 文件编辑 适合模型基准测试
创造模式 动态加载插件 可创作全新模式

PTC 模式是最有意思的一个。它让你用 TypeScript 来编排工具调用:

// PTC模式下的多步操作编排
const result = await dsh.compose([
  tools.file.read('src/components/Dashboard.tsx'),
  tools.analyze.dependencies(),
  tools.refactor.extract({
    target: 'useChartData',
    type: 'custom-hook'
  }),
  tools.file.write('src/hooks/useChartData.ts')
]);

这段代码及其子调用会经过完整的安全流水线——Hook、审批、权限检查、沙箱、超时控制,不能绕过任何一层。

Claude Code 没有这个概念。它的工具调用是模型自主决定的,开发者无法用代码预编排一条确定性的执行路径。

这是第二个差距:DSH 给了开发者"确定性编排"的能力,Claude Code 给了模型"自主决策"的自由。

核心架构:一切皆插件

DSH 的设计哲学用一句话总结:Model + Harness = Agent。

什么是 Harness?它决定了:

  • 模型能看到什么(上下文管理)
  • 可以调用哪些工具(工具注册)
  • 如何组织上下文(会话策略)
  • 遇到错误怎么重试(容错逻辑)
  • 什么时候判断任务完成(终止条件)

同一个模型放进不同的 Harness,最终表现可能天差地别。

DSH 把这个理念推到了极致——连 Agent Loop 本身都是插件,可以替换。

┌─────────────────────────────────────────┐ │ DeepSeek Harness │ ├─────────────────────────────────────────┤ │ Cordis 微内核(只管插件加载/卸载/依赖) │ ├─────────────────────────────────────────┤ │ 插件层(全部可替换): │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ Model │ │ Tools │ │ Skills │ │ │ └────────┘ └────────┘ └────────┘ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │Session │ │Sandbox │ │Storage │ │ │ └────────┘ └────────┘ └────────┘ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ Loop │ │Schedule│ │ UI │ │ │ └────────┘ └────────┘ └────────┘ │ └─────────────────────────────────────────┘

对比 Claude Code:模型固定 (Claude)、工具固定 (Bash/Read/Write/Edit 等)、Loop 不可替换、UI 就是终端。你能扩展的只有 MCP Server 和 Skills。

第三个差距:DSH 的可替换边界从"工具层"下沉到了"整个运行时",Claude Code 的可替换边界止步于"工具和技能"。

工具调用流水线:这个设计确实精妙

DSH 的工具调用不是简单的"模型说调就调"。每次调用会经过一条完整的流水线:

请求 → Hook → 审批 → 权限检查 → 沙箱 → 超时控制 ↓ UI 渲染 ← 记录 ← 结果改写 ← 执行 ←──────────┘

开发者可以在任何环节插入自己的插件,不需要修改工具本身,也不需要改 Agent Loop。

举个前端场景:你想让所有文件写入操作都先经过 ESLint 检查:

// 注册一个文件写入的前置Hook插件
export default class EslintGuardPlugin {
  static inject = ['tools'];

  constructor(ctx) {
    ctx.before('tool/file-write', async (event) => {
      const { path, content } = event.params;
      if (path.endsWith('.ts') || path.endsWith('.tsx')) {
        const result = await eslint.lintText(content, { filePath: path });
        if (result[0].errorCount > 0) {
          event.prevent();
          return { blocked: true, errors: result[0].messages };
        }
      }
    });
  }
}

Claude Code 要实现同样的效果?写一条 Hook 规则在settings.json里,能做到"拦截",但粒度远不如这个——你没法拿到工具调用的参数做条件判断,更没法改写结果。

Model Agnostic:不锁模型

DSH 默认支持 DeepSeek 自家模型,但可以切换到近 40 家模型商的接口。配置方式:

# $DSH_HOME/settings.yaml
providers:
  - name: anthropic
    kind: openai-compatible
    base_url: https://api.anthropic.com/v1
    model: claude-sonnet-4-20250514
    api_key_env: ANTHROPIC_API_KEY
  - name: openai
    kind: openai
    base_url: https://api.openai.com/v1
    model: gpt-4o
    api_key_env: OPENAI_API_KEY

也就是说,你可以用 Claude 的模型跑在 DSH 的 Harness 里。这个组合有没有比原生 Claude Code 更好?理论上不会——因为 Claude Code 的 Harness 是为 Claude 模型专门优化的(比如 system prompt、context 管理策略)。但它给了你一个"对照实验"的环境。

Claude Code 则完全锁定 Claude 模型,没有切换选项。这不是缺点——专用系统的上限永远高于通用系统的上限。 Claude Code 针对 Claude 模型做了大量 Harness 层的优化,这些优化在通用框架里做不到。

实际体验:写一个 React 组件

我让 DSH 的标准模式(默认 DeepSeek V4-Pro)写一个带虚拟滚动的表格组件:

DSH 的执行过程:

  1. 读取项目结构 → 分析依赖
  2. 生成组件代码
  3. 写入文件
  4. (没有自动运行类型检查)
  5. (没有自动验证渲染结果)

同样的任务用 Claude Code:

  1. 读取项目结构 → 分析依赖 → 读取现有组件风格
  2. 生成组件代码
  3. 写入文件
  4. 自动运行tsc --noEmit检查类型
  5. 发现类型错误 → 自动修复 → 再次检查
  6. 启动 dev server → 验证渲染

差距在哪?Claude Code 有一个成熟的"自我纠错循环"——写完代码会自动验证,出错会自动修。 DSH 目前的 Agent Loop 还没有这么深度的自我验证机制,更多是"你让我做什么我就做什么"。

这是 v0.1 developer preview 的现实。DSH 团队自己也说了:当前仍有大量细节需要打磨。

真正的对比维度

不是"谁代码写得好",而是定位完全不同:

维度 DeepSeek Harness Claude Code
定位 可组装的 Agent 运行时底座 成熟的 AI 编程助手
目标用户 Harness 开发者/框架作者 想用 AI 写代码的程序员
模型 40+ 家可切换 锁定 Claude
可替换范围 整个运行时(含 Loop/UI/Session) 工具层(MCP/Skills)
Agent Loop 插件,可替换 内置,深度优化
安装门槛 Node.js + npx + 端口配置 npm install + 一个命令
UI 形态 Web UI(3080 端口) 终端原生
成熟度 v0.1 developer preview 生产级,日活百万 +
自我纠错 基础 深度(类型检查 + 运行验证)
开源协议 MIT 闭源

我的判断

短期(6 个月内):Claude Code 仍然是日常编程的最优解。 没有哪个 v0.1 的框架能在开箱体验上打过一个打磨了一年多的成熟产品。如果你明天要交项目,用 Claude Code。

中长期(1-2 年):DSH 的架构设计可能改变游戏规则。 "一切皆插件"的底座一旦生态成型(Cordis 已有 4000+ 社区插件的积累),会出现 Claude Code 做不到的玩法——比如针对你们团队的代码规范训练一个专属的 Agent Loop 插件,比如把代码审查、部署、监控串成一条完全自定义的流水线。

最值得关注的信号: DSH 发布的同时,DeepSeek 把 V4-Pro 模型的价格从 8/17 开始上调(输出峰值 27 元/百万 tokens)。这意味着 DeepSeek 要用 Harness 的免费开源生态来反哺模型的付费收入——和 OpenAI 用 ChatGPT 免费版拉用户、Codex 收钱的逻辑一模一样。

如果你是普通前端开发者: 今天不用急着换。但装一个玩一下,理解"Harness"这个概念——Model + Harness = Agent。这个公式比任何具体工具都重要,因为它决定了未来你会怎么选择和组合 AI 编程工具。

快速上手速查表

步骤 命令/操作
前置要求 Node.js v18+
快速启动 npx @deepseek-ai/dsh web
全局安装 npm install -g @deepseek-ai/dsh
源码安装 git clonepnpm installpnpm run buildpnpm dsh web
访问地址 http://127.0.0.1:3080/
首次配置 填入 DeepSeek API Key
开启 Skills 创建 patch yaml → --patch参数启动
切换模型 设置页面 或 $DSH_HOME/settings.yaml
切换模式 Web UI 顶部下拉选择
查看插件 设置 → 插件管理 → 启用/禁用
Python SDK pip install deepseek-harness-sdk(内置运行时,无需 Node.js)

你装了吗?你觉得 DSH 的"一切皆插件"是真正的架构创新,还是过度设计?评论区说说你的判断。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号