
AI Agent这个概念这两年已经被聊得快起茧了。可我一直觉得如果Agent只能陪你聊天、帮你写周报、处理文档那它顶多算个高级玩具。真正要让Agent体现出价值是让它去干活——尤其接手那些以前必须值班工程师半夜爬起来处理的运维故障。最近我们团队一直在打磨的就是这样一套平台AI Agent智能运维平台主打即插即用和30秒自愈。今天我不打算念PPT就聊聊这套平台为什么这么设计、怎么落地、踩过哪些坑。不管你是SRE、运维平台组还是已经被告警轰炸到想跑路的值班负责人相信都能从里面找到点能直接用的东西。1. 项目定位AI Agent在运维里到底该干什么1.1 传统运维自动化的三个死穴我先说点难听的大实话。过去几年大家都在讲自动化运维、智能运维但真正用过的人都知道痛点在哪。第一个死穴是阈值告警太死。监控系统里配了一堆固定阈值有些规则是五年前定的跟现在的业务形态完全不匹配。等到告警真的爆发值班同学打开告警平台看到几百条红色警报根本不知道先处理哪个因为缺少业务视角的优先级判断。第二个死穴是脚本只能处理已知路径。你写了一个脚本专门应对磁盘使用率超过90%这种情况但它遇到磁盘没满、可是文件系统变成只读这种没见过的组合就彻底歇菜。真正的故障从来不是照着剧本演的系统性故障往往跨模块、跨层次前面写十条规则后面就有第二十种意外等着你。第三个死穴是人在回路太慢。以前值班遇到故障流程是告警响了值班同学定位打电话叫开发拉会议翻文档手工敲命令恢复。快一点二十分钟慢一点几个小时。一晚上折腾几回整个人就废了。更麻烦的是很多操作只有个别老同事会一旦他不在恢复时间还得翻倍。这三个问题共同指向一个核心矛盾你只有感知和执行中间缺了一个能根据实际故障情况做推理、拆解和组合的决策层。这个决策层就是我理解里的AI Agent。1.2 为什么是Agent而不是更强的自动化框架有人会问Agent跟RPA或者编排平台有本质区别吗我的答案是区别在泛化能力。老的编排平台核心是一个固定流程你把步骤定义死输入进来就按图走。这种设计处理主路径很可靠但处理不了图外的情况。Agent不一样。它手里拿的不是一张固定的流程图而是一套工具集和对应的使用规则。它接收到告警后会先做一次处理这是什么类型的故障影响面在哪以往有没有类似记录需要调哪几个工具才能恢复。这个推理过程是动态的工具是可以被它重新组合的。举个例子。同样是数据库连接数暴涨编排平台的路径可能是固定的杀连接、改连接池、重启应用。但如果真实原因是慢查询瞬间占满了连接池你需要的是先抓慢SQL、再杀掉来源查询进程最后调整连接池参数。Agent可以根据监控指标自己现场攒一个三步方案而不用你提前把所有可能性枚举出来。当然这里的自己攒方案不是没有边界。Agent所有的判断必须基于可观测数据所有的执行必须走已注册的工具并且每步都要有审计日志。你可以理解成一个有经验、有判断力但被严格规定了不许乱动的执行者。1.3 这套平台的目标定位我们做这套平台的目标说起来一点也不玄把告警发现、根因判断、恢复操作、验证确认这条闭环的时间从人肉值班的平均十几分钟、几十分钟压缩到30秒以内。它的目标用户非常具体监控值班团队、SRE工程师、运维平台组以及那些已经建了监控系统、也有自动化底子但故障恢复依然靠人工的团队。也就是从0到1已经做完了从1到100做不出来的阶段。它不解决的事情我也提前说清楚。它不负责预测未来十分钟会不会出故障那是预测模型干的活它也不取代人对核心架构的决策所有高影响操作默认都要人工确认。它真正负责的是把那些已经发生过多次、恢复步骤清晰的熟手故障做到无人值守。2. 架构设计即插即用和30秒自愈是怎么来的标题里有两个词特别容易让人误解一个是即插即用一个是30秒自愈。我逐个拆开讲。2.1 整体架构分成四层第一层是接入层。负责对接各种监控系统、告警源和业务数据源。比如Prometheus、各类云监控、机房动环监控、工单系统。这一层只干一件事把不同来源的事件统一成平台内部的标准事件结构。第二层是Agent核心层。这一层包含事件解析、根因推理、方案生成、工具选择以及记忆模块。核心是一个用Rust写的运行时它负责调用大模型做推理同时调度所有工具的执行。第三层是执行层。包含Kubernetes集群操作、云产品API、服务器远程命令、脚本执行器以及各种业务系统的开放API。执行层的每个动作都暴露成工具工具本身是纯逻辑由Agent核心层来编排。第四层是安全治理层。包括身份认证、权限控制、审批流、熔断、审计日志。这一层无处不在但我单独把它拎出来是因为如果没有它前几层做得再好也不敢上生产。这样分层的理由很简单每一层都可以独立替换。接入层想换一个监控源不改Agent核心执行层想加一个新工具也不需要动决策逻辑。这也是后面即插即用的底层保障。2.2 即插即用是怎么实现的即插即用不是一个营销词它有非常具体的工程实现连接器抽象加插件注册。我把每一个外部系统都定义成一个插件。一个插件包含三样东西连接配置地址、认证方式、协议。事件或工具的Schema它提供什么事件或者能执行什么动作动作的参数是什么类型。处理策略这个插件产生的数据有多可信它的动作需不需要审批。接入一个新的监控源不需要改一行主程序代码。你要做的就是在配置目录里加一个文件告诉平台这个监控源的Webhook地址是什么、事件字段怎么映射。同样接入一个新的执行目标也是在配置目录里声明一个tool条目写上调用方式、参数校验规则、超时时间和权限级别。我贴一段真实项目里添加工具的配置片段给你感受一下tools: - name: k8s_rollout_restart display: 重启工作负载 type: kubernetes target: cluster-main action: rollout_restart params: namespace: { type: string, required: true } workload: { type: string, required: true } permission: auto_allowed timeout: 30s audit: true这段配置的意图很清楚平台注册了一个叫重启工作负载的工具目标集群是cluster-main参数必须有命名空间和工作负载名权限是自动放行超时30秒全程审计。Agent在决策时只需要知道工具列表里有这么个东西剩下的事情就是传入合法的参数。这样设计的好处是不同团队的接入成本拉到了极低。一个能看懂YAML的运维十分钟内就能接一个新工具。我们团队接入新系统最快的纪录是八分钟都是配置驱动的功劳。2.3 30秒自愈的时间线是怎么压出来的30秒不是一个拍脑袋的数字它是我们把完整闭环拆开以后按里程碑卡出来的。我先给你一张真实的自愈时间线时间节点动作说明0-1秒告警接入系统收到Webhook事件完成格式归一化1-3秒事件解析Agent判断故障类型提取关键字段关联相关实体3-8秒根因推理调用模型结合知识库检索结果生成修复方案8-15秒工具编排按方案依次调用工具执行具体恢复动作15-25秒验证检查健康探针、恢复指标以及业务日志25-30秒通知与归档生成事件报告发送通知关闭工单真正需要解释的是为什么方案的生成和工具的编排能做到这么短时间。首先是事件解析这一环。我们不会把原始告警原文直接给模型因为原始文本太脏了。接入层已经把所有告警做成了统一结构包含时间、对象、指标、变化量、持续时长等。模型拿到的是格式化数据解析速度自然快。其次是知识库的辅助。Agent做根因推理之前会先根据故障特征做一次相似度检索把历史工单、应急预案、变更记录里相关的片段带出来作为参考上下文。这样模型就不用从零开始想解决方案而是基于经验做决策速度和准确率都会上一个大台阶。最后是工具的幂等性。执行层里的所有自愈工具都要求做到幂等同一个动作执行两次和执行一次效果一致。这样Agent做轻量重试时不会有副作用验证失败后可以再跑一次方案也不至于搞炸系统。但我要强调不是所有故障都应该30秒自愈。我们有一套严格的自愈白名单机制。只有满足三个条件的故障才能进入自动恢复流程一是有明确可执行的恢复动作二是动作本身是低风险的三是动作执行后可以验证结果。做不到这三点的一律降级成建议方案。3. 核心技术与方案选型3.1 为什么选了Rust来写Agent运行时聊到AI Agent很多人第一反应是Python因为大模型生态里Python最方便。但我们最后把Agent运行时用Rust重写了不是标新立异是被实际场景逼出来的。第一个原因是并发能力。作为一个运维平台Agent不可能只处理一个故障。高峰期一个中等规模的监控网络每分钟会有几十上百个事件进来。Rust配tokio异步运行时开几千个并发任务毫无压力内存占用只有几个G级别。换成Python协程也能跑但扛大并发时性能和资源占用差距非常明显。第二个原因是类型安全。Agent要调用的工具五花八门参数校验一旦出问题后果就是误操作。Rust严格的类型系统和serde反序列化能在参数进入执行层之前就把非法值拦下来。比如工具要求namespace是字符串模型返回了一个数组类型校验直接就把它判定为无效不会继续往下执行。第三个原因是部署简单。Rust编译出来是一个单一二进制文件依赖全打包在里面放到服务器上就能跑不需要装一堆运行时依赖。对运维团队来说这种交付是最省心的。当然Rust也有成本开发效率比Python低写异步代码容易踩生命周期和所有权的坑。我们团队花了大约三周才把雏形跑通比起Python版本的几天时间确实慢不少。但作为长期运行在生产环境的核心组件这个前期投入是值得的。另外Agent用啥语言写根本不重要重要的是它怎么跟模型对接。我们用的方式是决策逻辑和推理分离推理全部交给外部的大模型服务Rust运行时只负责任务调度、工具调用和状态管理。3.2 Agent的决策流程和function calling我先说说决策流程。整个Agent的核心是一个循环类似大家常说的ReAct思想思考、行动、观察。模型接收当前故障事件和状态后先做第一步思考这个故障可能是什么引起的它给出一个推测同时给出下一步要调用的工具。平台执行工具后把执行结果作为观察值喂回给模型模型再更新判断直到问题被验证为解决或者累积尝试次数到达上限。这里面的关键是我们不允许模型直接生成一堆shell命令去执行而是让它输出结构化的function calling结果。也就是告诉平台我要调用工具A参数是这样的。平台拿着这个结果去工具注册表里校对、校验、执行。为什么不用自由文本命令因为自由文本命令没法做权限控制和审计。结构化调用可以从流程上保证每一步都在规划边界内也方便后来追查问题。设计上还有一个安全机制执行分级。级别动作范围执行方式示例L1只读和幂等操作自动执行查询指标、检查进程、重启无状态服务L2有一定影响的操作需要审批修改配置、重启数据库、触发扩容L3高风险操作仅给建议删数据、格式化磁盘、变更核心架构模型可以在L1自由度内自己决定并执行想跨到L2必须先把方案发到审批通道等人点通过L3干脆就不允许它碰只输出建议给值班人员。这个分级参考了自动驾驶的理念自动驾驶不是让系统乱飞而是让系统很清楚哪些动作是用户授权的哪些动作绝对碰不得。3.3 运维知识库与上下文管理AI Agent最容易翻车的地方是幻觉。尤其是在运维场景模型一本正经地编一个根本不存在的命令后果可能非常严重。我们解决这个问题的核心手段是用知识库把模型的想象力拴住。我们在平台里维护了一个运维知识库里面存了三类东西应急预案、历史工单、系统拓扑与变更记录。这些文档会被向量化存到向量数据库里。Agent收到一个故障后先用故障特征做一次相似度检索拿出Top-K条相关文档片段作为参考上下文一起交给模型。这样做有两个好处。一是模型回答问题时有了出处引用的是真实手册里的内容而不是凭空编造。二是通过限定知识检索范围我们可以控制Agent只能引用某个团队授权的知识没有授权的故障类型它就不会乱给方案。上下文管理方面踩过的坑也值得讲一下。最开始我们贪心想把所有相关历史都塞给模型结果token费用暴涨而且因为信息太杂模型的判断质量反而下降。后来我们做了两件事事件压缩和对话裁剪。事件压缩是把几十条原始日志压缩成事件摘要加关键指标变化列表传给模型的信息密度高了很多。对话裁剪是限制单次决策的上下文轮数比如一个自愈任务最多做五步推理超过五步就认定失败转人工。这样既控制了token成本也防止Agent在无解的问题上无限循环。4. 部署和接入照着做就能跑起来4.1 基础环境准备我先给一个最小可用的部署方案不需要那种动不动十几台机器的豪华集群一台4核8G以上的服务器跑Agent运行时。一个向量数据库数据量不大时完全够用。一个大模型的推理入口。可以用云厂商API也可以本地化部署一个支持function calling的开源模型。注意模型能力直接决定Agent的决策质量建议优先选择function calling稳定、工具调用成功率高的模型。为什么把function calling能力放这么高的优先级因为我们的整个Agent交互都是结构化工具调用模型如果总是把参数格式搞错平台只能反复重试30秒自愈就无从谈起。4.2 五步接入你的第一个监控源整个接入过程严格来说就五步。第一步安装Agent运行时。我们打包了容器镜像三步起三个服务Agent主进程、向量库、配置管理界面。省去了很多繁琐的预编译流程。第二步配置模型服务。在配置中心里填上模型服务的地址、API Key、模型名称和token上限。然后跑一个连通性测试确保Agent能成功跟模型完成一次多轮对话。第三步接入告警源。比如对接Prometheus只需要填上Webhook接收地址和事件格式映射。Prometheus的Alertmanager会把告警POST到这个地址Agent收到后自动结构化入库。第四步注册执行工具。这个在前面已经讲过就是在配置目录里加YAML条目声明工具名称、参数、权限级别和超时。第五步配置自愈策略。这是最后一道安全阀针对每一个故障类型定义哪些工具允许自动执行、哪些需要审批、验证方式是什么。我挑一个典型的自愈策略配置说一下policies: - event_type: service_http_5xx_ratio_high condition: error_rate 0.2 for 3m actions: - tool: k8s_scale_up params: { workload: ${event.workload}, replicas: 1 } level: L1 verify: - metric: http_5xx_ratio expect: 0.05 timeout: 30s这个配置的意图是当某个服务的HTTP 5xx比例持续三分钟超过20%时自动调用扩容工具给对应工作负载增加一个副本然后检查5xx比例是否降到5%以下超时30秒没降下来就报异常。4.3 给Agent配置运维技能这一步很多人忽略但恰恰是决定平台上限的关键。我把Agent的运维技能定义成四个组成人设提示词、可用工具集、知识库权限、策略规则。举个例子。你想让Agent学会处理服务假死这类故障那一个完整的技能配置大致是这样的人设你是一个高级SRE工程师负责线上服务稳定性识别到服务假死时要先确认进程状态再确定是否有优雅退出路径。工具集进程探活查询、健康检查调用、服务重启工具、日志查询工具。知识库假死类故障的应急预案、最近三个月的相关工单。策略查询类L1自动执行重启类L1自动执行但首次重启失败后必须转人工。这样一套技能本质上是在给模型限定一个职业边界。它只在授权的工具和知识范围内做决策不乱用。你可以搭配出很多技能比如扩容技能、数据库连接池恢复技能、证书过期处理技能每个技能对应一类高频故障。技能能拆能合新增技能不会影响已有技能。5. 实战记录一场风电场数据采集中断的自愈5.1 场景背景说一个我们实际跑过的案例算是把前面的理论串起来。某风电场的管理系统接入了多台风机数据采集器。这些采集器负责实时上传振动、温度、功率等运行数据。某天晚上监控平台连续收到该场区多条数据采集心跳丢失的告警。以前遇到这种情况值班人员要先核对哪些风机掉线再判断是网络问题还是采集器死机然后想办法远程重启采集终端。整套流程正常要半小时以上。这个场景正好符合自愈白名单的条件告警特征明确、恢复动作低风险且幂等、验证方式清晰所以我们把它划进了L1自动自愈范围。5.2 自愈过程的时间线这个案例当晚的真实处理时间线是这样的0秒告警接入Agent收到心跳丢失事件。1秒事件解析完成Agent识别出故障对象是第二组采集终端关联到对应风机编号。3秒知识库检索命中一条历史工单历史上同一型号采集器多次发生因为网络抖动导致的假掉线。6秒Agent生成方案第一步对掉线设备做一次网络连通性探测第二步尝试通过管理接口远程复位采集终端。8秒执行网络探测确认管理网络可通排除了大规模断网可能。12秒执行远程复位命令。20秒心跳数据恢复Agent通过数据上报确认设备已正常上线把告警标记为已恢复。22秒自动生成事件报告推送值班群。整个流程大约22秒跟标题里说的30秒自愈基本吻合。从实际感知来看值班同事刚点了几个通知消息发现告警已经自己绿了。这种体验说实话比任何汇报PPT都有说服力。5.3 上线后的效果和边界平台上这个自愈策略跑了一个季度之后效果是明显的。同类故障的平均恢复时间从40分钟降到了25秒以内夜间值班被叫起来的次数大幅减少人工误操作从每月个位数降到了零。但我要泼一盆冷水。稳定的自愈效果一半归功于Agent另一半归功于我们非常克制地只开放了低风险动作。我们从来没有想让Agent去解所有问题。不是它做不了而是运维系统的核心是稳定性不折腾就是最大的贡献。还有一个细节是复盘。即便Agent自愈成功了我们仍然要求每周把自愈记录人工过一遍确认哪些判断是对的哪些是歪打正着。因为自愈机制本身如果藏了错它会在没有任何人发现的情况下反复执行错误的恢复路径这才是最吓人的。6. 常见问题与排查技巧实录6.1 Agent误判导致错误执行怎么办误操作是所有人对AI Agent自动化执行最大的担心这个担心不丢人。我们的处理方式有三道闸。第一道是你前面看到的执行分级。只有L1自动执行而且是白名单里的工具。第二道是审批。L2级别的动作强制插入一个审批节点人工不点头Agent就只能干等。第三道是审计和回滚。平台记录每一个工具执行的任务ID、参数和执行结果一旦发现异常可以一键回溯到操作前的状态或者执行配套的回滚动作。实际经验是让Agent误判概率降到可接受范围的不是模型变聪明而是把工具定义得干干净净。参数明确、生效范围明确、是否有副作用明确模型就不容易走歪。6.2 工具执行失败或者超时这个我们在早期踩了不少坑。Agent判断得对但工具执行失败了整个自愈流程就卡住。后来定了一套统一的处理规范。每个工具必须配置超时时间比如重启服务默认30秒超过就按失败处理。失败后平台会按策略重试但重试次数一般不超过两次间隔逐步拉长。重试仍然失败马上把上下文完整打包转给人工值班通道同时附上Agent已经做过的操作和观察结果让人工不用从头查起。还有一类问题是工具本身不可重入比如创建一台云主机这种动作不能随随便便重试。所以工具定义里要显式声明幂等性非幂等工具默认禁止自动重试。6.3 成本高不高性能和token怎么控Agent平台最容易被忽视的是一场慢火烧钱token费用。特别是本地模型响应慢、云API计费贵如果每一件小事都走完整Agent链路成本很快就失控。我们的处理思路是分层过滤。先走规则引擎固定、明确的告警直接匹配预设响应根本不进Agent。只有规则引擎处理不了、需要推理判断的事件才会触发Agent。这样一来90%的告警都是廉价确定的路径处理掉的Agent只处理剩下的10%复杂事件。成本下来一大截准确率反而更高。性能方面Rust运行时目前实测单机能扛住每分钟上千次事件瓶颈通常不在Agent而在模型服务的响应速度。所以如果发现端到端延迟变高先查模型服务的吞吐和限流配置这基本能解决80%的问题。我整理了三个高频故障的排查速查表给你参考现象可能原因排查动作Agent一直不生成方案模型服务超时检查模型API状态、token上限、并发限制工具调用被拒绝参数校验失败查看日志中的校验错误检查工具Schema参数类型自愈执行成功但告警没解除验证规则太严格确认验证指标名称和数据源适当放宽期望阈值知识库检索结果不相关向量化切分太粗调整文档切分长度增加标题权重最后再聊几句个人体会做AI Agent智能运维最容易上头的是追求啥都自动搞定但我现在最深的感受是Agent的自愈能力不是模型有多聪明决定的而是你的工具链和边界设计有多扎实决定的。宁可让它少修也不能让它乱修。所以我特别建议刚开始尝试这种平台的团队先花两周时间把只读类工具全部放开让它多看多判断不要动手。摸清它的判断质量以后再逐步放开重启、扩容这类可逆的低风险操作。等到稳定跑一个月你自然知道该往哪个方向加技能了。这个平台后续还有很多可挖的点比如把自愈策略跟容量预测结合比如让Agent在自愈之后自动写变更记录。但核心这件事已经验证了把一群训练有素的运维沉淀下来的经验变成一套能自动决策、自动执行、自动验证的系统这条路是完全走得通的。