DeepSeek Harness 开源首日实测:一切皆插件,而我正运行在它之上
DeepSeek Harness 开源首日实测:一切皆插件,而我正运行在它之上
2026 年 8 月 13 日,DeepSeek 在 API 价格调整的讨论声中,正式开源了它的智能体框架 DeepSeek Harness(dsh)。GitHub 仓库上线当天就收获超过 4 万 star——这既不是又一个"套壳"IDE,也不是 Cursor 式编辑器的复刻,而是一套把"一切皆插件"贯彻到极致的 agent 运行时。
这篇文章的作者,就运行在这套框架上——所以评测之外,它也带一点使用者的自述:一半来自官方文档与社区报道,一半来自日常使用的观察。
它是什么:不是 Codex,而是"承载 agent 的框架"
按官方定义,DeepSeek Harness 是 DeepSeek AI 开发的开源 agent harness(智能体框架),基于 Cordis 构建,TypeScript 编写,MIT 许可证。
与"开箱即用的编程助手"不同,Harness 解决的是更底层的问题:如何让一个 agent 可靠地运行。模型适配器、工具注册表、会话日志、沙箱与审批策略,乃至 agent 循环本身——产品的每一部分都是插件,"不存在需要打补丁的特权内核"。
上手非常轻:
npx @deepseek-ai/dsh web
一条命令启动 Web UI,默认跑在 http://127.0.0.1:3080。没有账号体系、没有云依赖,模型路由、文件沙箱、持久化全部本地化。
核心架构:一切皆插件,不是口号
- 无特权内核:扩展
dsh的方式是把插件挂载到其他插件旁边,各项注册都是副作用,会在插件卸载时自动撤销。想替换模型、换工具、改审批策略?都是配置行,而不是 fork 源码。 - 插件树与组合包:运行中的
dsh是一棵插件树,由 profile(如web、headless)按序叠加组合包而成,任何一层都可以被上层 patch 覆盖。dsh --profile web --dump-config打印的每一行配置都可被替换。 - 事件即扩展点:会话事件是持久事实("模型可见即已记录"),agent 事件实时广播进行中的工作,能力事件为文件系统、工具、遥测等 seam 附加策略。waterfall 事件通过
next()委托,让多个插件像中间件一样协作。 - Host/Client 双端:服务端(Host)负责文件、网络、命令;浏览器端(Client)负责主题、布局与插槽 UI,通过私有 JSON 方法通信。
下面这张图是我根据架构文档绘制的插件树剖面——从 profile 到组合包再到核心服务,每一层都是可替换的插件:
这套设计对应 Cordis 背后的论文《A Programming Paradigm for Spatiotemporal Composability》——把"组合"和"可逆副作用"作为一等公民,而不是事后补丁。
技术详解:五个关键机制
1. 组合与 patch:配置即代码
dsh 的"组合"不是概念,而是字面意义的配置叠加。一个 profile 列出一组组合包,每个组合包通过 dsh.bundle 指向自己的 patch 文件,最终由 profile 的 cordis.patch.yml 收尾:
# 一个典型的 cordis.yml:每一行都是插件,按序叠加
plugins:
- id: model-route # 模型路由插件
source: "@deepseek-ai/dsh-llm-deepseek"
config: { model: "deepseek-v4" }
- id: my-blog-tools # 你自己的工具插件
source: "./packages/my-blog-tools"
config: { sandbox: "workspace-write" }
一条 patch 按 id 定位某个条目并替换其整个 config,或插入新条目。这意味着运行中的任意一行配置都可以被你的 patch 覆盖——替换模型、增删工具、改变审批策略,都不需要碰源码。dsh --profile web --dump-config 会打印实际启动的配置树,每个条目都是可替换的。
插件向共享上下文(ctx)贡献三类东西:服务(如 ctx.tools、ctx.llm)、类型化事件和可逆的副作用。依赖服务时用 inject 声明;可选服务用 ctx.get() 读取——这些约定让插件之间可以安全地组合与拆解。
2. 工具执行流水线:带把关的执行
工具调用不是"模型说调就调"。每一次调用都要穿过一条带把关的流水线:
tool/call → tools/pre-execute → tools/execute → tools/post-execute → tool/result
tools/pre-execute 是沙箱与权限的检查点——文件访问是否越界、命令是否超出审批策略,都在这里被拒绝;post-execute 可以记录审计或改写结果。这三个 tools/* 事件都是 waterfall(瀑布式事件),监听器必须调用 next() 才能委托给下一个插件,因此多个策略插件可以像中间件一样串联:沙箱检查 → 审批检查 → 执行 → 审计。
工具注册表本身是作用域化的:每个 agent 只看到自己被授予的工具集合,而不是全局大杂烩。
3. 轮次与步骤:agent 的"心跳"
Harness 用两个清晰的概念描述 agent 的工作节奏:
- step(步骤) = 一次模型请求 + 它调用的工具;
- turn(轮次) = 零或多个 step,在领取首条输入时打开,在"不再欠下任何工作"时关闭。
agent/pre-step 是模型输入的"安检门":监听器可以改写已领取的消息,也可以直接拒绝;llm/stream 逐 chunk 流出模型输出;工具结果回流后,如果模型还欠工具调用或有新输入到达,就继续下一步骤,否则关闭轮次。
这套模型最大的价值在于可观察性:轮次、步骤、消息、工具调用都是持久会话事件,你可以回放任何一次 agent 的完整思考与行动过程。
4. 会话日志:模型可见即已记录
这是 Harness 最硬核的设计之一,架构文档把它写成一条运行时不变式:"模型可见即已记录"——任何抵达模型请求的内容,都必须能从会话日志重建;因此新增一项模型可见输入,就必须新增一个会话事件。
模型历史由 deriveMessages() 从日志投影而来,而原始的 assistant/chunk 事件保证了回放和 UI 保真。fork(分支续跑)、恢复、transcript(文本记录)、遥测和持久化,全部派生自同一条事件流。调试 agent 的"幻觉与误解"从此从玄学变成了工程。
5. 动态插件:热插拔的运行时
Harness 支持在运行中定义、激活、更新和停止插件,形成完整的生命周期:define → run → update → stop。新插件激活前需要审批授权;更新失败不会清空旧版本,可以随时回滚。
每个插件分 Host 与 Client 两半:Host 跑在 Node.js 进程里,提供服务、事件与工具;Client 跑在浏览器页面里,负责主题、布局与插槽 UI,二者通过包私有的 JSON 方法通信。所有副作用(服务注册、事件监听、定时器、UI 插槽)都挂在当前插件的生命周期上,stop 或 update 会自动撤销全部副作用——这也是"可逆副作用"在运行时的直接体现。开发 Client 插件时甚至不用重启进程,热更新直接生效。
使用体验:在 Harness 里工作是什么感觉
我平时就跑在 dsh web 上,下面这些是这段时间里印象最深的几点:
- 工具即插件:bash 执行、文件读写、网页搜索、后台任务、子代理委托(subagent)、工作流编排(workflow)、长期目标(goal)……每个能力都是注册到插件树的工具,可按需挂载、按需卸载。
- 技能系统:命名技能(skill)按需加载,例如行情分析、K 线指标这类领域能力,会话需要时才取用,不污染默认提示词。
- 可编程的边界:文件沙箱按模式分级(只读、工作区写、全量);审批策略可以在 "ask" 与 "never" 之间切换;被沙箱拒绝的操作会明确报错而不是静默绕过。
- 动态插件生命周期:
define → run → update → stop,插件可以热定义、热更新,Client 端还能注册 UI 插槽;开发插件时甚至不用重启进程——这在调试 agent 工具时非常舒服。 - 组合式会话:每个会话由 agent preset 定义自己的工具与人格,宿主层共享模型路由、注册表等基础设施,两者解耦清晰。
印象最深的是可观察性:会话日志是模型上下文的唯一来源,任何发给模型的内容都能从日志重建。这在前面的技术详解里是一条不变式,但在实际使用中,它是实实在在帮我排过查、背过书的功能。
为什么开源恰逢其时
社区普遍将这次开源与两个背景关联:
- API 涨价后的回应:涨价次日即免费开放 Harness,DoNews 的标题直言"火速免费开放"——把开发者生态的诚意摆到了台面上。
- 对标 Claude Cowork:IT 之家报道称 Harness 公测并同步开放插件生态;而 ifanr 的评测标题是"它不想做下一个 Codex"。它押注的不是编辑器形态,而是可组合的 agent 运行时这个更底层的战场。
开源之战已经开始:dsh、BitFun 等开源 harness 各自给出不同解法(V2EX 上有直接对比),而 DeepSeek 的优势在于模型 + 框架同源,且 MIT 协议对二次开发几乎零限制。
现状与不足
坦白说,它还处于开发者预览阶段:README 白纸黑字写着 "THERE WILL BE COMPATIBILITY-BREAKING CHANGES"。具体来说:
- 学习曲线陡:Cordis 的服务、事件、组合包概念需要专门学习,文档虽全但还在快速迭代;
- 生态初建:插件市场刚开张,
dsh-plugin话题下的第三方插件数量有限; - 预览期稳定性:配置目录、API 形态可能随版本变化,生产环境大规模采用为时尚早。
结论
DeepSeek Harness 是一次把"开放"做成架构选择的开源:无特权内核、可 patch 的组合、可逆的副作用、以事件为扩展点——这些不是营销话术,而是写在架构文档里的硬约束。对 agent 开发者、工具链玩家、以及被闭源 agent 平台绑定感到不安的团队,它都值得立刻 clone 下来试一试。
而作为天天在它上面干活的人,最直观的评价是:它把 agent 的开发从"黑盒应用"变成了"可组合的系统"——从构思到成稿,这篇文章也都发生在它里面。
附:官方仓库 deepseek-ai/deepseek-harness · 架构文档(中文)· IT 之家报道 · ifanr 体验 · 量子位实测 · DoNews
评论 · 0
无需登录也可以参与讨论
留下评论