ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

混合型AI智能体管理平台:从Demo到生产环境的关键设计

混合型AI智能体管理平台:从Demo到生产环境的关键设计

智能体项目做到第三个月,我最大的感触是:让单个智能体“变聪明”已经不是门槛,让一堆智能体“听话地干活”才是门槛。Demo 里每个 Agent 都很惊艳,能写邮件、能查库存、能回工单;可一旦把这些智能体混进真实业务流程,问题就一串串往外冒——它现在在处理哪个任务?上一步调外部 API 花了多少钱?连续失败三次之后谁来接手?需要人工确认的环节卡在哪个队列里?

这些问题的答案,单靠某个 Agent 本身是给不出来的,你需要一个站在所有智能体之上的管理平台。我们内部把它叫作“混合型 AI 智能体管理平台”,它解决的核心矛盾不是“怎么做一个更聪明的 Agent”,而是“怎么让不同模式下的一堆 Agent,在一个可控、可观测、可审计的框架里协作”。

“混合型”这个词是我特别想强调的。它不只是“多个智能体跑在一起”这么简单,而是指工作模式的混合、执行架构的混合、模型供应商与模型规格的混合。这篇文章就把我们搭建这套平台时的设计思路、核心机制、配置方式和踩过的坑整理出来,适合正在把智能体从 Demo 推向生产环境的团队,也适合做 AI 平台基础设施的开发者参考。

1. 先搞清楚“混合型”到底在混合什么

1.1 三种工作模式的混合:全自主、人工审核、规则触发

我见过很多团队的误区是:既然上了智能体,就希望它全程自己跑、自己决策、自己执行,把“人”完全踢出环路。真实业务根本没这么简单,订单金额大的退款、群发邮件、对外报价,这类操作如果让 Agent 全自动处理,出了问题连追责都难。所以我们在平台里一开始就把智能体的工作模式拆成三种:

  • 全自主模式:智能体独立完成从感知、决策到执行的全流程。适合低风险、高频率、边界清晰的任务,比如工单自动分类、邮件信息抽取、库存数量核对。
  • 人工审核模式:智能体负责把流程推进到某个关键节点,然后停下,等人确认后再继续。适合高风险操作,比如退款审批、合同条款修改、对外发送消息。
  • 规则触发模式:不靠模型自主判断要不要执行,而是由明确规则决定,比如命中“客户投诉”关键词自动升级、超过指定金额自动冻结。

这三种模式不是割裂的,同一个智能体在不同场景下会切换模式。比如我们的订单处理智能体,普通订单全自主处理,订单金额超过五千元就进入人工审核模式,客户标记为高价值用户时直接触发规则升级到 VIP 通道。管理平台要做的第一件事,就是把这种“混合工作模式”用配置的方式固下来,而不是让每个智能体自己拍脑袋决定该不该等人。

实际落地的时候,工作模式不应该写死在代码里,最好作为智能体注册时的元数据。平台统一维护一份模式状态,运行时能动态调整,这样你才能在后端对某个智能体做“全局降级”——比如活动期间流量突增,人工来不及审,就把所有智能体从人工审核临时切到规则触发,等流量过去再切回来。

1.2 两种执行架构的混合:集中编排与分布式执行

第二个维度是架构层面的混合。我们在设计初期纠结了很久:到底采用集中式编排,还是让每个智能体完全自治?

集中式编排的好处是状态可见、调度统一、审计方便,所有任务都由中心节点分配和记录。坏处也明显:中心节点成为瓶颈,Agent 数量一多,任务吞吐被编排器卡死;单点故障会让所有智能体停摆。而完全分布式自治,每个 Agent 自己监听事件、自己决定动作,好处是灵活、扩展性强,坏处是状态散落各处,出问题根本无从排查——你都不知道是哪个环节丢了一个订单事件。

最终我们采用的是混合架构:编排中心负责流程定义、路由策略、状态汇总和人工闸口的控制,但具体执行动作由分布在各自服务里的 Agent 完成。编排中心像一个调度室,只负责给任务派发和登记状态,不负责替 Agent 跑腿。Agent 拿到任务之后,在自己所在的进程里调用模型和工具,执行完再把结果回传给编排中心。

