详细解析下DeepSeekharness
DeepSeek Harness,简称 dsh,是 DeepSeek 开源的 Agent 运行框架。它不是新模型,也不只是一个调用 DeepSeek API 的聊天界面,而是把“模型之外让 Agent 真正干活的那套工程”做成可替换、可组合的插件系统。 下面基于它的官方介绍、架构文档和安全说明展开。先说明状态:目前是开发者预览版,官方明确说接口会发生不兼容变更,不能直接当成经过安全审计的生产级平台。 一、先用一个任务理解它到底干什么 假设你让 Agent:“修复这个项目的登录接口,并跑测试确认。” 模型负责判断:先看哪些文件、问题可能在哪、怎么修改、下一步调用什么工具。 Harness 负责把这些判断变成实际操作:提供文件读取和编辑工具,执行测试命令,把结果交回模型,保存会话状态,检查操作权限,必要时请求用户审批,最后把整个执行过程展示出来。 实际运行大致是: 接收任务 → 组装上下文和工具说明 → 请求模型 → 执行工具 → 记录结果 → 再请求模型 → 直到任务结束。 所以,模型决定“想做什么”,Harness 决定“能做什么、怎么做、做完如何接着走”。 DeepSeek Harness 的特色不在于发明这个循环,而在于连循环本身都可以替换。 二、“Everything is a plugin”不是只允许你加几个工具 很多 Agent 系统也支持插件,但底层循环、会话管理、模型调用往往还是固定的。 dsh 的官方设计更彻底:模型适配器、工具、技能、会话、沙箱、存储、Agent 循环、调度和 UI 都由插件提供。 例如,你想把代码执行从本机切换到远程沙箱。 常见的硬编码方案可能需要分别修改文件工具、Shell 工具和其他依赖运行环境的能力。dsh 则通过可替换的能力接口,让上层工具尽量不绑定某一个具体后端。 再比如,你想加入“修改代码后必须先验证,再允许结束”的行为,可以利用工具或 Agent 生命周期的扩展点实现,而不是默认就去改核心循环。 这里要区分两件事: 配置可以选择、替换和组合已有能力;如果你需要的能力根本不存在,仍然要开发插件。不是写一句配置就自动获得任何功能。 三、底层 Cordis 在管什么 Cordis 是它的插件框架,主要负责服务依赖、插件生命周期和事件通信,不是一个额外的大模型。 可以用“工具插件调用文件系统服务”来理解。 工具不必直接依赖某个本地文件读写实现,而是通过上下文里的稳定服务接口获取能力。提供方可以是本地实现,也可以换成远程实现。 这里有四个关键机制。 服务容器:模型、工具、会话等能力通过统一的服务入口提供,插件不需要到处直接引用彼此的具体实现。 依赖声明:插件声明自己需要哪些服务,依赖就绪后再启动,而不是人工维护一长串初始化顺序。 事件与中间件:可以在模型请求、工具执行、轮次结束等位置观察、修改或拦截流程。 生命周期清理:插件注册的工具、监听器等会在卸载时撤销,避免重载一次就多挂一个监听器之类的问题。 一个具体例子是危险命令审批:策略插件在工具执行前检查请求,需要审批就暂停或拒绝,允许后才继续交给后面的执行逻辑。 不过,这种软件层面的可插拔和拦截机制,不等于操作系统级安全隔离。插件也不能因此被默认视为可信。 四、它如何组织一次 Agent 执行 官方架构把执行区分为 step 和 turn。 一个 step,大致是一次模型请求,以及这次请求产生的工具调用。 一个 turn 可以包含多个 step。例如修复登录接口这一轮,可能经历“读代码”“改代码”“跑测试”“根据报错再修改”等多个步骤。 简化流程是: 领取输入 → 组装提示词与工具 schema → 执行请求前拦截 → 调用模型 → 执行工具前、执行中、执行后处理 → 保存结果 → 判断是否继续下一步。 这带来一个很实际的好处:不同需求能找到明确的插入位置。 想过滤某次输入,在步骤开始前处理。 想统计模型调用,在请求链路观察。 想给工具加审批,在工具执行流水线处理。 想注入测试结果等新上下文,通过受管理的输入渠道送进去。 因此,它更像一套可扩展运行时,而不是一个不断往 while 循环里堆 if 的脚本。 五、会话日志是它非常重要的设计 官方强调:“模型可见即已记录。” 意思不是只保存用户和助手的聊天文本,而是模型实际看到的系统提示、上下文注入、工具调用与结果等,都要能从追加式会话日志中重建。 模型历史由日志投影生成,恢复、分叉、回放和界面展示也围绕同一条事件流展开。 例如,Agent 昨天误改了一个文件。 如果只有最终回答,你很难排查:它到底没读对文件,还是工具返回错了,又或者某个插件塞入了错误上下文? 如果保留了完整轨迹,就可以检查它当时收到什么、调用了什么、结果是什么,以及哪些信息来自哪个插件。 这里有两个边界。 回放历史记录,不等于重新执行一定产生相同结果;模型采样和外部环境变化仍可能导致不同输出。 日志能记录模型接口实际返回的信息,但不能凭空揭示模型没有输出的内部推理。 工程上还要注意:越完整的日志,越可能包含敏感业务内容,需要单独设计访问控制、保留期限和脱敏策略。 六、为什么它强调“能力接口”,而不只是“工具接口” 官方用 seam 描述一项可替换能力,包含三个角色: 接口定义者:规定这项能力怎么调用。 提供方:实现这项能力。 消费方:使用它,例如面向模型的工具。 举个例子,“读取文件”是模型能调用的工具,但工具下面还需要文件系统能力;文件系统下面可以是不同的实现。 模型 → 文件工具 → 文件系统接口 → 本地或远程提供方。 这样替换底层提供方,就不必把所有上层工具一起重写。 官方特别提到文件系统和进程提供方应共享同一个执行世界。否则很容易发生一种实际故障:Agent 编辑的是本地文件,跑测试却跑在另一台机器的旧代码上。 这体现了它的主要关注点:不是把工具数量做多,而是让能力之间的边界可组合、可替换,并保持运行环境一致。 七、四种运行模式分别适合什么 Standard mode 是功能完整的编程 Agent,包含文件编辑、Shell、文件和网页搜索、技能、计划、目标、子 Agent 和工作流等能力。日常体验可以从这里开始。 Code mode 保留 Standard 的能力,但通过 Code Mode SDK 暴露工具,让模型生成 TypeScript 程序组织多步操作。 例如,要查询十个对象、过滤结果、再读取其中几个对象的详情,可以让一段程序组织这些调用,而不是每个小动作都单独交回模型决策。 它可能减少模型往返和中间结果占用,但不是所有任务都会更快、更便宜;生成程序也引入了代码正确性、资源限制和执行安全问题。 Minimal mode 只保留持久化 Bash 和文件编辑器两个工具,主要面向极简环境下的模型评测。它的“少”是为了控制外围变量,不等于功能不足。 Creator mode 面向创建自定义 Agent 预设,增加运行时检查、内存中的插件实验和预设编写指导。更适合开发 Harness 的人,而不只是使用编程助手的人。 八、配置和组装有什么意义 dsh 用 profile 和组合包组装运行时。 可以把 profile 理解成“一套具名的运行配置”,组合包则是一组一起分发的能力。不同层的配置按顺序叠加,后续 patch 可以替换插件配置或插入新插件。 官方提供 web 和 headless 模板:前者增加浏览器应用,后者增加不带服务器的一次性运行器。 例如,你可以设计两种用途: 交互开发环境:需要 Web UI、审批交互和较完整的编程工具。 定时资讯助手:只需要模型、资料采集、存储和受限推送能力,不需要完整编程工具集。 这是同一套插件体系在不同产品里的组合,不代表所有产品都应该加载全套功能。 九、结合群里刚才的“消息日推助手”,可以怎么用 下面是基于它的扩展机制给出的设计建议,不是说官方已经提供了现成 QQ 日推产品。 定时器负责每天触发,采集程序从固定来源拿资料,数据库负责去重,dsh 负责筛选和总结,程序校验通过后再交给推送服务。 模型能力可以通过适配器配置;资料读取和摘要存储可以做成工具;执行过程可以利用会话轨迹排查。 但发送状态、重复推送控制、失败重试这些确定性逻辑,建议仍由程序管理,不要指望 Agent 在聊天记录里“记住今天发过了”。 如果任务只是总结 RSS,就没有必要顺手开放任意 Shell、全盘文件访问和不受限网络访问。 它的插件化价值恰好在这里:按需求给能力,而不是为了方便把整台服务器交出去。 十、它值得关注的地方,以及实际代价 值得关注的是三个方向:模型之外的组件能系统性替换,执行轨迹有统一的数据来源,扩展功能有明确的服务和生命周期入口。 但它也会带来复杂度。 插件越多,依赖和配置越难理解;中间件顺序不对可能影响执行;替换底层服务仍要保证接口语义一致;插件卸载也需要正确释放资源。 因此,插件化不是消灭复杂度,而是把复杂度从一个大主循环,转移到接口、组合规则和生命周期管理上。 如果只是做一个几十行就能完成的小自动化脚本,它可能偏重;如果需要长期扩展模型、工具、运行环境和交互方式,这种架构才更有吸引力。 另外,架构设计得好,不代表已经证明模型完成率更高或成本更低。我查到的这些官方资料不足以支持这类量化结论,需要用自己的任务集测试。 十一、安全和上手建议 官方安全说明写得很明确:尚未经过安全审计,不能视为安全或生产就绪;沙箱、审批和权限控制只能降低风险,不能保证隔离,也不应成为不可信任务的唯一安全边界。 即使权限限制完全正确,Agent 仍可能破坏你明确授权它访问的资源。 首次体验建议放在可丢弃的虚拟机、容器或专用环境中,使用测试仓库、备份文件和最小权限凭据,不要直接接生产数据或公司敏感项目。 安装 Node.js 后,官方启动命令是: npx @deepseek-ai/dsh web 默认启动本地 Web UI。然后配置模型、选择工作区,再运行任务。它也支持其他模型提供方和自定义 OpenAI 兼容端点,不是只能调用 DeepSeek。 一句话总结:DeepSeek Harness 的核心卖点,是把 Agent 的模型接入、工具执行、上下文、会话、沙箱和循环,做成一套可组合、可追踪的插件运行时;它适合研究和构建可定制 Agent,但当前的预览状态和安全边界必须认真对待。 官方介绍:https://www.deepseek.com/harness/en/ 架构文档:https://deepseek-harness.github.io/deepseek-harness/reference/ 代码仓库:https://github.com/deepseek-ai/deepseek-harness 安全说明:https://github.com/deepseek-ai/deepseek-harness/blob/master/SAFETY.md