DeepSeek Harness:一切皆插件的Agent工作台架构解析

DeepSeek Harness 是一个「一切皆插件」的 Agent 运行框架,让模型、工具、会话与界面可自由组合替换。
DeepSeek 开源的 Harness 框架(开发者预览版)以「一切皆插件」为核心设计原则,底层依托 Cordis 提供共享上下文、类型化事件和可撤销副作用,将模型适配器、工具注册表、会话存储乃至 agent loop 本身都拆解为可独立替换的模块。Profile、Bundle 与 Patch 机制负责将这些插件按层叠加组合成一次具体运行,并支持在启动前检查最终配置。框架将 agent 工作拆成 Turn 与 Step,会话日志作为事实来源支持完整回放。它适合需要同时维护多种运行环境、希望模型与工具能分别演进的开发者,但目前仍处于不稳定的预览阶段,沙箱隔离也需要在框架外自行实现。
DeepSeek 开源了一个名为 Harness 的 Agent 运行框架,目前处于开发者预览版(Developer Preview)阶段。它的核心主张只有一句话:一切皆插件。模型、工具、会话、文件系统、沙箱乃至 agent loop 本身,都被拆成可以自由组合的模块。这篇文章基于其官方仓库的中文 README、架构文档和 CLI 指南,梳理它到底解决了什么问题,以及适合谁来用。
为什么要把 Agent 拆成插件
如果你把 agent 理解成一个聊天窗口,那么换模型、换工具、换会话存储,往往都要跟着改一大块代码。这正是 DeepSeek Harness 想解决的痛点。
设想一个常见场景:你已经有了模型适配器和一套工具注册表,接下来想加上会话记录、审批流程、后台任务和一个 Web 页面。最直接的做法是把这些都塞进同一个应用里,开始很快,但过一段时间会出现几个典型问题:
- 换一个模型提供方,调用链上到处都是条件分支;
- 工具执行、会话日志和界面状态互相牵连,改一处容易波及其他;
- agent 完成任务时,哪些状态该保存、哪些事件该回放,越来越难说清楚。
Harness 的切入点不是再加一个更花哨的聊天按钮,而是把这些能力拆开,再用组合的方式装回去。它最重要的设计原则可以翻译成一句人话:每一块能力都是插件。模型适配器是插件,工具注册表是插件,会话存储是插件,agent loop 本身也是插件。
底层由 Cordis 提供一个共享上下文,负责服务贡献、类型化事件和可撤销的副作用。这样某个能力就不再拥有一块不可替换的"特权内核"。想增加模型提供方,就在模型能力点上注册适配器;想增加面向模型的工具,就注册到工具上下文。你可以把它想象成一块主板,模型、工具、会话和界面都是插槽里的模块,而不是焊死在一起的一整台机器。
Profile、Bundle 与 Patch:把插件装成产品
插件很多,怎么把它们装成一个能运行的产品?Harness 用的是 Profile 和 Bundle。
Profile 可以理解成一张"运行配方",里面按顺序列出要叠加的组合包(Bundle)。比如 WebProfile 会加上浏览器应用,HeadlessProfile 则提供一次性运行器且不带服务器。在这些基础层之上,还可以继续叠加 Profile 自己的 Patch、HarnessHome 里的 Patch,以及命令行传入的 Overlay。

