一句话看懂:DeepSeek Harness 没有把模型、工具、会话、沙箱这些能力写进固定内核,而是全部交给基于 Cordis 的插件树在启动时动态挂载。这套架构试图解决插件系统”注册容易撤销难、初始化容易回滚难”的老问题,也决定了 Agent 运行时能有多灵活。
事件核心:发生了什么
2026 年 10 月 3 日,开发者潘锦在掘金发布文章,拆解 DeepSeek Harness 的 Cordis 插件架构。核心信息是:Harness 把模型、工具、会话、沙箱、文件系统、Agent 循环、调度和 UI 全部实现为插件,系统不存在承载产品能力的固定内核。Cordis 本身只维护上下文、服务注册、事件分发、依赖激活和副作用回收,官方定位是”时空可组合的元框架”。
技术上,Cordis 用 Fiber 管理插件生命周期,插件通过 inject 声明依赖,依赖齐备才激活,缺失则停留在 PENDING;卸载时按注册逆序执行清理。DeepSeek 还把 Cordis 源码放进 vendor/ 目录,固定在特定上游提交并重映射到 @deepseek-ai 命名空间,自行维护 Fiber 重入卸载加固、配置更新事务等修改。
为什么重要
Agent 运行时的组件变化频率远高于传统软件:工具、提示词片段、模型适配器、审批策略都可能随会话调整。如果每次扩展都要引入 Eclipse 或 OSGi 那样的重量级模块边界,团队大概率会绕过框架,退回全局数组。Cordis 把扩展单元压缩到一个函数或 Service 子类,让细粒度组装在 TypeScript 应用内可行。
更深一层的意义在于依赖和生命周期的失控风险。Agent 能执行 Shell、改文件、访问网络,插件卸载出错会留下进程、监听器或权限状态。Harness 选择把框架层代码白盒化,是可审计性的取舍,也意味着它承认这类运行时必须自己承担机制风险。
对用户/开发者/创作者的影响
对开发者而言,这套模型提供了两类隔离:isolate 按服务名创建 realm,让两个 Agent 可以用不同的 ctx.llm 实例;dsh-scope 用不透明对象作为 scope key,控制同一工具注册表里哪些条目对当前 Agent 可见。Agent preset 挂在长期 scope 下,并发首次使用 single-flight 共享挂载,文件变化后新会话加入新代际、旧会话保留原配置,避免运行中途换工具。
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
代价是认知成本。插件作者要同时理解 Context 父链、服务 realm、业务 scope 父链和事件过滤方向,类型系统无法证明运行时挂载位置。文章也指出,若只需单进程单 Agent,引入整套空间语义偏重;配置热更新采用整块替换而非深度合并,使用上略显笨重。
值得关注的后续
一是 preset 挂载审计能否覆盖更多泄漏场景。文章提到 DeepSeek 会拒绝把服务发布到 root realm 的配置,防止会话级组合退化成进程全局状态,这类运行时审计比文档警告更值得观察。
二是代际保留的内存成本。旧代际要保留到整棵运行时退出,配置频繁变化时内存按代际增长,实际生产环境的表现值得跟踪。
三是被锁定在 vendor/ 的 Cordis 后续如何跟进上游。本地修改越多,与上游分叉的风险越高,目前公开信息显示 DeepSeek 选择以明确的维护成本换取框架层可控性。
来源:juejin