这种设计最大的好处是解耦。Agent 可以继续待在自己的业务系统里,保留独立的扩缩容能力;编排中心则聚焦“流程与治理”,两者通过异步消息或 API 通信。我们当时迁移的时候,甚至没动大多数 Agent 的核心逻辑,只加了一层注册和执行结果上报的封装,成本很低。

1.3 模型与供应商的混合:大小模型混跑

还有一个容易被忽略的“混合”,是模型层面的。很多团队以为上了智能体就必须统一用一个旗舰大模型,其实完全没必要,成本上会先把你压垮。

我们在平台里做了一个模型路由层,让不同任务自动选不同的模型:简单的信息抽取、意图判断、文本分类,用便宜的小模型就够了,几百 token 的任务跑一次旗舰模型,成本差几十倍;只有复杂推理、多轮规划、长文本生成才需要把请求路由到旗舰模型。另外不同供应商的模型我们也在混用——既是为了成本优化,也是为了容灾,某个模型服务不稳定的时候可以快速切到另一个。

模型路由不是简单按任务类型硬编码,而是带权重的策略。我们允许在 Agent 配置里声明一个主模型和若干备用模型,平台会按健康状态、实时延迟、预算消耗做动态分配。这一步在管理平台里属于“资源调度”模块,它让我把单 Agent 的模型开销从月均过万压到了几千元。

2. 平台整体架构与设计思路

2.1 核心模块拆解:从注册到治理的完整链路

一个混合型智能体管理平台,本质上要做的事情是四件:让智能体能被“纳管”,让任务能被“调度”,让过程能被“看到”,让风险能被“控制”。围绕这四件事,我们拆出了五个核心模块:

模块核心职责关键技术点
接入注册模块智能体实例的登记、启停、版本管理Agent Schema、启动探针、状态心跳
编排调度模块任务分发、路由策略、重试与降级DAG 流程、规则引擎、队列管理
状态存储模块任务状态、执行记录、决策上下文幂等键、状态机、冷热数据分离
可观测模块Trace、指标、日志的三位一体分布式追踪、结构化日志、指标聚合
治理审计模块权限控制、人工闸口、操作留痕RBAC、审批流、操作回放

接入注册模块是我们最早落地的部分。它的核心是一份 Agent Schema 注册表,每个智能体在接入平台之前,必须提交一份描述自己能力、模式、工具依赖和模型配置的元数据。没有这份元数据,后面的编排调度和可观测都做不起来。你可以把注册表理解成每个员工入职时填的岗位说明书——先说清楚你能干什么、需要什么权限、什么情况下需要请示,公司才能给你派活。

编排调度模块是平台的“大脑”。它维护着一张任务流转图,从“事件触发”到“Agent 执行”再到“结果回写”,中间可以有分支、有等待、有人工节点。调度器不关心 Agent 内部怎么做决策,它只关心任务到哪个节点了、该不该继续、要不要超时重试。

状态存储模块是容易低估的一块。智能体系统本质上是一个分布式系统,任务状态分散在各处,必须有统一的状态视图才能回答问题“现在跑到哪了”。我们用了状态机 + 事件日志的组合:状态机保证节点流转合法,事件日志保证每次流转都有据可查。

可观测模块解决的是“黑盒”问题。杰夫·贝索斯有句话叫“如果你不能度量它,就不能改进它”,智能体系统尤其如此。模型调用的 token 消耗、工具调用的延迟、人工审批的等待时长,这些数据如果你不采集,出问题的时候只能靠猜。

治理审计模块是面向生产环境最后一道防线。它负责权限控制、敏感操作的审批流、全量操作留痕。你不想某个 Agent 用自己的管理员权限去调删除接口,也不想某个智能体未经确认就发出对外邮件——这些风险全部由治理模块兜住。

2.2 为什么选这个架构:对比三套方案后的取舍

在确定这套架构之前,我们其实评估过三条路:

第一条路,完全基于某个现有智能体框架搭建。优点是可以快速跑起来,框架自带 Agent 定义和工具调用能力;缺点是所有智能体被绑定在同一个框架里,团队的存量系统很难接入,框架本身的版本迭代也会卡住我们。

第二条路,完全自研一套智能体运行时,让所有 Agent 都跑在我们的运行时里。优点是控制力最强;缺点是成本极高,相当于同时做一个平台加一个框架,交付周期至少翻一倍。

