Deepseek-Harness
核心思想:everything is plugin,model、tool、agent loop、memory等等所有东西都可以是插件
要理解deepseek harness,首先要理解支持这一切插件能够组合、启动、依赖、卸载、恢复、替换的底层运行时——cordis
deeseek-harness底层:cordis
cordis本质上是一个可动态组合,可动态拆卸,带依赖关系和生命周期管理的运行时内核,在deepseek-harness中,一切皆插件的原理就构建在cordis之上
它的关键思想之一在于:让插件产生的每一个effect,都应该可以被撤销(temporal composability),比如安装了A插件运行了一段时间后,系统状态变成了state(t2),当卸载了A之后,系统状态应该撤回到state(t1)
第二个关键的问题在于,插件之间应该如何组合,即Spatial composability,
两者组合起来,cordis的核心如下图所示:
Cordis
│
┌────────────┴──
↓ ↓
Temporal Composability Spatial Composability
│ │
插件干净卸载 插件正确组合
│ │
reversible effects dependency graph
│ │
└────────────┬──
↓
Dynamic Composition
cordis就类似于一种插件操作系统,而deepseek harness是基于cordis内核构建起来的Agent os,进行了极致的插件细颗粒度,当插件化颗粒度越细,黑盒越少,运行就越透明,那么Agent的优化空间也会相应增大
在deepseek-harness之前
譬如langchain、langgraph之类的框架,往往提供了高度封装的能力,这种高度的抽象降低了Agent的构建门槛,但也让Agent的行为变得更难追踪,相当于在模型黑盒上又叠加了一层框架的黑盒,往往需要额外的tracing才能进行全链路的观测
deepseek-harness在架构层面上将一切都视为插件,日志作为唯一的真相源,将模型的每一段内容和工具调用上下文注入都记录在可回放的事件流中,同时插件的边界清晰,换掉或阻拦某一层时影响的范围可控且可观察
而与pi-agent相比,它的哲学在于最小核心=按需扩展,而deepseek-harness则走的更远,不仅是工具可扩展,循环、会话、沙箱、甚至Agent调度本身都是插件
deepseek-harness插件体系
deepseek-harness通过分层叠加的方式,组成了一棵完整的调用树,运行中的dsh启动时按照固定顺序把各层配置叠加在一起,最终形成实际生效的插件集合
- Profile:存储在Harness home的一份具名组合,列出所堆叠的bundle,持有它自行安装的树外插件,并保留用户自己的cordis.patch.yml
- Bundle:cordis配置行和挂载代码的分发格式
三个基础Bundle
- dsh-base :模型层+执行层+编排层+上下文层+治理层+持久化与观测层
- dsh-web-app:叠加浏览器应用
- dsh-headless:叠加一个完全无服务器的一次性运行器
deepseek-harness可以通过profile与bundle自由拼装web-app/headless等形态,具有极高的可替换性和可组合性
总结来说:
deepseek-harness的哲学是:与其将agent的能力硬编码进一个庞大的主循环,不如将每一种能力都做成可插拔、可组合、可自我修改的插件,利用cordis的依赖注入和可逆副作用缝合起来,从而实现清晰的能力边界与可回放可审计的会话模型乃至Agent修改自身插件的自我扩展能力

浙公网安备 33010602011771号