在从单机 Prompt 原型向双 11 级大规模分布式多智能体集群演进的过程中,系统架构面临着前所未有的膨胀与混沌风险。如果不加节制地在业务层直接混杂大模型 API 调用、Prompt 模板拼接、向量库检索及消息中间件发布,系统将迅速沦为一个无法维护、无法单测、牵一发而动全身的“大泥球”(Big Ball of Mud)。第一周(W1)的技术收官之作,旨在系统性阐述领域驱动设计(DDD)中的限界上下文(Bounded Context)、洋葱架构(Onion Architecture)以及适配器模式在生产级 Multi-Agent 集群中的实战应用,为构建高内聚、低耦合的现代化 AI 架构树立标杆。
1. 复杂 Agent 系统架构腐化根源剖析
在传统的面向对象或微服务体系中,系统的输入与输出是强类型且确定性的;而在 Agent 系统中,大模型的输出具有高度的概率性与非结构化特征。典型的腐化表现为:
- 模型供应商强绑定:底层业务代码深度依赖某特定厂商(如 OpenAI、Anthropic)的专有 SDK 和参数格式,一旦模型降级或价格调整,全量业务模块需要推倒重构。
- Prompt 与业务逻辑混淆:Prompt 模板硬编码在业务服务类中,版本迭代缺乏生命周期管理,无法对 Prompt 变更做灰度放量与 A/B 测试。
- 状态外溢与上下文污染:Agent 的短期会话记忆、长期图谱记忆与瞬时计算上下文没有清晰的读写界限,导致状态并发读写冲突与内存泄漏。
graph TD subgraph BadArch[架构坏味道:高耦合泥球模型] BizLogic[业务模块] -->|直接耦合| VendorSDK[专有 LLM SDK] BizLogic -->|直接拼接| HardcodedPrompt[硬编码 Prompt 字符串] BizLogic -->|直接操作| RawDB[裸数据库与向量表] BizLogic -->|直接处理| MsgQueue[Kafka/MQ 客户端] end subgraph GoodArch[高内聚低耦合:四层整洁架构] Domain[领域核心层: 规划/仲裁/状态机] App[应用编排层: 多 Agent 流程驱动] Port[端口抽象层: ModelPort, MemoryPort, ToolPort] Adapter[适配器层: DeepSeek, Milvus, Redis, MCP] Domain --> App App --> Port Adapter -.->|依赖倒置实现| Port end2. 基于端口与适配器(六边形架构)的模型解耦
为了做到“大模型可插拔、向量库可替换、工具集动态挂载”,必须在系统设计中彻底贯彻依赖倒置原则(Dependency Inversion Principle)。领域核心层只依赖抽象的接口定义(端口),具体的实现细节下沉至外部适配器。
2.1 核心端口定义与领域模型契约
package domain import ( "context" "io" ) // CompletionRequest 领域统一大模型推理请求契约,屏蔽外部厂商字段差异 type CompletionRequest struct { SessionID string `json:"session_id"` SystemPrompt string `json:"system_prompt"` UserPrompt string `json:"user_prompt"` Temperature float32 `json:"temperature"` Tools []ToolDefinition `json:"tools"` Metadata map[string]string `json:"metadata"` } // ToolDefinition 领域通用工具契约 type ToolDefinition struct { Name string `json:"name"` Description string `json:"description"` Parameters []byte `json:"parameters"` // JSON Schema } // CompletionStreamChunk 领域统一流式输出切片 type CompletionStreamChunk struct { DeltaText string `json:"delta_text"` ToolCallName string `json:"tool_call_name"` ToolCallArgs string `json:"tool_call_args"` IsFinished bool `json:"is_finished"` UsageMetrics map[string]int `json:"usage_metrics"` } // ModelProviderPort 模型供应商端口抽象 type ModelProviderPort interface { StreamCompletion(ctx context.Context, req CompletionRequest) (<-chan CompletionStreamChunk, <-chan error) HealthCheck(ctx context.Context) error } // MemoryPort 持久化记忆端口抽象 type MemoryPort interface { RetrieveWorkingMemory(ctx context.Context, sessionID string) ([]string, error) PersistEpisodicMemory(ctx context.Context, sessionID string, content string, vector []float32) error }3. 动态模型适配器实现与故障注入切换
通过端口抽象,上层 Agent 状态机无需关心当前调用的是 GPT-6 Astra、DeepSeek-V4-Pro 还是私有部署的开源模型。当主供应商出现故障时,应用编排层可以依据熔断策略毫秒级平滑降级。
package adapter import ( "context" "errors" "sync/atomic" "your_project/domain" ) // DynamicModelRouter 动态多模型路由适配器 type DynamicModelRouter struct { primaryProvider domain.ModelProviderPort fallbackProvider domain.ModelProviderPort isDegraded atomic.Bool } func NewDynamicModelRouter(primary, fallback domain.ModelProviderPort) *DynamicModelRouter { return &DynamicModelRouter{ primaryProvider: primary, fallbackProvider: fallback, } } // StreamCompletion 自动处理供应商主备切换与熔断降级 func (r *DynamicModelRouter) StreamCompletion(ctx context.Context, req domain.CompletionRequest) (<-chan domain.CompletionStreamChunk, <-chan error) { if !r.isDegraded.Load() { // 优先尝试主模型提供商 chunkCh, errCh := r.primaryProvider.StreamCompletion(ctx, req) select { case err, ok := <-errCh: if ok && err != nil { // 主模型报错,自动标记降级并走备用通道 r.isDegraded.Store(true) return r.fallbackProvider.StreamCompletion(ctx, req) } default: // 正常流式推进 return chunkCh, errCh } } // 降级态走备用模型提供商 return r.fallbackProvider.StreamCompletion(ctx, req) }4. 限界上下文清晰划分规范
在大规模 Agent 系统中,按照领域职责划分为四大核心限界上下文,各上下文之间禁止直接数据库共享,必须通过 gRPC 或事件总线(Kafka)进行通信:
- 认知规划上下文(Cognitive Planning Context):负责意图识别、复杂任务拆解(DAG 生成)、动态反思与自纠错。只处理认知抽象,不感知物理 IO 细节。
- 工具编排上下文(Tool Orchestration Context / MCP):维护工具集群拓扑、鉴权、代码沙箱执行、重试退避与参数校验。
- 记忆沉淀上下文(Memory Persistence Context):负责多轮会话摘要压缩、高维向量检索、实体图谱抽取与自适应遗忘算法。
- 评测观测上下文(Observability Context):基于 OpenInference 采集全链路 Trace,执行步骤级幻觉打分、Token 消耗统计与异常熔断报警。
5. 第一周(W1)架构演进总结与收益
在第一周(10/01~10/07)的密集生产实战中,我们完成了从单体 Agent 原型向高内聚低耦合生产集群的质变跃迁:
- 变更解耦率:引入 ModelPort 与 MemoryPort 后,底层模型供应商切换与向量库索引升级对上层 Agent 业务代码的修改行数为0 行。
- 模块独立单测覆盖率:通过对端口实施 Mock,多 Agent 复杂编排状态机的单元测试覆盖率从最初的 23% 提升至89.5%。
- 系统可用性表现:在第一周两次云端大模型网络抖动故障演练中,多 Agent 集群凭借适配器层动态降级与重试机制,实现了业务端99.98%的请求成功率。
本白皮书标志着第一周(W1)基础架构基线的全面确立,为第二周(W2)深入展开复杂领域场景落地提供了坚实的方法论底座。