第三条路就是我们现在走的混合路线:自研管理平台,但不对智能体运行时做强制约束。平台通过一套通用的接入协议与任何 Agent 通信,无论是我们自己开发的、开源的、还是第三方商业的智能体,只要能实现注册、上报、响应控制指令,就能纳管进来。

这个取舍的核心逻辑是:管理的价值在于控制和观测,而不在于替代执行。我们没有理由替每个 Agent 重写一遍执行逻辑,只需要把所有 Agent 的“对外接口”和“行为足迹”统一起来,就已经解决了 80% 的治理问题。

给你一个具体的对比感受:完全自研运行时那套方案,前期工作量预估是 6 个研发两个月;混合架构方案,因为有大量 Agent 逻辑可以复用,4 个研发一个半月就把平台的闭环跑通了。后者还保留了系统演进的空间,未来接入新框架的新 Agent,只需要写一个适配器就够了。

3. 从零搭建的关键配置与实操要点

3.1 智能体接入规范:一份配置描述所有能力

平台运行起来的第一步,是所有智能体按照统一 Schema 注册。我们的注册配置用 YAML 编写,看起来像这样:

# agent.yaml id: order-agent-001 name: 订单处理助手 mode: semi_autonomous # full_autonomous / semi_autonomous / rule_triggered version: "2.3.0" model: primary: provider: default name: small-fast-model # 轻量任务用便宜的快模型 fallback: provider: backup name: large-reasoning-model route_policy: cost_first # cost_first / quality_first / manual triggers: - event: order.status.changed condition: "payload.status == 'paid'" action: process_paid_order tools: - name: order_api auth: scope_order_read_write - name: crm_api auth: scope_customer_read human_approval: required: true when: "payload.pay_amount >= 5000 || customer.tier == 'vip'" timeout: 15m on_timeout: escalate # escalate / auto_approve / auto_reject budget: max_cost_per_task: 0.8 # 单任务模型成本上限,单位 USD quota_per_day: 20.0

这份配置里,我特别想展开讲几个字段,因为它们决定了平台能否真正实现“混合管理”。

mode是工作模式的入口。semi_autonomous表示这个智能体默认半自主,需要在特定节点等待人工确认。route_policy控制模型选择偏好,cost_first模式下平台会自动用小模型跑简单请求,只有复杂任务才升级到旗舰模型。human_approval.when是判断条件,支持基于任务负载的表达式,命中条件时编排器会把任务标记为“等待审批”。budget是成本闸口,单任务超过 0.8 美元或单日超过 20 美元,平台直接就拒绝了,防止模型异常调用把预算打穿。

这份 Schema 我们迭代了四版才算稳定。第一版只有 id、name、model,完全不够用;第二版加了 tools 和 triggers;第三版加上 human_approval 和 budget,是考虑到生产环境的审批和成本问题;第四版才加上 version 和健康检查。我的建议是别一开始就把 Schema 设计得大而全,先让自己手头那两三个智能体能跑起来,再根据新接入的智能体反推 Schema 需要补什么字段。

3.2 编排调度配置:路由规则与人工闸口的设计

路由策略是编排模块的工作重点。我们用一套轻量的规则引擎来配置:每个任务进来,先过一遍规则链,命中什么条件就分给哪个智能体,或者直接进人工队列。

routes: - id: route_high_risk when: "order.risk_score > 0.8" then: type: route_to_agent agent_id: risk-review-agent-002 require_approval: true - id: route_escalate_complaint when: "message.sentiment == 'negative' && message.topic in ['refund', 'delay']" then: type: route_to_manual queue: complaint_queue - id: default_route then: type: route_to_agent agent_id: order-agent-001

这套路由的三个关键经验,都是我们在线上吃了亏才总结出来的。

第一,兜底路由一定要有。你可能觉得所有条件都覆盖了,实际运行中总会冒出来没见过的组合,没有 default_route,任务就会积压成死信。我们第一版没写兜底,结果某个晚上新的订单类型上线,路由全部落空,一批订单卡了一整夜。

第二,人工闸口不能只有“是否审批”这个布尔开关,还需要配套超时和升级策略。配置里的timeout: 15m表示如果人工审批十五分钟没响应,就升级到escalate策略,把任务推给更高级别的人员处理。如果不加超时,你就等着任务队列里挂一串无人响应的僵尸审批吧,这事我们也经历过。

