DeepSeek Harness 拆解:模块化 Agent 架构设计解析
当大模型能力逐渐趋同,Agent 产品的竞争焦点正在向运行时架构转移。DeepSeek 推出的首款 Agent 产品 DeepSeek Harness,将核心设计理念定义为「everything is a plugin」,将模型接入、工具执行、会话管理乃至界面交互全部纳入插件机制。这套架构背后依赖的是开源项目 Cordis,其设计哲学值得深入探讨。
Fiber 生命周期与 effect 撤销栈
Cordis 的核心创新在于「可逆副作用」机制。传统插件系统面临一个根本问题:卸载插件时,如何确保它对系统所做的所有修改都被完整撤销?Cordis 给出的答案是将每一次上下文变更都通过 ctx.effect() 原语完成,包括服务注册、事件监听、定时器启动、组件挂载等。这些 effect 在注册时立即执行,同时返回一个撤销函数,被推进 disposables 列表。卸载时,所有撤销函数按 LIFO 顺序执行——后注册先撤销,确保清理顺序的正确性。
Preset 的两层 Scope 链设计
Fiber 是插件实例的生命周期状态机,包含 PENDING、LOADING、ACTIVE、FAILED、DISPOSED、UNLOADING 六种状态。当插件声明依赖某个服务时,对应的 Fiber 会停在 PENDING 状态,直到依赖在依赖链上出现才会激活。这种基于依赖的自动激活机制实现了「空间可组合性」——组件在依赖出现后自动启用,在依赖消失后自动停用。值得注意的是,子 Fiber 的销毁函数本身也是通过父 Fiber 的 effect 注册的,形成递归的撤销结构,确保卸载一个插件时会连带按栈顺序拆干净它的所有子插件。
没有时间可组合性,每次自我修改都迫使完整重启,丢弃所有进程内累积状态;更糟的是,一个有缺陷的自我修改可能废掉唯一能用来恢复的那个进程。
“Cordis 设计论文”积墨 AI 智能体开发平台
快速搭建具备商业价值的 AI 智能体,支持复杂工作流编排、50+ 主流模型接入与私有化部署。
Code Mode 与工具编排
Preset 机制解决了配置复用问题。一份预设是一个包含 agent.cordis.yml 配置文件的目录,可被多个会话共享复用。从全局到预设是一次真实的上下文派生,在 Cordis 上下文树中真实创建一个节点;从预设到具体会话则使用 WeakMap 记录「逻辑上级」关系,不在 Fiber 树中新增节点。这种拆分使预设的标准挂载实例只创建一次,后续任意多个会话共享同一实例,通过表查找快速绑定。工具可见性则通过分层遮蔽算法决定:祖先 scope 按优先级覆盖同名条目,当前 scope 注册的工具优先于继承和限制规则。
工程启示与架构演进
Code Mode 允许模型通过编写代码来编排多个工具调用,减少往返次数。DeepSeek Harness 选择 worker_threads 而非 vm2 或 V8 isolate 作为隔离方案,核心考量是同进程沙箱存在原型链逃逸风险。独立工作线程提供了真正隔离的 V8 堆和可从外部强制终止的执行环境。代码执行时,工具调用通过消息通道完成,共享与结构化工具调用同一套执行内核——同一套并发控制、同样的前置检查和质量门。
如有侵权,请联系删除。
