DeepSeek Harness 底下藏的那个「可组合性」秘密,终于有人把它讲清楚了

DeepSeek Harness 底下藏的那个「可组合性」秘密,终于有人把它讲清楚了


如果我告诉你,DeepSeek Harness 现在 15 万 Star、支撑着全球数十万开发者的 AI 编程 Agent 框架,它的插件系统底层依赖的核心理论,来自一个只有 5,607 Star 的独立项目——你会想看看它吗?

这个项目叫 Cordis

它是什么

Cordis 自称是一个”时空可组合性元框架”(Meta-Framework of Spatiotemporal Composability)。光看这个名字挺唬人,但说人话就是:它解决了一个很具体的问题——

当你有几十个插件/模块/服务要在同一个运行时里共存,它们之间互相依赖、互相拦截、互相修改行为,你怎么保证它们能和平共处,而且随时可以加进去、拔出来而不把系统搞崩?

这个问题,传统的依赖注入解决不了,现有的中间件方案也解决得不彻底。

它怎么解的

Cordis 的思路来自一篇 2026 年 8 月刚更新的论文 A Programming Paradigm for Spatiotemporal Composability,核心是两个正交维度:

  • 时间可组合性(Temporal Composability):每个组件的副作用都是可逆的——装上去会产生效果,拔掉来效果自动消失,不需要手动 cleanup。
  • 空间可组合性(Spatial Composability):组件之间通过声明式依赖(coeffect)互相感知,一个组件依赖的服务就绪了才启动,依赖变了会自动通知。

这两个维度叠加在一起,就构成了 Cordis 的”组件”概念。每一个 Cordis 组件不是简单的函数或对象,而是一个带inverse的 effect + 一个 reactive 的 coeffect 声明。

它在 DeepSeek Harness 里怎么用

DeepSeek Harness 是 Cordis 最大的用户,也是它最重要的应用场景。在 Harness 里你会看到 Cordis 的实际形态:

// 工具流水线属于 ctx.tools 域
ctx.on('tools:beforeCall', async (req, next) => {
  // 拦截工具调用,加日志 or 鉴权
  return next();
});

// 模型流式输出属于 ctx.llm 域
ctx.on('llm:stream', async (chunk, next) => {
  // 包装流式输出,修改格式
  return next(chunk);
});

// Agent 协调属于 ctx.agents 域
ctx.on('agents:plan', async (plan, next) => {
  // 策略监听器可以在有决策权时直接返回,跳过下游
  if (canDecide(plan)) return makeDecision(plan);
  return next(plan);
});

每个 ctx.on() 注册的都是一个可拆卸的副作用——调用 disposer() 就撤销一切,不留残余。这对需要动态加载/卸载插件的 AI Agent 系统来说简直是刚需。

分发模式:四种语义

Cordis 的事件分发不只是简单的”发布-订阅”,它区分了四种模式,分别对应不同的调用语义:

模式 是否 await 返回值 执行顺序
emit 注册顺序观察
waterfall 注册顺序包装,可短路
parallel 所有监听器并行
serial 注册顺序依次执行

其中 waterfall 是最有趣的一个——每个监听器收到 (args, next),调用 next() 执行下游,下游返回值会经过当前层包装后才返回。如果某层不调用 next() 直接返回,就形成短路。这在策略模式(security check、permission guard)里极其有用。

适合谁 / 不适合谁

适合:

  • 正在构建 AI Agent 框架,需要一套可靠的可插拔插件架构
  • 对 Effect System / 函数式编程有一定了解,想在运行时层面实现可逆副作用
  • 需要在插件之间做多层拦截和转换,比如同时处理工具、模型流、Agent 决策

不适合:

  • 只想快速接个 API 跑起来的应用开发者——Cordis 门槛较高,你需要先理解 Effect 和 Context 的概念
  • 已经在用成熟框架(LangGraph、AutoGen 等)的团队——除非你想自建 Harness 级别的系统
  • 对 TypeScript 不熟悉的同学——Cordis 完全基于 TypeScript,类型声明是理解它的重要部分

实际门槛

Cordis 目前的 API 仍处于活跃开发阶段,文档明确标注:

Cordis is under active development. The API is not yet stable and may change without notice.

这意味着你不应该把它用在生产核心路径上拿来做关键依赖。但如果你是在做框架层面的研发,或者想深入理解 DeepSeek Harness 这类系统的底层原理,现在正是介入的好时机——代码量不大,概念清晰,Paper 和 Primer 文档配套完整。

下一步建议

  1. 读一下那篇 Paper(才几页,核心贡献就两节),理解”时空可组合性”为什么要比传统 DI 更好
  2. 看 DeepSeek Harness 的 Cordis Primer,理解它在实际系统里怎么用
  3. 如果你正在写自己的 Agent 框架,试着把某个功能迁移到 Cordis 插件形式——比如加一个工具调用拦截器,体验一下”插进去就生效,拔掉就不影响”的感觉
  4. 关注 cordiverse/cordis 的 releases,API 稳定之前 minor version 可能还会有 break change

Cordis 不是一个让你明天就能跑 AI 应用的项目,但它是一个让你对”怎么设计一个真正模块化的 AI 系统”有更深刻理解的东西。DeepSeek Harness 选它做底层不是没有原因的。

评论区

0 条评论

登录后可评论。

智源·AI 开源观察 1526 阅读