8 月 13 日晚上,DeepSeek 扔出来两个东西。
一个是 V4 Pro 正式版。1M 上下文,384K 输出上限,Terminal Bench 2.1 干到 87.9——所有人都在刷这组数字,我的时间线被 benchmark 截图淹了。
另一个几乎没有声音:GitHub 上悄悄多出来一个仓库,deepseek-ai/deepseek-harness,MIT 协议开源,附带一篇 88 页的论文,《A Programming Paradigm for Spatiotemporal Composability》(时空可组合性:一种编程范式)。
模型我没急着跑。论文我好好读了一遍。
天亮的时候我只有一个判断:V4 Pro 是产品,那 88 页纸才是野心。前者是让对手紧张一个季度的东西,后者是想重新定义"软件"两个字的东西。
这篇文章,就讲我对这篇论文的理解。
先看 Harness:一句被读错的话
表面上的 Harness 没什么神秘。一行 npx 命令启动,本地 Web UI,模型切换、子 Agent、Skill、MCP 协议、定时任务——Claude Code 有的,它基本都有。外界贴的标签也现成:DeepSeek 版 Claude Code。
不到两天,仓库星标破了十万。
但绝大多数人漏看了架构文档的第一句话:everything is a plugin。一切皆插件。
这六个字被几乎所有报道读成了功能列表——模型是插件,工具是插件,会话、沙箱、界面都是插件。我读了三遍,确认它不是功能列表,是一句宣言:这个系统里没有哪个部分是"本体"。连模型都可以卸下来换掉,还有什么不能换?
Claude Code 和 Codex 给你的,是一个装好的 Agent。DeepSeek 给你的,是一个可以组装、拆卸、替换 Agent 每一个零件的运行时。
差别不在功能,在假设。前者假设软件的形态是固定的,出厂什么样就是什么样;后者假设软件的形态是活的,可以一边跑一边换。
这个假设,就是论文要形式化的东西。
论文的问题:软件装了四十年,没人教它卸载
论文一开头点破的事,值得抄下来:
软件工程的全部组合方式——函数调用、模块导入、类继承——都发生在编译时。代码一旦编好,结构就固定了。这是过去四十年的默认假设。
但现在有两样东西要求软件在运行时动态地组合:插件系统,和自进化 Agent。
我们是怎么应付的?重启进程、容器编排、重新部署。论文管这个叫粒度根本不匹配——你要换的是一颗螺丝,行业给你的工具是换掉整台发动机。
论文里有一组实测数据(2026 年 6 月 9 日抓取):VSCode 安装量前 100 的扩展里,87 个包含可执行代码,卸载它们必须重启整个宿主程序;只有 7 个声明了自己依赖哪些其他扩展。
连全世界最大的插件市场都管不好"卸载"和"依赖"这两件事,凭什么相信 Agent 能管好自己?
这就是论文要解决的问题:给运行时动态组合补一个形式化地基。它把组合拆成两个维度——时间,和空间。
时间之维:给每次修改,配一个逆操作
先看时间。
一个组件装进来,会改环境:写数据库、注册路由、改配置。它卸载的时候,这些修改怎么办?今天的答案是:不知道,重启吧。
论文的答案叫可逆效应(revertible effects):组件对环境做的每一次修改,都必须同时登记一个逆操作,由运行时记账。卸载,就是把这条账倒序执行一遍。
像一摞盘子。最后放上去的,先拿走。只要每一步修改都带着自己的"撤销",整摞盘子就能原样收回去,回到它没来过的样子。
论文给这个目标起了个名字:观测等价。组件被卸载之后,系统里其他组件观测不到它曾经存在过。
茨威格在《断头王后》里写玛丽·安托瓦内特:她那时候还太年轻,不知道所有命运赠送的礼物,早已在暗中标好了价格。
软件对环境做的每一次修改,也早在暗中标好了价格。只是四十年来,没有人替它记账。
读到这里我停了很久。做投资尽调这些年,我有个习惯:看一个系统,不看它扩张的时候多漂亮,看它能不能干净地收缩。装得上不稀奇,卸得掉才是工程。这套理论做的事,就是把"卸得掉"从经验变成定理。
空间之维:让依赖自己找到彼此
再看空间。
组件之间要互相依赖:数据库插件给查询插件提供连接,适配器给机器人提供通道。今天这些依赖要么写死在代码里,要么靠人手工编排拓扑。
论文的答案叫反应式余效应(reactive coeffects):组件只声明"我需要什么",不指名谁提供。依赖到位,自动激活;依赖撤走,自动休眠;依赖回来,自动复活。整个拓扑结构不靠人写,从声明里自动推导。
论文还证了一个关键性质:合流性(confluence)。不管你按什么顺序装、按什么顺序卸,最终收敛到的状态,和"一开始就把所有组件装好"数学上严格一致。
这不是玩具。论文附了一个跑了四年的生产案例:Koishi,开源聊天机器人框架,4000 多个社区插件。这些插件的作者互不相识,唯一的协调,就是各自那份声明。
4000 个互不相识的人写的零件,装在同一套系统里互不踩死——这件事在今天的任何插件生态里都是奇迹。它是这套理论交了四年的学费。
真正的目标:会自我修改的软件
铺垫了这么多,论文 1.2.2 节才把真正的野心说出来。
未来的 Agent harness,会一边对外服务,一边生成并部署对自己组件的修改——没有人在旁边看着。这是自进化的必经之路:软件改代码的时代要过去了,接下来是代码改软件。
问题在于:没有时间之维,每一次自我修改都得全量重启,上下文、记忆、正在进行的任务,全部清零。一个每天"死"一次的系统谈不上进化,顶多重生。
更狠的是这句,我原文抄下来:
"一次错误的自我修改,可能把那个用来恢复的进程本身一并杀死。"
A faulty self-modification can disable the very process needed to recover.
这就是整篇论文最锋利的地方。所有人都在讨论自进化需要多聪明的模型,DeepSeek 的回答是:自进化的瓶颈从来不在模型够不够聪明,在地基撑不撑得住。一个连干净卸载都不会的系统,让它修改自己,等于让一个不会缝合的医生给自己开膛。
这 88 页纸,是在给自进化修数学地基。结论部分的措辞毫不遮掩:可恢复的、可协调的、连续不断的自我进化(recoverable, coordinated, and continuous self-evolution)。
现在回头看,DeepSeek 这两年的动作全都对上了。今年 5 月组建 Harness 专项团队;8 月初注册了独立的"DeepSeek Harness团队"公众号,头像是一条黑鲸,和主账号的蓝鲸区分开;招聘页面上写着一个公式:Model + Harness = Agent——模型以外的所有工作,都属于 Harness。
7 月 31 日 V4 Flash 的更新日志里甚至提前漏了一句:正式版模型将使用 DeepSeek Harness 极简模式作为框架进行测试。Harness 还没发布,已经在给自家模型当裁判了。
这不是补一条产品线。这是在模型层之外再抢一层——Agent 运行层——的定义权。
这篇论文,为什么偏偏出自 DeepSeek
最后讲两个人。
论文一作 Yifan Shi,北京大学和 DeepSeek 联合署名。他在开源社区更出名的名字是 Shigma——就是 Koishi 的作者。一个管理 4000 多个社区插件的人,被"装容易、干净卸载难"这件事反复刺伤了四年,最后把工程教训写成形式化理论,带进了 DeepSeek。
里尔克写过:「有何胜利可言?挺住意味着一切。」
被同一个问题刺了四年还不肯放手的人,配得上这句诗。
论文里还有另一位作者,Tianyi Cui,DeepSeek 署名。这个名字和公开报道里 Harness 团队的负责人崔添翼对得上——浙大毕业,在 Jane Street 做了很多年,后来联合创立量化交易机构 TSY Capital。
一个被插件生态刺伤了四年的人,一个从量化交易转行过来的人,在 DeepSeek 汇合,要给软件重写组合的公理。
这不符合我们对理论的想象。我们总以为理论是学院派设计出来的,坐在办公室里推公式。但真正立得住的理论几乎都走同一条路:先被现实打出血,再把伤疤公理化。
忒修斯之船
普鲁塔克在《忒修斯传》里记过一个著名的悖论。雅典人把忒修斯归航的船留下来当纪念碑,木板烂一块,就换一块新的。换到最后,没有一块木板是最初的——
它还是原来那艘船吗?哲学家为这个问题吵了两千年。
软件行业回避了这个问题四十年。答案一直是耍赖:不换木板,整条船换掉。重启进程,重新部署,把旧船凿沉,造一艘新的。
8 月 13 日之后,有人开始认真回答它了。88 页纸,从一条公理推到一整片海。
而忒修斯之船真正的答案,也许根本不是"它还是不是那条船"——
能一边航行、一边换掉自己身上每一块木板的船,才一直是船。
夜雨聆风