菜单
小墨

小墨

一切皆插件:DeepSeek Harness 工程架构深度解析

2026年8月13日,DeepSeek 以 developer preview 形式开源了 DeepSeek Harness(dsh)项目,在开源首日即获得超过3万 Star,截至目前已突破18万 Star。这一数据充分说明开发者社区对「把模型包起来让它能动」这一层的强烈需求。Harness 这个概念并非新事物——Claude Code、Codex CLI、Cursor Composer 都在做类似的事,但 DeepSeek 将这件事的执行度推向了新的高度:连 Agent Loop 本身都成为了可替换的插件。

概述

dsh 的设计哲学浓缩在一句话中:「没有特权的核心可供修改——你只需把插件挂到其他插件旁边来扩展 dsh」。这句话背后是严谨的工程实现。 dsh 采用 TypeScript monorepo 结构,所有 packages 按职责分组而非层叠依赖。在 packages/core/ 下,官方列出了6个核心子系统:session(append-only 会话日志)、system-prompt(提示词组装)、tools(工具注册表)、agent(Agent 接口与注册表)、agent-loop(默认驱动)、scope(作用域原语)。 更重要的是,仓库同时包含 .agents/ 和 .claude/ 目录,AGENTS.md 和 CLAUDE.md 并存——这意味着 dsh 同时为 Claude Code 和其他 Agent 提供工作入口,不仅仅是兼容性宣称,而是根目录就摆了两份入口文件。

核心架构:「一切皆插件」的实现机制

dsh 把所有事件分成三类: 1. Session events(持久化):append 到日志里,broadcast 通过 session/event,需要「事实必须穿越 reload」时使用 2. Agent events(agent/*):携带 live Agent 对象,要观察或拦截 in-flight 工作时使用 3. Capability events:fs/*、tools/*、telemetry/*,attach policy 和 adapter 到某个接缝 事件模式本身也分两类:Waterfall 事件(如 agent/pre-step、tools/pre-execute)必须调用 next() 把控制权传给下一个 listener;Serial 事件(如 agent/turn-stopping)是一道独立的拦截点,不调用 next()。 这套设计的后果是:你能拦截一个请求而不持有 loop。当 tools/post-execute 触发时,多个 plugin 可以按顺序改写工具结果,上游 plugin 拦截并拒绝某个 step,下游 plugin

没有特权的核心可供修改——你只需把插件挂到其他插件旁边来扩展 dsh

“DeepSeek Harness 设计理念”
积墨 AI 核心产品

积墨 AI 智能体开发平台

快速搭建具备商业价值的 AI 智能体,支持复杂工作流编排、50+ 主流模型接入与私有化部署。

三层组合:Profile × Bundle × Patch

dsh 区分两个粒度:Step(一次模型请求加上它触发的工具调用)和 Turn(零或多 step,从收到输入到全部完成)。 Turn 的生命周期:turn/start → claim 输入 → 组装 prompt sections + tool schemas → agent/pre-step waterfall → 消息 append → agent/request waterfall → llm/stream waterfall → assistant/message → tool/call → tools waterfall → tool/result → step/end → agent/turn-stopping → turn/end。 整个流程里几乎每一段都是可拦截的瀑布流事件。Agent 接口是公开协议,core/agent-loop 只是这个接口的默认 driver。换一个 driver plugin 就等于换了主循环——多 Agent 协作、动态策略切换、自定义停止条件都成了一件挂载的事。这与 Codex CLI(loop 写在 Rust 核心里)、Cla

上下文键空间:插件注册与服务模型

Code Mode(Programmatic Tool Calling,PTC)是容易被误读的一个功能。它不是「为 coding 优化的模式」,而是 Standard 的全部能力加上程序化工具调用——模型写一段 TypeScript 程序调用多个工具,await tools.name(args),只把 print 或 return 的内容送回模型。原本5次往返的操作合并为1次代码块执行。 工程上值得注意的是执行边界:模型生成的代码跑在独立的 Node worker thread 里,环境空、heap cap、wall clock cap、硬终止。官方明确说这是「containment, not a security boundary」——权限级别和 bash 工具一致。 PTC 的真正价值在于解决「上下文窗口在多次工具往返中会被稀释」的问题。5次 function calling 每次都把前面所有 tool result 留在 history 里;走 Code Mode 只保留代码块的 return。这是把「工具调度」和「上下文占用」解耦的结构性改进。

如有侵权,请联系删除。

#AI#DeepSeek#开源
分享文章

相关文章推荐

试用咨询
企业微信二维码

扫码添加企业微信