DeepSeek Harness (DSH) 在内部测试数月以后终于在 8 月向社区释放了开源的第一个版本,一时之间引起了行业的海量讨论和关注。行业关于这个框架的代码分析已经很多了,本文则希望从软件工程和架构的角度聊一下这个框架带来的一些收获和思考。结论先行:DSH 本身的定位并不是局限在 Agent,而是更加广泛的 AI 驱动的软件工程;行业对他的关注和影响短期高估,但是长期低估了它可能点燃的一场工程架构革命。
一谈到 DSH,很多人张口就会说它的 Everything is a Plugin 架构设计。我不清楚在 DSH 官方代码库中也是把它作为 slogan,是出于宣传推广的原因,还是醉翁之意不在酒。
插件化其实本身是一个非常成熟且行业共识的架构策略,无论是在服务模块,还是服务组合以及跨域异构架构维度,都有成熟的架构方案以及落地脚手架。因此我的确不知道这点到底有什么好宣传的:无论是古早的 Eclipse IDE,还是当前依然热度不减、以短小精悍易扩展著称的 Pi Agent Framework,都是插件化的架构。而另一个开源方案 pinix 则是把整个 runtime 都 clip 化,甚至把 agent 本身也作为一个 clip。因此,在我看来,DSH 这句话隐含的 LLM is also a Plugin 表达才是真正值得关注的。而这句表达背后的理论支撑 《A Programming Paradigm for Spatiotemporal Composability》 可能相对读起来比较晦涩,反而大大低估了它的价值。
这篇论文本身要论述的事情其实很简单:程序的时空可组合性。这个命题本身也是一个非常古老的研究命题。而在实践上,Golang 的作者之一 Rob Pike,从设计语言之初就是以组合和正交作为自己的语言基础,当然受限于静态强类型语言的限制,它更多是实现了空间的可组合性。而再把计算机编程语言历史往回翻,你会发现,电信行业使用几十年的 Erlang 其实早就已经实现了 hotcode reload 机制,而这其实就已经是时空可组合性的工程实践落地了,而且这个已经落地了好几十年,你每天使用的手机、电脑所经过的核心骨干交换机几乎都有它的身影。如果你仔细阅读一下 DSH 的 loop 代码,你会发现当年 Erlang 用尾递归实现的方式其实不过是在 Node.js 通过 context 做了一次拙劣的模仿。
我这里要说的并不是这个理论本身,而是这个理论本身所支撑的技术进步方向:搭积木的可折叠性。因为只有解决了运行时的时空可组合,才有可能实现理论上任意的组合以及试错。我们在做架构设计的时候总会免不了画架构框图,本质上其实就是基于架构树的经验在使用 积木 构建不同尺寸维度的解决方案。当行业还在纠结 DSH 是否是一个更好的 Agent Harness 的时候,我觉得其实应该更多地往前看一点:有没有可能它代表的是 Arch Engineering Harness——输入架构图,然后给出整套架构解决方案的实现。
而这个点不免会跟最近讨论火热的 自进化 联系到一起。当我们讨论自进化的时候,我们到底在讨论什么?很多人觉得 DSH 就是深度求索为 agent 自进化提交的阶段性答卷。我不清楚在 DeepSeek 内部是否也是这个定位,如上所述,如果 DeepSeek 内部也是这个定位,那么这个框架注定其实很难达到让人满意的 Release 阶段。
毕竟,AI 驱动的工程时代,理论和架构永远不是壁垒,比拼的是谁先落地,以及迭代的速度。DSH 不可能不明白这一点,让我们期待一下 DSH 从 Preview 到 Beta 的来临。