第三,规则表达式要保持纯净。所有路由判断的数据必须来自同一份标准化事件负载,不能在规则里直接访问 Agent 内部状态。否则规则引擎变成一团乱麻,调试的时候没人说得清一个任务为什么被分到了一号 Agent 而不是二号 Agent。

3.3 可观测性机制:全链路追踪与关键指标

智能体系统的可观测性比传统后端系统更难做,因为一个任务会经过“触发、模型调用、工具调用、人工审批”等多个环节,任何一个环节慢或失败,都会影响最终结果。我们在平台里把每个任务的生命周期建模成一条 Trace,包含多个 Span:

{ "trace_id": "agt_20250601_8842", "task_id": "task_99231", "agent_id": "order-agent-001", "spans": [ { "span": "trigger.receive", "duration_ms": 12 }, { "span": "router.evaluate", "duration_ms": 5 }, { "span": "model.call", "model": "small-fast-model", "tokens": 1320, "cost_usd": 0.0021, "latency_ms": 840 }, { "span": "tool.order_api", "latency_ms": 230, "status": "success" }, { "span": "human_approval.wait", "duration_ms": 62000, "result": "approved" } ], "result": "completed" }

每个 Span 记录环节的耗时、状态、关键上下文,模型调用还会带上 token 数和成本。这套结构上线后,排查问题的时间从小时级降到了分钟级。

我们长期监控的五个关键指标:

  • 任务成功率:完成状态 / 总任务数,指标恶化的直接联动告警。
  • 人工介入率:需要人审批的比例,太高说明智能体能力不足,太低说明风险敞口可能过大。
  • 平均决策延迟:从触发到完成全链路耗时,重点看模型响应和人工审批的耗时占比。
  • 模型成本消耗:分 Agent、分模型聚合的日成本,防止预算被单一智能体打穿。
  • 工具调用失败率:外部工具 API 的稳定性,这个往往是智能体“看起来在干活但实际在报错”的根源。

可观测系统最忌讳的是数据采集了但不看。我们当时搭完这块,天天看 Trace,很快就发现某个 Agent 的工具调用失败率一直徘徊在百分之十几,而任务成功率却显示 99%——因为 Agent 把失败吞掉了,自己编了一个假结果返回。要不是看了执行记录里的原始工具响应,根本发现不了它在“一本正经地胡说八道”。

4. 生产环境常见问题与排查实录

4.1 状态不一致:Agent 执行了但平台显示未完成

这个坑几乎每个团队都会踩。现象是:Agent 实际上已经把订单处理完了,但平台上的任务状态还停留在“执行中”,导致上级流程一直等待,最终触发超时。

排查下来,根本原因是 Agent 执行完成后的回执消息丢失了。我们的架构是编排中心派发任务给 Agent,Agent 是异步执行,执行完再通过消息队列回传状态。当时用的是某个消息中间件,在业务高峰期发生了消息堆积和少量丢失,偏偏 Agent 端没有加本地持久化,任务执行完的状态没留住,回执丢了就再也找不回来了。

解决方案分两步:一是引入幂等回执机制,每个任务在派发时生成唯一的幂等键,Agent 回传状态时带上这个键,平台根据键去重,即使重复回传也不会引起状态错乱;二是做定期对账任务,每十分钟扫描一次状态机中所有“执行中”且超过阈值的任务,主动向 Agent 查询真实状态并修正。

事后我反思,这类问题真正难的不是修,而是发现。如果平台里的状态没有一个可对账的“事实源”,你根本不知道该信谁。我们后来把 Agent 的执行结果做成事件日志,平台状态机只从事件日志投影出来,对账就自然变得可靠了。

4.2 模型调用超时引发的任务雪崩

第二个高频问题,模型提供商的 API 偶发变慢或超时。起初我们给每个模型调用设的 HTTP 超时是 30 秒,看起来够长。结果有一天某供应商的模型服务整体降级,响应时间从 2 秒飙升到 60 秒,我们的编排线程池一下子全被占满,后续所有任务都排队等待,整个平台看起来像死掉了一样。

