# 第 1 章:认识 DeepSeek Harness > 本章目标:从一个完全零基础的角度,建立对 DeepSeek Harness(dsh)的完整认知——**它是什么、为什么值得学、和主流 Agent 有什么区别、什么时候用它**。读完本章,你不需要任何前置知识,就能理解 dsh 在整个 AI 开发工具版图中的位置。 ## TL;DR(本章核心,30 秒版) 1. **dsh = Agent 的乐高底座**:官方开源(MIT)的运行时,一切能力都是插件,你可以自由拼装 2. **harness = 模型外面的工程层**:会话、工具、上下文、循环控制——让模型在仓库里真正干活 3. **和 Claude Code 的区别**:Claude Code 是"整车",dsh 是"底座 + 积木"——可定制面完全不同 4. **生态窗口**:2026-08-13 开源,中文教程此前为零——现在入场是早期 5. **谁该用**:要深度定制/玩生态/跑 CI 的开发者;要开箱即用的选 Claude Code
本章导航 - [1.1 先建立三个直觉](#11-先建立三个直觉) - [1.2 官方定义与核心事实](#12-官方定义与核心事实) - [1.3 架构是怎么"一切皆插件"的](#13-架构是怎么一切皆插件的) - [1.4 DSH 与主流 Agent 的全面对比](#14-dsh-与主流-agent-的全面对比) - [1.5 什么时候用 dsh(选型决策)](#15-什么时候用-dsh选型决策) - [1.6 常见问题(FAQ)](#16-常见问题faq)
## 1.1 先建立三个直觉 在讲技术之前,先用三个类比建立直觉: **① dsh 是什么?——它是"Agent 的乐高底座"。** 想象乐高:官方提供底板和标准积木(运行时 + 核心插件),你可以自由拼装(加插件、换界面、改行为)。对比之下,Claude Code 更像"一辆整车"——很好开,但你想改装发动机得找官方。 **② 为什么需要"harness"这个词?——它是"套在模型外面的工程层"。** 一个模型(DeepSeek V4)本身只会"回复文字"。要让它在你的代码仓库里干活(读文件、跑命令、改代码、多轮循环),外面需要一层工程:会话管理、工具调用、上下文控制、错误恢复。**这层工程就叫 harness**。dsh 是 DeepSeek 官方把这层工程开源出来的产品。 **③ 为什么 2026 年才开源?——因为 Agent 进入"可编程时代"。** 2025 年是"模型能力竞赛"(谁能生成更好的代码);2026 年进入"Agent 工程竞赛"(谁能更好地组织模型干活)。DeepSeek 开源 harness 的战略意图:**把"如何组织 Agent"这件事变成开放生态**——像当年 Android 开源改变手机生态一样。 ## 1.2 官方定义与核心事实 **一句话定义**:DeepSeek Harness(`dsh`)是 DeepSeek 官方开源的 Agent 运行时,采用"一切皆插件"(everything is a plugin)架构,基于 Cordis 插件容器构建。 | 事实 | 内容 | |---|---| | 开源时间 | 2026-08-13 | | 协议 | MIT(可商用、可改) | | 语言 | TypeScript(Node.js ≥ 22) | | 版本线 | `0.1.0-rc.x`(当前 rc.6,迭代快,官方明示"将有破坏性变更") | | 底层 | [Cordis](https://github.com/cordiverse/cordis)(可组合插件容器) | | 内置形态 | `web`(Web UI)+ `headless`(一次性 CLI) | | 官方定位 | 官方 README 原话:"everything is a plugin" | ## 1.3 架构是怎么"一切皆插件"的 ```mermaid flowchart TB subgraph Profile["你的 profile(可启动形态)"] P1["dsh web(Web UI)"] P2["dsh headless(CLI)"] P3["自定义 profile(TUI/桌面/机器人…)"] end subgraph Plugins["能力层(每个能力 = 一个插件)"] L["llm:模型接入 + 推理档位"] T["tools:写文件/终端/搜索/技能"] S["session:会话持久化"] C["client:界面(web/终端)"] ST["settings:用户配置"] end subgraph Cordis["Cordis 插件容器"] D["依赖注入 · 事件 · 生命周期"] end Profile --> Cordis Cordis --> Plugins Plugins --> L Plugins --> T Plugins --> S Plugins --> C Plugins --> ST ``` ### 分层视图 ```text ┌──────────────────────────────────────────────┐ │ 你的 profile(可启动形态) │ │ = bundle 栈 + 你的补丁层 │ │ · dsh web(Web UI 形态) │ │ · dsh headless(CLI 形态) │ │ · 你的自定义 profile(TUI/桌面/机器人…) │ ├──────────────────────────────────────────────┤ │ 能力层(每个能力 = 一个插件) │ │ · llm:模型接入(DeepSeek V4 系 + 推理档位) │ │ · tools:工具(写文件/终端/搜索/技能…) │ │ · session:会话持久化 │ │ · client:界面(web 浏览器半 / 终端半) │ │ · settings:用户配置 │ │ …(60+ 官方包) │ ├──────────────────────────────────────────────┤ │ Cordis 插件容器:加载、依赖注入、事件、生命周期 │ └──────────────────────────────────────────────┘ ``` ### 三个必须懂的概念 **① profile(可启动形态)** 一个 profile = `$DSH_HOME/profiles//` 目录,包含: - `package.json`:插件依赖 + 清单(`dsh.profile.bundles` 指定 bundle 顺序) - `cordis.patch.yml`:你的补丁层(挂载/覆盖插件) 启动时按顺序合成:内置 bundle → profile patch → 全局 patch → `--patch` 覆盖。 **② host 半 / client 半(一个插件,两副面孔)** | 半边 | 跑在哪 | 干什么 | |---|---|---| | host 半 | Node 进程 | 工具、服务、事件、文件系统——`apply(ctx)` 注册 | | client 半 | 浏览器(web profile) | UI、交互——`package.json` 的 `dsh.client` 声明 | 一个 npm 包可同时携带两半(`exports["."]` + `exports["./client"]`)。 **③ 扩展点(extension point)** 官方原则:"**Plugins, not loop changes**"——改行为优先用官方钩子,不要 fork 核心。常用扩展点(后续章节逐一实战): - `agent/request` waterfall:每次模型请求前改配置(工具调用提速插件的挂点) - `conversationEvents.register`:订阅/注入对话事件 - `ctx.slots.inject`:在界面槽位注入 UI - `settings` 服务:注册用户可配置项 ## 1.4 DSH 与主流 Agent 的全面对比 ### 能力矩阵(核心六家) | 维度 | **dsh** | Claude Code | OpenAI Codex | OpenCode | Gemini CLI | Kimi CLI | |---|---|---|---|---|---|---| | 开源 | ✅ MIT | ❌ 闭源 | ❌ 闭源 | ✅ MIT | ❌ 闭源 | ❌ 闭源 | | 模型绑定 | 模型无关(官方适配 DeepSeek) | Claude 系 | GPT 系 | 任意 | Gemini 系 | Kimi 系 | | 官方运行时 | ✅(web + headless + 插件生态) | 产品即运行时 | 产品即运行时 | 客户端(无官方后端) | 产品即运行时 | 产品即运行时 | | **插件体系** | **官方级:一切皆插件,60+ 官方包** | 配置/钩子为主 | 配置为主 | 配置为主 | 无 | 无 | | 自定义界面 | ✅(client 半 = 自由 UI) | ❌ | ❌ | 部分(TUI 固定) | ❌ | ❌ | | 自动化/CI | ✅ headless profile | ✅ | ✅ | ✅ | ✅ | ✅ | | TUI | 插件可做(官方未内置) | ✅ 内置 | ✅ 内置 | ✅ 内置 | ✅ | ✅ | | 生态阶段 | 零日起步(2026-08-13) | 成熟 | 成熟 | 成熟 | 成熟 | 早期 | | 适合谁 | **想深度定制 + 玩生态的开发者** | 开箱即用 | 开箱即用 | 熟悉 OpenCode 用户 | Google 生态 | Kimi 生态 | ### 更多主流 Agent 速览(一句话定位) | Agent | 一句话定位 | 与 dsh 的核心差异 | |---|---|---| | **Cursor** | IDE 内嵌的 AI 编码助手(Composer/Agent 模式) | 深度绑定 IDE;dsh 是独立运行时,可配任意编辑器/终端 | | **Amp** | 终端原生、代理优先的 AI 编码 agent | 轻量终端形态;dsh 多了官方后端 + 插件生态 | | **Devin** | 云端"AI 软件工程师"(独立任务/浏览器/工作区) | 托管云端;dsh 本地运行、数据不出本机 | | **Windsurf** | IDE 内嵌编码 agent(Flow/Agent 模式) | 同 Cursor,绑定 IDE | | **Aider** | 开源、Git 优先的终端 pair-programming agent | 专注"改代码 + git";dsh 是通用运行时 | | **Qwen Code** | 阿里通义 coding agent CLI(内置 DeepSeek provider) | 主打 Qwen 模型;dsh 官方适配 DeepSeek 且插件化 | | **GLM CLI** | 智谱 coding agent CLI | 主打 GLM 模型;dsh 模型无关 + 插件生态 | | **Grok CLI** | xAI 终端 coding agent | 主打 Grok 模型 | > 结论:主流 agent 大致分三类——**IDE 内嵌**(Cursor/Windsurf)、**终端编码助手**(Codex/OpenCode/Aider/Qwen Code/GLM CLI/Grok CLI)、**运行时/平台**(dsh/Devin)。dsh 是目前唯一"官方开源 + 模型无关 + 插件生态"的运行时型选手。 ### 通俗文字版:每家是什么、适合谁、和 dsh 差在哪 **Claude Code(Anthropic)**:目前最成熟的终端编码助手。开箱即用、TUI 体验好、生态成熟——**适合想马上干活的人**。缺点:闭源、绑定 Claude 模型、定制空间有限(只能配置/钩子)。和 dsh 比:dsh 能改的东西它改不了(界面/工具链/后端),但 dsh 的"开箱即用"还比不上它。 **OpenAI Codex**:OpenAI 的终端 agent。工程能力强、GPT 系模型加持。同样闭源绑定。和 dsh 比:能力线接近,但 dsh 开源可自改。 **OpenCode**:开源、终端、可配任意模型——和 dsh 最像的"邻居"。关键差异:**OpenCode 没有官方后端运行时**(它是客户端 + 配置),dsh 有官方 bundle + 60+ 包 + 插件生态,可定制面更深。**如果你是 OpenCode 用户,迁移 dsh 的成本很低**(概念类似)。 **Gemini CLI**:Google 的终端 agent。长上下文/多模态是强项(Gemini 模型优势)。绑定 Google 生态。 **Kimi CLI**:月之暗面的终端 agent。中文场景好、Kimi 模型加持。生态早期。 **Cursor / Windsurf**:IDE 内嵌型——它们的优势是"编辑器里就用",劣势是**你被锁在 IDE 里**。dsh 是独立运行时,可以在任意环境(终端/CI/服务器/未来的 TUI)用同一套 agent 能力。 **Devin**:云端工程师——你给它任务,它在云上干活。优势是托管、有浏览器;劣势是**数据出本机**、费用高。dsh 本地运行,隐私可控。 **Aider**:老牌开源、Git 优先、轻量。适合"只想让 AI 帮改代码"的极简主义者。dsh 是更重的运行时——如果你只需要 Aider 做的事,Aider 够用;如果你想做 Agent 系统,dsh 是底座。 **Qwen Code / GLM CLI / Grok CLI**:各家模型的终端 agent——模型绑定是它们的天然属性。dsh 模型无关(官方适配 DeepSeek,可接 OpenAI 兼容),更适合想"模型可换"的人。 ### 一张图理解 dsh 的差异化位置 ```text 定制深度(可改的东西) 高 │ dsh(运行时 + 插件生态) │ │ 自建框架(LangGraph 等) │ │ OpenCode(客户端 + 配置) │ 低 │ Claude Code / Codex / Gemini / Kimi(产品即运行时) └────────────────────────────────────── 低 开箱即用程度 高 ``` - **右上**:dsh——可定制面最大,但"开箱即用"需生态补足 - **左上**:自建框架——完全自由但全要自己搭 - **右下**:产品型 agent——最好用但最封闭 ### 案例对比:同一个任务,不同的打开方式 **任务**:让 Agent 在仓库里"找到所有调用某个函数的地方,并统一改一个参数"。 | Agent | 你会怎么做 | 体验 | |---|---|---| | **dsh(web)** | `dsh web` → 输入指令 → 模型用 Grep/Read/Edit 工具完成 | Web UI + 右侧插件侧边栏(可加 Git 面板) | | **dsh(headless)** | `dsh --profile headless "任务"` → 打印结果退出 | **可进 CI**:非零退出码即失败 | | Claude Code / Codex / OpenCode / Kimi | 打开 TUI → 输入指令 → 模型完成 | 终端 TUI,开箱即用 | | Cursor / Windsurf | 在 IDE 里选中代码 → 输入指令 | IDE 内嵌体验 | | Devin | 网页里建任务 → 云上完成 | 托管、有浏览器、数据出本机 | **差异点在哪**:同样一句话,**dsh 让你多了一个选择维度——界面和工具链都可以换**。其他 Agent 的界面/工具链是官方定的,dsh 是你可以拼的。 ### 案例对比:真实工作流(我们的实测) 以下是我们**真实开发 dsh 生态**时的对比观察(2026-08-13): | 场景 | dsh 实测 | 备注 | |---|---|---| | 简单文件创建 | 冷启动 ~110s(首轮含上下文注入)→ 热缓存 ~1s | 思考档位是主要变量 | | 50 步工具链任务 | LLM 耗时 10m+,工具调用 9m+ | 每步思考累计——**提速插件价值在此** | | 插件开发 | 从零到可运行插件:1 天(含测试+实机验证) | 扩展点清晰(agent/request waterfall) | | 与 Claude Code 同任务 | dsh 配 V4-Flash 成本约为 Claude 的 1/10~1/30 | 价格维度 dsh 生态显著占优 | > 同模型 × 不同 Agent 的严格对比见 [Benchmark 附录](./benchmark.md)(omp 36s / dsh 85s / opencode 114s)。 ## 1.5 什么时候用 dsh(选型决策) **✅ 推荐入场**: - 你要做**模型无关、界面可选、行为可改**的 Agent 底座 - 你想成为 **dsh 生态早期贡献者**(先发优势,官方点名鼓励) - 你要在**服务器/CI** 跑 Agent(headless profile) - 你对**成本敏感**(DeepSeek 模型 + 开源生态) **⏸ 暂时观望**: - 只要"开箱即用的编码助手"——Claude Code 等更成熟 - 不能接受 rc 阶段的破坏性变更——等 `0.1.0` 正式版 - 重度依赖某模型独有能力(如 Claude artifacts)——模型绑定场景 ## 1.6 常见问题(FAQ) **Q1:dsh 是模型吗?** 不是。dsh 是运行时/框架,模型通过 `llm` 插件接入(官方适配 DeepSeek V4 系,理论上可接其他 OpenAI 兼容模型)。 **Q2:dsh 和 OpenCode 什么关系?** 都是开源 Agent 客户端,但定位不同:OpenCode 是"客户端 + 配置",dsh 是"运行时 + 官方插件生态"(有官方后端 bundle 与 60+ 官方包)。dsh 更底层、可定制面更大。 **Q3:没写过 TypeScript 能玩吗?** 能。使用(第 2 章)不需要编程;写插件(第 4 章)需要基础 TS,但教程给完整代码。 **Q4:dsh 稳定吗?** 当前 rc 阶段(0.1.0-rc.6),迭代快、有破坏性变更。生产核心依赖建议等正式版;玩生态现在正是时机。 **Q5:为什么现在学 dsh 值得?** 生态零日 + 官方点名鼓励社区 + 中文教程空白——**每个早期生态都有"第一个吃螃蟹的人"的红利**,现在是入场窗口。 --- **下一章**:[第 2 章:五分钟快速上手](./02-quickstart.md) —— 装起来,跑起来。 --- ## 动手练习(检验你是否真懂了) 1. **一句话测试**:向不懂技术的人解释"dsh 是什么"(不能用"Agent/harness/插件"这些词) 2. **对比测试**:说出 dsh 和 Claude Code 的 3 个本质区别(不是功能列表) 3. **选型测试**:给下面场景选工具并说明理由: - 场景 A:想要开箱即用的终端编码助手 - 场景 B:想做一个"模型无关、界面自定义"的公司内部 Agent 平台 - 场景 C:想在 CI 里每天自动跑一个数据分析任务 4. **架构测试**:画出"profile → 插件 → 扩展点"的关系图(不看原文) 5. **FAQ 测试**:回答"dsh 是模型吗?""没写过 TS 能玩吗?" > 完成练习后,进 [第 2 章](./02-quickstart.md) 动手装起来。