乐于分享
好东西不私藏

一切皆插件:DeepSeek Harness 的底座 Cordis,凭什么让模型自己组装工具

一切皆插件:DeepSeek Harness 的底座 Cordis,凭什么让模型自己组装工具

参考阅读:

  • 《可逆的插件系统》(Koishi 官方文档,作者 Shigma 亲笔):koishi.chat/zh-CN/cookbook/design/disposable.html
  • 《A Programming Paradigm for Spatiotemporal Composability》(Cordis 背后的形式化论文):github.com/cordiverse/paper

这两份材料都值得读,但说实话都不太好啃:一篇是形式化论文,通篇的"时空可组合性""可逆副作用";一篇是给开发者看的框架设计原理,默认你已经写过插件了。这篇文章想做的事,就是把它们拆开揉碎,用大白话讲清楚——Cordis 到底是什么,为什么 DeepSeek 会选它当内核。

一个"没有具体能力"的框架,成了大厂产品的内核

昨天,DeepSeek 开源了它的开发者预览版DeepSeek Harness。上线不到一天,GitHub 上的星标就冲到了七万多。项目的口号只有五个字:一切皆插件

模型是插件,工具是插件,沙箱是插件,存储是插件,连界面、连"Agent 自己循环干活"的那套逻辑,也是插件。想换掉任何一块,不用动源码,改配置就行——像给车换零件,而不是拆发动机。

插件化不是什么新鲜事,WordPress、VS Code、Chrome 都这么干。但真正让人讨论起来的,是藏在 Harness 底下的那个底座——Cordis

这个框架有意思的地方在于,它本身什么能力都没有。不写代码,不跑模型,不存数据,只干一件事:负责插件的装上、运行、卸载。如果 Harness 是 AI 的舞台,Cordis 就是支起舞台的那套钢架——自己不会演戏,但没有它,所有演员都只能站在平地上。

最让我觉得有意思的是,这个被 DeepSeek 选中当内核的框架,作者是个独立开发者,而且它最早是拿来跑聊天机器人的。顺带一提,Cordis 这个名字来自拉丁语,意思是"心"——作者说,他希望它成为未来软件的核心。这话放今天看,多少有点一语成谶。

从"聊天机器人底座"到"AI 产品内核"

Cordis 的作者叫 Shigma。独立开发者的圈子里,人们更熟悉他另一个作品——Koishi,一个跨平台的聊天机器人框架。QQ、Discord 群里那些会聊天的机器人,不少就是 Koishi 搭的,插件随便装:天气、抽卡、群管理,装一个多一个本事,卸一个干干净净。

Koishi 的底层需要一个能把插件管明白的框架,这就是 Cordis 的前身——一开始,它只是 Koishi 的"家底"。

后来 Shigma 干脆把它从 Koishi 里抽出来,重写成一个通用的元框架。元框架听着玄,说白了就是"管框架的框架"——不解决任何具体问题,只定一套规矩,让任何能力都能被装进去、被依赖、被拔掉。

再后来,DeepSeek 做 Harness 时没有自己重造轮子,直接把 Cordis 整个"内置"进来当内核。一个从聊天机器人社区里长出来的框架,最后成了大厂 AI 产品的骨架——这件事本身就说明问题了。

两个词,讲透 Cordis 的核心哲学

我第一次看到 Cordis 背后的论文标题时,差点没读下去——A Programming Paradigm for Spatiotemporal Composability,里面还塞着"可逆副作用""响应式依赖"这种词。翻译成人话,其实都是我们每天都在用的东西。

第一个词:可逆副作用。

副作用,就是插件运行时留下的"痕迹":注册的指令、占用的资源、发出去的消息。装插件最怕什么?怕卸不干净。Windows 卸载软件后残留的注册表、浏览器里赖着不走的工具栏,都是"卸不干净"的经典案例。

Cordis 的规矩很硬:任何插件留下的任何痕迹,都必须自带"撤销键"。插件被拔掉的那一刻,所有痕迹像倒带一样还原——不是"尽量清理",是必须清干净。有点像俄罗斯方块:消掉的那行严丝合缝地消失,画面回到它出现之前。

作者把这套能力叫作Disposability(可逆性)。他写过一篇文章讲自己为什么较真这件事,开头就问:"软件文明在退步吗?"理由是:在 C 语言时代,打开文件、申请内存,你都知道用完要还回去;可到了现在的框架里,注册一个中间件、挂一个组件,几乎没人告诉你该怎么撤销。插件装的时候轰轰烈烈,卸的时候只能靠重启。所以他把"可逆性"当成 Cordis 的立身之本——而不是一句口号。

这对开发者很值钱:生产环境里可以放心装上、试错、拔掉任何插件,不用怕系统变成一团乱麻。一个系统敢不敢让人随便试,就看它能不能随便还原。

第二个词:响应式依赖。

插件不是孤立的。一个工具插件可能依赖"LLM 服务",LLM 服务又依赖"配置读取"。过去这类依赖怎么管?靠人肉:手动排好启动顺序,A 先起来,B 再起来,顺序错了就报错。

Cordis 换了个思路:你只管声明"我依赖谁",谁先谁后,框架自己算。就像家电买回家插上电就能用,没人需要操心"这个插头必须在那个插头之前通电"。而且这种依赖是活的:某个服务临时挂了,依赖它的插件会等着或降级,而不是直接崩掉。

这两个词合在一起,就是论文标题里那个"时空可组合性":时间上,装过的都能卸干净;空间上,谁依赖谁由系统自动管。插件可以随时进来、随时退出,系统始终自洽。论文想证明的是,插件化不是工程上的妥协,而是一种能严格证明的编程范式。

为什么这件事值得被看见

软件正在变得越来越复杂。一个 AI 应用里,模型、工具、权限、存储、界面,几十个零件挤在一起。过去大厂的思路是"加厚内核":把什么都焊死在核心代码里,想换一个零件就得动手术。Cordis 走的是另一条路:内核保持极薄,能力全部外置。升级、替换、试验,都发生在"插拔"这层,而不是"手术"这层。

这套设计不是拿来炫的。一个系统能不能安全地装上和拔掉零件,决定了它能不能快速演进。对 AI 产品这种每天都有新工具、新模型冒出来的领域,这几乎是生死问题。

说起来有点意思:做这件事的人,最初只是想把自己的聊天机器人安顿好;把它推向主流的,是七万颗星背后的全球开发者。有些架构思想不会因为出身"小圈子"就变小——只要它是对的,总会有人把它用起来。