后面的 Patch 会按 ID 找配置:命中就替换整条,找不到才插入新条目,遵循"最后一层优先"的规则。官方还提供了配置 dump 能力,让你在真正启动前把最终配置打印出来核对。
这个设计的关键不在于配置文件看起来有多少,而在于运行环境的组成过程变得可检查、可替换。你能清楚看到一次运行到底由哪些层叠加而成,而不是面对一个黑盒。
从 Web UI 快速上手 DeepSeek Harness
对大多数人来说,最容易理解的入口是 Web UI。整个流程大致分四步:
- 直接运行
npx @deepseek/dsh web,默认会在本机 3080 端口启动页面; - 打开设置里的模型页面,填写可用的模型凭证,保存后模型路由才可用;
- 选择一个工作区(Workspace),也就是你希望 agent 读取和修改的项目目录,没有 Workspace 时输入框不可用;
- 发送一个具体任务,比如"总结这个仓库、找出主要包",或者"先运行测试,再解释失败原因"。
标准 Agent Preset 在权限允许时可以读写工作区文件、执行命令、委派工作和维护计划。当权限策略要求审批时,Web UI 会先把操作交给你确认。它展示的是一条完整工作流,而不是只有聊天气泡。
Turn 与 Step:让长任务可回放
再往里看,Harness 把一次 agent 工作拆成了清晰的轮次(Turn)和步骤(Step)。一个 Turn 可以包含多个 Step,每个 Step 发起模型请求、流式接收输出、处理工具调用和结果,再决定继续还是结束。
一次完整链路可以看成:Turn Start → Step Start → 模型请求 → 工具调用与结果 → Step End → 回到 Turn End。
会话日志是这里的"事实来源"。系统提示词、模型输出、工具调用与结果、子代理调度和上下文注入,都可以沿着事件流回放。这个思路很重要,因为长任务最怕的不是没有一个漂亮的界面,而是"做过什么、为什么做、下一步是什么"最后都只能靠人回忆。
扩展路径与 Agent Preset 选择
插件化真正有价值的地方,是扩展时不必复制一整套 agent。官方架构文档给了几条很直接的路径:
- 添加模型提供方,用
ctx.llm注册适配器; - 注册工具,用
ctx.tools; - 更换 Shell 或文件系统,替换对应的 Provider;
- 接入新的 UI,则驱动 agent 注册表,并从会话事件渲染。

官方还提供 Standard、PTC、Minimal、Creative 四种 Agent Preset,从完整工具链,到用 TagScript 组合工具,再到极简工具集合。需要注意的是,它们是 Agent Preset,不要和 Web、Headless 这类 CLI Profile 混为一谈。
当然,这不意味着所有插件都能无改动互换。接口、配置和依赖仍然需要对齐,但系统至少把"应该在哪里扩展"这件事说清楚了。
边界与风险:DeepSeek Harness 不是什么
用之前必须把边界讲清楚,避免误判。

第一,它明确处在 Developer Preview 阶段,未来可能出现破坏兼容性的变化,不应该当成已经稳定的企业级产品。
第二,它不是一个覆盖所有任务的安全承诺。当前默认更接近工作目录级别的访问,操作询问审批不等于沙箱,网络和进程可见性也不是全面隔离。启用 dangerous 类访问会绕过文件隔离,运行不可信代码之前仍然需要自己做隔离、审查和权限控制。
第三,插件化不会凭空提升模型能力。模型、工具、Token 权限和网络环境都会影响最终结果。它擅长的是把这些运行部件组织起来,让你能够替换、检查和扩展,而不是保证 agent 永远完成任务。
谁适合用 DeepSeek Harness

综合来看,DeepSeek Harness 适合三类人:
- 正在做自己的 agent 工作台,希望模型、工具和 UI 能分别演进;
- 需要同时支持 Web、Headless 或其他运行 Profile,希望配置和扩展有清楚边界;
- 愿意接受开发者预览版的变化,想研究一个大型 agent 系统如何把能力拆成插件。
相反,如果你只想要一个"今天安装、明天稳定使用、完全不关心内部组合方式"的消费级工具,它可能还不是最省心的选择。
Harness 的核心不是 DeepSeek 做了一个聊天页面,而是它把 agent 的运行能力拆成了可组合的插件:模型、工具、会话事件、文件系统和界面都可以沿着能力接口替换和扩展,Profile、Bundle 和 Patch 则负责把这些插件装成一次具体运行。它真正提供的,不是一个更漂亮的对话框,而是一种把 agent 运行时重新组织起来的方法。
相关推荐

Treebar:Mac菜单栏管理Git工作树,一眼掌控所有AI编程Agent
Treebar是一款macOS菜单栏应用,专为AI编程多工作树场景设计。它将所有Git Worktree状态统一展示在MacBook刘海区域,让开发者实时监控Codex等AI Agent的工作进度,无需切换终端即可掌握全局。即将开源核心代码。

苹果确认Hide My Email域名永久保留,用户隐私获长期保障
苹果公司公开承诺iCloud+ Hide My Email功能使用的@icloud.com域名将永久保留,不会弃用或迁移。本文解析域名稳定性对邮箱转发隐私工具的关键意义,以及对用户账户安全的底层保障。

终端正在拖慢你:多任务时代的效率反思
终端是程序员的信仰工具,但在多任务并行的现代开发场景中,它的线性设计正在成为效率瓶颈。本文分析终端的心智负担模型为何在第六个任务时崩溃,以及开发者该如何重新评估工具选择。