这里给你一个建议,也是我们整改后的配置:

  • 超时时间分级:简单模型调用超时设 5 秒,复杂推理设 30 秒,不允许无限等待。
  • 并发隔离:按智能体或按模型设置信号量,某个模型的并发占用达到上限后,新任务直接走降级路径,而不是继续排队占用资源。
  • 降级策略:每个调用模型的地方都必须配置 fallback。小模型超时降级到大模型,大模型超时降级到缓存最近一次相似结果;实在不行就标记任务失败进入人工队列,不要让任务悬在半空。

这个坑告诉我们,平台设计里最容易忽略的就是“依赖故障时的行为”。你要在 Agent 还没出问题的时候,就把它依赖的所有上游可能挂掉的情况想清楚:模型不会永远可用,外部 API 不会永远稳定,这些都是智能体系统里的基本假设。

4.3 高频问题排查速查表

平时在群里答疑,很多问题其实是重复的。整理了一个速查表,可以直接抄:

现象可能原因排查手段
任务一直“执行中”回执消息丢失 / Agent 进程崩溃查事件日志,手动执行对账命令
Agent 拒绝执行任务权限配置缺失 / 工具凭据过期检查 Agent 的 tool auth 绑定
模型响应缓慢供应商限流 / 当前模型过载看指标面板,切换 fallback 模型
审批一直无人处理审批人离职 / 超时转派未配置检查人工闸口的 timeout 策略
成本飙升模型路由失效 / 死循环重试看预算报表,按 Agent 聚合排查
智能体开始乱答模型上下文被污染 / 系统提示丢失检查执行记录的 prompt 快照

速查表最大的价值不是解决所有问题,而是让团队在出问题时有一个统一的排查起点。比没有起点、全靠猜要高效得多。

5. 落地这套平台的几个硬经验

5.1 先定义 Schema,再谈智能体能力

我们第一次让一个新 Agent 接入平台时,对方团队的第一反应是“为什么要填这么多配置,直接调 API 不就行了”。后来在实际协作里才发现,如果每个 Agent 都是自定义的接入方式,平台方实际上无法做任何统一治理——调度器不知道它能干什么,观测器不知道它调了什么工具,审计更是无从谈起。

所以我的强烈建议是:平台从第一天起就要把 Agent Schema 当成接口契约来强制执行。不通 Schema 的 Agent 宁可不上线,也不要为了短期的接入进度开放后门。否则一个两个走后门没什么,等走成习惯,平台就退化成注册表,失去了“管理”的意义。

5.2 把人工介入设计成一等公民

很多智能体平台的设计都把人工审批当作旁路,任务默认自动跑,只有特殊情况才想起拉人来审。这种设计在真实业务里表现很差,因为人不知道自己什么时候会被卷入流程,也缺少一个统一的待办视图去处理这些审批任务。

我们在平台里把人工节点当作编排流程中的标准节点,与 Agent 执行节点地位等同。这意味着:人工节点有明确的所有者、超时策略、升级路径;审批人在统一的审批工作台处理所有平台发来的请求;每次审批动作都会被审计记录并关联到对应的 Trace 上。这样人工介入就不再是“应急机制”,而是流程的一部分,体验顺畅很多。

5.3 预算与配额必须在架构层面内置

最后一条经验关于钱。智能体系统和传统系统的最大区别在于:每处理一个任务,都会产生真实的模型调用成本。用量上涨的时候,成本不是线性增长,可能是指数增长——尤其是当 Agent 陷入重试循环或者路由配置错误时,几小时内能把一个月的预算打光。

我们在平台上做了三重防护:单次任务成本上限、单智能体日配额、全局预算熔断。一旦触发熔断,所有新任务进入只读模式,只允许人工介入处理存量任务。这套机制上线后,再也没有出现过预算失控的事故。

我个人的体会是,混合型智能体管理平台的核心价值不是“多聪明”,而是“多可控”。智能体会越来越强,模型会越来越多,但一个能把各种模式、各种架构、各种模型的智能体统一纳管起来,让它们在同一个治理框架下有序协作的平台,才是支撑智能体真正走进生产环境的基础设施。我们现在的平台还在持续迭代,后续打算扩展的方向是智能体之间的自动协商编排、更细粒度的数据权限隔离,以及更智能的成本优化策略。这些都是从这个基础架构上长出来的新枝。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进