Skip to content

怎样控制 AI Runtime 各模块的依赖关系并避免循环依赖?

题型:深入 · 需要讲出依赖方向、接口归属和事件边界。

建议回答

核心原则是让业务编排依赖能力接口,让基础设施实现反向依赖这些接口。Agent Runtime 可以依赖 Retriever、ToolExecutor、MemoryStore、ChatModel 等端口,但不直接依赖 Milvus、PostgreSQL、MCP 或具体模型 SDK。接口应放在调用方所理解的领域边界中,实现放在适配层;模块之间只交换明确的 DTO、领域事件和错误类型,避免共享可变对象。

对在线执行链,StateGraph 是编排者,其他模块提供能力,不反向调用 Agent。对 Ingestion 等长流程,使用任务状态或领域事件传递进度,避免在线模块与离线模块互调。若出现循环依赖,通常说明职责混杂,应抽出公共契约或重新确认谁拥有流程控制权。

可落地做法

  • 通过架构测试限制包依赖方向。
  • SPI 与厂商适配实现分层,配置层负责装配。
  • 统一异常分类,但保留模块自己的错误上下文。
  • 跨模块数据使用 ID 和不可变快照,不共享持久化实体。

易错点

  • 公共模块不能成为什么都放的杂物间。
  • 为消除编译依赖而全部改成消息通信,会增加一致性和排障成本。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。