在 AI 超级智能体项目中,你是怎么实现分层智能体架构的?
- 标签:后端、编程导航
🏛 业务架构师
我的分层智能体架构是**"管理层-专家层-工具层"三级**,对应组织的"主管-专员-工具":
- 路由/规划层(Manager):接收用户目标,判断意图、拆解任务、分派给专家——不执行具体工作,只做调度与结果汇总(类似组织里拆解需求、协调资源的角色);
- 专家层(Experts):按领域划分的执行 Agent——行程规划 Agent、搜索分析 Agent、文档生成 Agent,各自有专属的 system prompt、专属的工具子集、专属的循环参数;
- 工具层:搜索、地图、PDF、MCP 服务等原子能力,被专家调用。
为什么分层(业务架构的三个理由):
- prompt 聚焦 = 质量提升:一个"什么都会"的 Agent 的 system prompt 会膨胀到自相矛盾;专家 Agent 的提示词短而精准——角色越纯,指令遵循越好,这是实践反复验证的规律;
- 工具菜单缩小 = 选择更准:给全能 Agent 20 个工具,误选率飙升;专家只看自己的 5 个——上下文里的可选项越少,决策越可靠;
- 独立演进与评测:每个专家有自己的评测集与迭代节奏——行程 Agent 调优不影响搜索 Agent,失败可归因、优化可并行。
治理配套:分派日志全链路记录(哪个专家、用了什么工具、花了多少 token)——成本与质量按层归因;Manager 层保留"任务超预算熔断"的总闸。
一句话:分层不是技术炫技,是把"大而全的不可控"换成"小而专的可运营"——与人类组织的设计逻辑同构:分工换质量,层级换可控。
🏗 系统架构师
我的分层智能体架构:"入口路由 → 规划层 → 执行层 → 工具层",每层职责单一:
1. 路由层(Router Agent):轻量模型 + 结构化输出,把用户请求分类(闲聊/知识问答/工具任务/复杂任务)并路由到对应处理链——80% 简单请求不进昂贵的规划循环,成本与延迟双控;
2. 规划层(Planning Agent):强模型。复杂任务先产出任务计划(步骤列表 + 各步所需能力),执行中根据结果动态修订(插入/跳过/重排步骤);维护全局上下文与目标状态;
3. 执行层(Executor Agent):按计划逐步执行——ReAct 循环(think → act → observe),决定调用哪个工具、传什么参数、结果是否满足预期;每个子任务独立上下文(隔离,避免长任务上下文污染),完成后向规划层汇报摘要;
4. 工具层:本地 @Tool 工具 + MCP 远程服务(搜索/地图/PDF/图片),统一 ToolRegistry 管理与鉴权。
关键机制:
- 上下文分层传递:规划层只下发"任务描述 + 必要背景",执行层回报"结果摘要"——防止全量上下文逐层膨胀;
- 护栏内建:每层最大步数、超时、token 预算、循环检测;
- 失败上抛:执行层重试耗尽后上报规划层,由规划层决定重规划还是降级回答。
为什么分层:单层 Mega-Agent 上下文爆炸、职责不清、成本失控;分层后"规划用强模型、执行用中模型、路由用便宜模型"的成本分级成为可能,且每层可独立测试与演进——这就是软件分层思想在 Agent 上的直接应用。
💻 全栈开发专家
分层智能体 = 路由层 → 规划层 → 执行层(多个专职 Agent)→ 汇总层,我用 Spring AI 的 ChatClient 组合实现:
text
用户请求
→ ① 路由 Agent(小模型,快):意图分类
闲聊 / 知识问答 / 复杂任务 / 工具请求
→ ② 规划 Agent(强模型):复杂任务拆解为 todo 子任务
"调研竞品并出报告" → [搜索竞品A, 搜索竞品B, 分析对比, 生成PDF]
→ ③ 执行层(专职 Agent 池,各自独立 prompt + 工具 + 上下文窗口):
RAG 问答 Agent(知识库检索)
搜索 Agent(联网工具)
写作 Agent(长文本生成)
文件 Agent(PDF/图片)
——子任务按类型派发,可并行(CompletableFuture)
→ ④ 汇总 Agent:合并各子结果,统一口径输出Spring 实现:每层一个 ChatClient Bean,各自挂不同 advisor/tools;编排服务负责流程与上下文传递(子 Agent 间只传"任务描述+结构化结果",不传全量历史)。
为什么分层(工程理由):
- 单一职责的 prompt:每个 Agent 的 system prompt 短而专注,比一个巨型 prompt 什么都干的效果好得多;
- 模型成本优化:路由用便宜小模型,规划/生成用强模型——按层选型;
- 上下文隔离:长任务不会把主对话上下文撑爆;
- 可独立迭代测试:每个 Agent 有自己的评估集,改一个不影响全局。
踩坑:层间传"结构化结果"(record)而不是自然语言长文,否则汇总层又被 token 撑爆。