搜 索

DeepSeek Harness 从入门到放弃

  • 4阅读
  • 2026年08月29日
  • 0评论
首页 / 爬虫/工具 / 正文

2026 年 8 月 13 日,DeepSeek 又上了一次热搜。

这次大家点进去,一边期待新模型、新跑分、新的"价格屠夫",一边已经准备好了骂美国 AI 公司的弹幕。结果翻了半天:没有新模型。 发布的是一个叫 DeepSeek Harness 的东西,简称 dsh,MIT 协议,npm 一行命令就能跑。

然后它就火了。媒体报道开源头 12 小时 GitHub star 涨到 5 万左右,社区插件仓库一天内冒出几百个。我的第一反应是:一个"脚手架"凭什么?

于是又一个"从入门到放弃"系列诞生了。


一、先搞清楚:它不是模型

很多人搜 "DeepSeek Harness",期待的是模型评测,看到的却是一堆 npm、Node.js、插件之类的词,当场懵掉。

DeepSeek 团队自己给了一个公式:

Model + Harness = Agent

模型只会生成文本。要让它真正干活,比如读写文件、跑 shell 命令、搜网页、维护计划、处理报错、判断任务做完没有,都需要一层"马具"把它套到真实世界里。这层马具就是 harness。

flowchart LR M["🧠 Model
只负责推理"] --> H["🐴 Harness
负责其余一切"] H --> F[文件读写] H --> T[终端执行] H --> W[网页搜索] H --> C[上下文管理] H --> P[任务规划] H --> S[调用其他 Agent] F & T & W & C & P & S --> A["🤖 Agent
能干活的东西"]

你天天用的 Claude Code、Codex,本质上也是"模型 + harness",只是它们把 harness 做成了打磨好的闭源产品。DeepSeek 这次是把 harness 这一层单独拎出来开源了。

顺便说一句,它不绑定 DeepSeek 模型。默认跑 DeepSeek V4.1 Flash,也可以通过 OpenAI 兼容接口接别家的模型。


二、一切皆插件:连主循环都能拔

dsh 的核心主张写在 README 第一行:Everything is a plugin。

一般框架说"支持插件",意思是有个坚固的内核,外面留几个扩展点让你挂工具。dsh 不一样,它没有特权内核。下面这些全是插件:

  • Agent 主循环(loop)
  • 模型适配器
  • 工具注册表
  • 技能(skills)
  • 会话存储
  • 沙箱
  • 调度
  • 甚至 Web UI 本身

底层引擎叫 Cordis,设计来自北大和 DeepSeek 合作的论文《A Programming Paradigm for Spatiotemporal Composability》(时空可组合性的编程范式)。名字很学术,核心思想其实就两句话:

  1. 注册即副作用:插件往运行时里注册的任何东西,都会被记成一个"副作用"。
  2. 卸载即回滚:插件卸载时,它带来的所有副作用都会自动撤销,不留脏状态。
flowchart TB subgraph Cordis["Cordis 运行时(没有特权内核)"] direction TB L[agent-loop 插件] LLM[llm 适配器插件] TL[tools 插件] SK[skills 插件] SE[session 插件] SB[sandbox 插件] PL[plan / goal 插件] UI[web-ui 插件] MCP[mcp 插件] end P1["Preset: Standard"] -.选择可见能力.-> Cordis P2["Preset: Code"] -.选择可见能力.-> Cordis P3["Preset: Minimal"] -.选择可见能力.-> Cordis P4["Preset: Creator"] -.选择可见能力.-> Cordis

这里有个很漂亮的职责分离:插件负责"有什么能力",预设(preset)负责"这个 Agent 能看到哪些能力"。

做过权限系统的同学应该会心一笑:这就是把"能力注册"和"授权策略"拆成两层。以前我们在 prompt 里苦口婆心地写"请不要删除生产数据库",现在可以直接不给它这个能力。


三、四个预设:同一个内核,四种性格

dsh 自带四个 preset,每个加载的插件组合不同:

预设能力适合场景
Standard完整编程 Agent:文件编辑、shell、搜索、技能、规划、子 Agent、工作流日常默认
Code(PTC)Standard + Code Mode SDK,模型写 TypeScript 程序来组合多步工具调用复杂编排,但副作用会成倍放大
Minimal只有持久 bash + str_replace_editor复现跑分
CreatorStandard + 运行时检视,Agent 能在对话中途装、换、删插件开发插件、做实验

两个值得注意的点:

  • Minimal 就是跑分用的那个考场。 DeepSeek V4 Flash 在 Terminal-Bench 2.1 上的 82.7 分,官方文档写明是在 dsh 的 minimal 模式下跑出来的。以前各家的 agentic 跑分,考场都是黑盒;现在考场开源了,谁都能复现,也谁都能打脸。
  • Creator 模式下,Agent 能改装自己。 媒体说的"Agent 还能改装自己"就是指这个。听起来很赛博朋克,但请把它当实验环境,别当生产环境。
flowchart LR Q{你要干嘛?} Q -->|日常写代码| S[Standard] Q -->|让 Agent 自己写编排脚本| C[Code / PTC] Q -->|复现 benchmark| M[Minimal] Q -->|开发 / 调试插件| CR[Creator]

四、Trajectory:Agent 的 DevTools

如果只能挑一个功能来夸,评测圈几乎一致选 Trajectory。

dsh 的每次运行都会写入一份只追加(append-only)的会话日志,格式是 zstd 压缩的 JSONL,每条事件结构统一:type、seq、time、data。模型看到的所有东西都会被记下来:系统提示词、推理过程、工具调用和结果、子 Agent 调度、上下文注入。

更关键的是,这份日志能续跑、分叉、搜索、回放。

sequenceDiagram participant U as 你 participant A as Agent (原始运行) participant F as Agent (分叉运行) U->>A: 任务:重构支付回调模块 A->>A: turn/start A->>A: tool/call: read_file A->>A: tool/call: bash (测试挂了) A->>A: 绕弯子绕了 20 轮... Note over U,A: 发现第 3 步起就跑偏了 U->>F: 从第 3 步 fork,改一条规则 F->>F: tool/call: bash (测试通过) F->>F: turn/end Note over U,F: 两次运行并排回放对比

以前 Agent 做歪了,我们的操作是:叹气,清空上下文,换个说法重新问一遍,然后祈祷。现在可以精确定位到它从哪一步开始跑偏,只改那一处,再跟原来的运行并排对比。

调 Agent 终于从玄学变成了对照实验。


五、为什么呼声这么高

我总结了四个原因,叠在一起就成了爆款:

1. 品牌加跑分的信任背书。 DeepSeek 自家模型的 agentic 成绩就是在这个 harness 里跑出来的。开源 harness 等于开源了"考场",这是一种很硬气的姿态。

2. 戳中了 Agent 开发者的集体痛点。 2026 年做 Agent 的团队大概都经历过:换个模型,重写一遍工具注册;换个场景,重写一遍主循环;想加个断点续跑,发现状态散落在七个模块里,谁也不敢动。loop、工具调度、上下文、session、沙箱,每家都在重复造轮子,还造得各不相同。dsh 的回答是:全拆成标准件。

3. 透明度是刚需。 有篇分析总结得很到位:LangChain 那一代框架是为了降低开发 Agent 的复杂度,dsh 是为了降低调优 Agent 体验和成本的复杂度。插件拆得越细,黑盒越少,优化空间越大。

4. 极度开放。 MIT 协议,不绑模型,而且它的子 Agent 提供方里居然有 Codex 和 Claude Code。也就是说,dsh 可以把活派给它的直接竞品。这种"我当包工头,你们都来给我打工"的格局,确实很 DeepSeek。


六、冷水时间:入门之后,放弃之前

按照本系列的优良传统,夸完了就该泼冷水了。

1. Token 开销不小。 有人实测,只是让它回复一句"PONG",首次请求就吃掉了约 13,467 个输入 token。这些都是默认系统提示词、工具 schema、自动注入的仓库规则和技能摘要。一个简单的写文件任务产生了 61 条会话事件。全程可观测是有代价的,你能看清每一分钱花在哪,但钱确实花了。

2. 预发布到底。 截至 10 月初,npm 上最新的是 0.2.0-rc.2,所有版本都是 prerelease。README 用大写字母警告:会有破坏兼容性的变更。今天写的插件,下个月可能就跑不起来了。

3. 有"过度抽象"的争议。 有人批评,把 Agent Loop 和 Memory 这种性质完全不同的组件压平成可以随意装卸的插件,是一种过度抽象。这个争论我觉得两边都有道理:微内核架构从诞生起就伴随着"灵活性 vs 复杂度"的争论,Linux 和 Minix 当年也吵过。

4. 粗糙的边角还很多。 Windows MSYS2 下静默失败、热重载缓存不更新、GitHub Issues 被关闭(官方让大家去 Discussions 反馈),MCP 也还不是默认路径。开箱体验跟 Claude Code、Codex 这些打磨好的产品比,还有明显差距。

一句话:它现在更像一副好骨架,而不是一个成品。


七、范式变革:从"Agent 产品"到"Agent 运行时"

抛开热度,dsh 真正值得讨论的是它代表的方向。

flowchart TB subgraph Old["产品式 Agent(Claude Code / Codex)"] direction LR O1[闭环打磨] --> O2[固定 loop] O2 --> O3[固定工具集] O3 --> O4[有限定制] end subgraph New["运行时式 Agent(dsh)"] direction LR N1[微内核] --> N2[loop 可替换] N2 --> N3[能力即插件] N3 --> N4[preset 授权] N4 --> N5[全程可回放] end Old -->|竞争焦点迁移| New

我认为会有三个变化:

1. 竞争焦点从模型转向生态。 类比一下:VS Code 赢的不是编辑器本身,而是插件市场。dsh 的长期赌注也是让 harness 而不是模型成为生态中心。截至 10 月初,GitHub 上打了 dsh-plugin 标签的仓库已经过万。

2. 能力和授权分离会成为标配。 "装了什么"和"能用什么"分成两层配置,这对企业级 Agent 太重要了。对金融行业的人来说,能在配置层面审计一个 Agent 的能力边界,比在 prompt 里写一百条"禁止"靠谱得多。

3. 跑分必须标注 harness。 同一个模型,换个 harness、换个 preset,成绩就可能差一大截。以后看到任何 agentic 跑分,第一个问题应该是:"在哪个 harness 的哪个 preset 下跑的?"拿 A 模型的 Standard 成绩去比 B 模型的 Minimal 成绩,就是在比两个变量。

但请冷静:产品式 Agent 不会因此消失。 大多数人要的是开箱即用,而不是一副需要自己组装的骨架。两者更可能长期共存:成熟产品负责好用,运行时负责可控和可定制。


八、支付人的视角:这不就是 Saga 吗?

写支付系统的人看 Cordis 的设计,会有一种强烈的既视感。

flowchart LR subgraph Saga["支付 Saga"] direction TB S1[扣款] -->|失败| C1[退款补偿] S2[记账] -->|失败| C2[冲正补偿] S3[通知清算] -->|失败| C3[撤销补偿] end subgraph Cordis["Cordis 插件"] direction TB R1[注册工具] -->|卸载| U1[注销工具] R2[挂载事件] -->|卸载| U2[解除监听] R3[注入上下文] -->|卸载| U3[移除注入] end

Saga 的核心是每一步正向操作都自带补偿操作,所以长事务失败了也能回到一致状态。Cordis 的核心是每一次注册都是一个可撤销的副作用,所以插件卸载后运行时也不留脏状态。

两者是同一个思想在不同领域的投影:组合越复杂,越需要每个单元都能干净地撤销自己。

这也解释了为什么 dsh 敢让 Agent 在 Creator 模式下中途改装自己:换零件不会把整台机器搞坏。我们做支付系统时那句老话,"没有回滚方案的变更不准上线",在这里被做成了框架级的约束。


九、实战:怎么用 dsh 组织自己的工作

9.1 先跑起来

# 需要 Node.js 22.19+
npx @deepseek-ai/dsh web
# 默认打开 http://127.0.0.1:3080

进去之后在 Settings → Models 填 API key,然后必须选一个工作区,否则输入框是锁着的。Mac 和 Windows 用户也可以直接装 10 月初发布的桌面版(0.2.0-rc.2);Linux 用户老老实实走 npm。

9.2 先划红线

做金融的同学请把这句话抄三遍:公司代码在没有确认合规之前,不要接任何会把数据发往外部 API 的 Agent。

dsh 在本地运行,但模型调用会出网。数据出境、供应商审批这些问题,先找安全和合规部门拿到明确口径。个人项目随便折腾,生产代码请克制。

9.3 把它当"内核",而不只是编程助手

这是 dsh 跟 Claude Code 最不一样的地方。它有五个入口:

flowchart TB DSH((dsh 运行时)) DSH --- W["Web UI
日常交互"] DSH --- D["桌面 App
开箱即用"] DSH --- H["Headless
dsh --profile headless '任务'"] DSH --- PY["Python SDK
JSON-RPC stdio 驱动"] DSH --- DC["--dump-config
打印插件树"] H --> CRON[定时任务 / CI] PY --> APP[你自己的应用]

如果你正在写自己的任务自动化工具,与其从零造 loop、工具调度和会话持久化,不如认真评估一下:把 dsh 当执行内核,自己的应用只负责任务编排和触发。 headless 模式适合定时任务,Python SDK 适合嵌进已有的数据流水线。

9.4 用 Trajectory 沉淀工作规则

Agent 做歪了,别急着清空重来:

  1. 打开 Trajectory,找到它开始跑偏的那一步;
  2. 从那一步 fork;
  3. 只改一条规则或一个 skill;
  4. 并排回放,看效果。

坚持一段时间,你会积累出一套经过对照验证的规则和 skills。它们才是真正的资产,而且可以迁移到任何 harness 上。

9.5 写一个自己的插件

理解 Cordis 最快的方式就是写一个插件。从你每天重复最多的动作开始:按固定格式生成某类文档、查询某个本地数据源、调用某个内部脚本。社区已经有任务看板、移动端远程、SSH 运维之类的插件,照着抄,不丢人。

9.6 分工而不是替换

我推荐的组合:

flowchart LR T{任务类型} T -->|主力编码| P["成熟产品
Claude Code / Codex"] T -->|批量 / 定时 / 低成本| D1["dsh headless"] T -->|调优 / 对照实验| D2["dsh Minimal + Trajectory"] T -->|定制工作流| D3["dsh + 自研插件"] D1 & D2 & D3 -.需要时.-> P

dsh 能把 Claude Code、Codex 当子 Agent 调用,所以这不是二选一,而是排兵布阵。


十、总结:从入门到放弃

入门:DeepSeek Harness 是一个"一切皆插件"的 Agent 运行时。主循环能拔,能力和授权分离,每一步都能回放和分叉。它把 DeepSeek 跑分用的考场开源了,也把 Agent 工程的竞争焦点从模型推向了运行时和生态。

放弃:它现在是 0.2 的 RC 版,配置随时会变,token 开销不低,开箱体验不如成熟产品。把重要流程绑死在某个版本上,大概率会在某个周一早上体会到什么叫"破坏性变更"。

我的姿势:学它的设计,用它跑非关键任务,把在 Trajectory 里验证过的规则沉淀下来。等它 1.0 了,你已经是半个插件作者了。

至于我?已经在 Creator 模式里看着 Agent 把自己的 loop 插件卸了。

它停了。

我也该睡了。


参考资料

评论区
暂无评论
avatar