正经干IT运维的都知道,每天接得最多的不是技术攻坚,而是“帮我重置下密码”“给我开个某系统的权限”“申请一台测试服务器”。这类请求本身不复杂,但量一大就非常磨人,而且容易在转手、排队、传达之间出岔子。最近这一年,我花了大量精力把这类高频IT请求交给AI智能体去处理,不是那种只会回话的聊天机器人,而是真正能调用后端系统、把请求执行完、还能把结果汇报给用户的“可执行操作的AI agents”。支撑这套东西落地的,核心是Agent Builder用来搭对话理解层,Workflows用来编排所有的后端执行动作。
这篇文章把我从需求拆解到上线,再到排障的完整经验捋一遍。里面不会出现“系统支持了XX能力”这种空话,全部是实际配置时该注意的细节、该避开的坑,以及每一步背后的设计理由。不管你是IT运维负责人、平台工程师,还是刚接触AI自动化的开发,只要想把AI从“问答”推向“办事”,这篇应该能给你省不少弯路。
1. 先理清楚:Agent Builder 和 Workflows 到底在解决什么问题
1.1 两类智能体的本质区别:能聊天的与能办事的
很多团队上来就提“我们要做个AI助手”,但做着做着就做成了FAQ机器人——用户问一句,机器人答一段,剩下的还是要人复制链接、打开工单系统、手动申请。原因很简单:传统对话式AI只处理信息流,不处理操作流。
可执行操作的AI Agent,差别在于它把“对话理解”和“动作执行”彻底打通。用户说“我没法登录公司邮箱了,帮我重置密码”,Agent不只是回答“你可以联系IT”,而是识别出这是“密码重置”意图,提取出用户身份标识,触发后端Workflow调用身份管理系统,执行重置动作,然后带着结果回来告诉用户“新密码已发到你手机,有效期两小时”。整个过程,机器把请求闭环掉。
这个差异的背后,是Agent Builder和Workflows在设计目标上的分工。Agent Builder负责的是人机交互这一层:意图识别、槽位提取、多轮追问、兜底应答。它解决的是“用户那句话到底想让我干什么”。Workflows负责的是机器与系统之间的执行这一层:API调用、审批判断、数据映射、异常重试。它解决的是“确定了要干什么之后,怎么安全正确地干完”。
从一开始就把这两个概念分开想,是这套架构最关键的认知基础。后面所有的配置和调试,都是围绕这条边界展开的。
1.2 IT请求自动化的典型场景与ROI判断
我自己梳理过,团队里适合先做自动化的IT请求有三类典型特征:高频、规则明确、影响面可控。
比如账号权限开通。新员工入职要开一堆系统账号,老员工转岗要调整权限组。这个流程通常已经有申请单模板,有审批链,但执行的时候还需要管理员到各个系统控制台里点一遍。把它改成Agent受理加Workflow执行,效率提升非常直观。
再比如软件安装申请。用户说“我要装某个数据分析工具”,Agent先判断需求和公司的软件白名单,如果符合直接走软件分发系统的接口下发安装指令,不符合就自动转人工审批。这里面的“判断逻辑”如果用代码写死,每次改策略都要发版,而放在Workflow里做成可视化节点,改起来就轻松很多。
还有密码重置和账号锁定解锁。这两个操作我用下来觉得是“最容易出成绩”的场景。因为逻辑简单、出错概率低、用户反馈立竿见影。一个几十人的小团队,把密码重置自动化之后,IT支撑群里的人工响应量能肉眼可见地降下来。
但并不是所有请求都适合自动化。凡是牵涉到多系统联动、模糊判断、历史遗留兼容问题的请求,比如“帮我看看为什么连不上某个老系统”,这类排查类请求,我建议暂时不要放进自动化范围。强行自动化只会把排查过程拉长,用户体感反而更差。划好边界,比做得多重要得多。
1.3 为什么把Agent和Workflow分开设计更合理
刚开始接触Agent Builder时,我也觉得既然它已经能做对话了,那直接在对话逻辑里写执行动作不就行了?后来跑通几个流程才意识到,硬把执行逻辑塞进对话层,维护起来是个灾难。
对话层的核心变量是“用户表达方式”。同一句话,一百个人有一百种说法,要不断调训练语料、调兜底策略。而执行层的核心变量是“后端系统状态”。接口可能超时、参数可能变化、权限可能调整。这两类变化的频率和节奏完全不同,搅在一起之后,改对话容易碰坏执行逻辑,改执行逻辑又要重新验证对话效果。
把两者拆开之后,好处非常明显。意图识别的调整不影响已上线的执行路径;API地址变了,只改Workflow节点,对话侧完全无感。还能针对执行层做完善的版本控制和回滚策略,这是把对话和执行混在一起做不到的。
在实际项目中我给团队定的原则是——Agent Builder里不出现任何一行业务逻辑代码,只负责理解、追问、确认;所有确定性操作全部下沉到Workflows。这个边界保持清晰,协作效率会好很多。
2. Agent Builder 配置实操:让机器听懂用户的IT诉求
2.1 意图设计:粒度分寸如何拿捏
我在项目初期最常犯的错,是一条意图里塞了太多请求变体。比如把“重置密码”“解锁账号”“找回用户名”全塞进一个“账号问题”的意图里。测试的时候看起来都能命中,一旦真实用户说的话一杂,Agent就开始乱接话。用户明明说“用户名忘了”,Agent却在回答密码已重置,体验非常糟糕。
后来我学到的做法是:意图的粒度要匹配“用户目标”和“执行动作”的对应关系。凡是后端处理方式完全不同的请求,原则上都要拆成独立意图。一个意图绑定一个明确的执行目标,这样在对话环节就能完成“请求分类”的职责,不会把一个模糊任务抛给下游工作流。
实际操作中我建立了一套命名习惯:意图_请求对象_动作。比如it_pwd_reset、it_account_unlock、it_software_install。看起来多了一些,但训练模型时每个意图的训练数据更聚焦,命中率显著提升。
至于相似意图之间的“冲突消解”,比如“重置密码”和“修改密码”,在用户口语里可能都表达成“换密码”。光靠一个意图的优先级还不够,我还用槽位去辅助区分:如果用户提供了旧密码相关的信息,偏“修改密码”;如果明确说“不记得了、忘了”,偏“重置”。这些规则不需要很多,挑最容易区分的两三个特征就够了,太多反而把模型带偏。
2.2 槽位设计:把执行所需的参数一次性问齐
槽位设计是整个Agent配置里最容易被低估的部分。很多文档只告诉你“建立槽位、映射实体”,但没告诉你槽位设计会直接决定Workflow执行能否顺利启动。
以软件安装申请为例,用户说“我想装个Python数据分析环境”,这个请求要真正执行,至少需要三个关键信息:软件名称、申请人的部门、安装目标机器。其中软件名称可以通过实体识别直接拿到,但“部门”要从用户档案里查,“目标机器”可能需要追问。这些参数在Agent里就是三个槽位。
我在配置槽位的时候有个原则:用户能自然说出来的信息优先让平台自动抽取,用户说不出来或者不应该知道的信息靠后端查询补齐,实在不行才靠追问。比如工号,有些用户以为自己记不住,实际上大多数员工能模糊记住自己的工号前缀,追问一次成功率很高。但“该走哪个审批流”这种信息,永远不要让用户选,用户在意的不是流程,是自己的需求。
槽位的“必填性”和“确认方式”也要提前定清楚。必填槽位缺失时,我给每个槽位配置了专门的追问话术,而不是用系统默认的“请提供XX”。比如软件安装场景的机器标识,追问话术写成“请提供这台电脑的资产编号,一般在机身底部条形码旁边可以看到”,整个对话的完成率提高很多。说白了,IT请求里的用户多数不是系统专家,你要站在他的视角把指令讲明白。
2.3 对话策略与兜底设计:别让机器不懂装懂
我见过太多AI助手,用户问一句它答一句,一旦问的内容超出预期就崩了。真正的可执行Agent,需要在对话层就建立一套清晰的策略。
首要的是意图置信度阈值。平台通常会给每个意图计算置信度,我这边设置的经验值是低于0.45直接转人工,0.45到0.7之间进入“澄清确认模式”,高于0.7才直接执行。这个阈值不要用一个固定值跑天下,而是在灰度期看日志反复调整。
第二是“澄清确认”的设计。很多时候用户的第一句话信息不完整,Agent需要追问而不是猜测。例如“帮我开个账号”到底是开什么系统的账号?给谁开?要什么权限级别?这些信息在对话里用槽位追问来收集,在Workflow里用参数传递来消费。这个过程设计得好,用户会觉得这个助手挺聪明,设计得不好,用户会觉得被当猴耍。
第三是兜底策略。我在Agent Builder里专门配置了一条“转人工”的意图分支,专门处理低置信度或者三次追问仍无法满足的场景。很多人不舍得“主动投降”,总觉得AI能解决应该硬撑着。用户体验的优先级永远高于AI的KPI,硬撑导致用户情绪变差,再回头找人工反而更费劲,这不是我想要的。
2.4 训练语料:质量比数量更重要
关于训练语料,我自己的经验是:一百条覆盖各种角度的真实语料,远胜于一千条从文档里机械抄出来的示例句。
一开始我们团队的开发顺手写训练语料,写出来的都是标准句式,比如“请重置我的密码”。上线后发现用户真实的说法很野:“密码搞不定”“登不进去了”“邮箱被锁了咋整”。Agent完全懵。
后来我调整了语料收集方式:从工单系统的历史记录里,把过去三个月的真实用户表达捞出来,按意图归类,去掉敏感信息之后作为训练语料。再用一种“改写”策略——每一条真实语料,由测试人员用三到五种不同口吻改写一遍。这样既保留了真实语境,又扩充了表达覆盖范围。
还有一个小技巧:训练语料里保留一些“半句话”。真实用户在打字的时候,经常发“重置”“密码”“进不去”这种碎片化输入。系统需要能理解碎片化的语义,而不能只处理完整的长句。
3. Workflows 执行编排:把每一步动作变成可审计逻辑
3.1 工作流的分步设计原则
如果说Agent Builder决定了机器的“脑子”好不好使,那Workflows就决定了它的“手脚”麻不麻利。我在搭建这一层的时候,会强迫自己把整个执行过程拆成“输入、动作、判断、输出”四类节点的组合。
输入端接收从Agent传来的参数,比如意图类型、槽位值、用户身份。动作节点负责调API、发消息、更新数据库。判断节点负责走分支,比如判断审批是否通过、权限组是否存在。输出端负责把执行结果格式化成用户能看懂的消息。
我早期犯的一个典型错误,就是希望一个节点干完所有事。比如一个节点里既查用户身份,又改密码,还要记录回执。结果改密码那一步超时了,整条链路回滚,查身份那一步也被重复执行。拆开之后,每一步的输入输出都很清晰,失败时能定位到具体节点。
分步之后还要给每一步定义超时时间和重试机制。内部系统API设置5秒超时、最多重试两次;外部系统API超时放宽到15秒,但重试不超过一次。重试之间要做间隔退避,避免集中重试把下游系统打挂。
3.2 接入后端系统:通用API封装还是快速脚本
接入后端系统的方式,我测试下来觉得“通用API”和“快速脚本”各有用武之地。
面对已有完善API的系统,比如企业内部的身份认证平台或者权限管理系统,我倾向于写一个轻量的适配层,把原生API包装成标准化的内部接口,统一鉴权、统一返回格式、统一错误码。Workflows调用这些标准化接口,省去每个节点的参数转换差异。
面对那些没有API、只有管理后台的老系统,可以选择脚本方式。比如有些老系统只能通过命令行重置密码,我会用Python写一个封装脚本,Workflows通过调用脚本完成操作。这种方式速度快,但稳定性完全依赖脚本质量,必须做好异常捕获和审计日志,每次执行该有日志,不能只靠事后翻。
真正需要注意的是:不管走API还是走脚本,都要在Workflow里补上结果确认。上游系统返回200不代表任务成功,密码有可能设置失败但接口照常返回成功。我见过不少案例就是因为只看状态码而没做结果验证,用户收到“重置成功”之后依然无法登录,只能又来找人工。
3.3 异常分支与人工审批的衔接
执行过程中一定会出现预期外的情况,Workflows里必须有完整的异常分支设计。
一类异常是业务判断不通过,比如软件安装申请里的软件名不在白名单里。这种属于业务异常,要做的是走人工审批节点,把请求推送到审批人队列,等待审批通过之后继续执行。
另一类是系统调用异常,比如接口连续重试都超时。这种属于基础设施异常,处理方式应该是直接终止流程,并通知用户“系统暂时无法完成,已为你转人工”。注意这里的关键是:不要让用户在流程里干等。宁可明确告诉用户需要再等,也不能让用户看到流程卡住了却不知道怎么处理。
人工审批这一环很容易被忽略,但它恰恰是“可执行Agent”敢不敢放权给系统的底气。我在设计每一个自动化IT请求时,都会强制想一个问题:什么情况下,这台机器应该停下来问人?比如权限提升类请求,默认策略永远是“先审批后执行”,即使审批人就是申请人自己也不行。这是规矩,不能省。
3.4 Workflows如何与Agent Builder联动
Agent Builder和Workflows的联动,核心就是一个消息格式,必须在初期就定好。
我用的协议是:Agent在完成对话确认后,输出一个JSON结构,包含请求意图、槽位参数、发起人身份、时间戳、会话唯一ID。Workflows的第一个节点就是这个JSON的校验器,先验证字段合法性,再进入执行。
{ "session_id": "a1b2c3d4-xxxx", "intent": "it_pwd_reset", "user": { "id": "e00218", "department": "R&D", "verify_level": "mfa_pass" }, "params": { "target_system": "mail", "verification_channel": "sms" } }有了这个标准协议,新旧系统接入就变得非常灵活。Agent侧加新意图其实不需要改执行侧任何代码,Workflows新增一个执行入口自然也就被Agent发现并复用了。
还有一个容易忽略的点:会话上下文要不要保持。比如用户说“帮我重置密码”,Agent发起Workflow,执行成功之后用户追问“那我的手机收不到短信怎么办”。这个追问需要Agent继续处理,所以Agent和Workflow之间必须反馈执行结果,Agent带着结果回到对话上下文里,用户感受才是连贯的。
4. 完整案例:从零搭建“软件权限开通”自动化Agent
4.1 场景梳理与边界确认
用一个我亲手搭过的案例来讲完整过程:软件权限开通。用户直接在IM聊天窗口里说“帮我申请某数据分析软件的许可证”,Agent自动完成权限校验、执行开通、反馈结果。凡是规则不明确的请求,自动转给人工审批流。
动手之前先梳理边界,这一步特别关键。团队里能用这个软件的,目前只有三个角色:数据分析岗、后端开发岗、产品研究岗。这三个角色的权限级别还不同,数据分析和后端开发能拿到完整权限,产品研究只能拿只读权限。这个映射表写清楚之后,才算有了自动化的业务前提。
边界条件也明确下来:申请人的账号必须处于正常状态;软件许可证库存必须大于零;单个账号的申请频率不能超过每月一次。超出以上任意一条,直接转人工。这些看起来像业务规则,实际上决定了Workflows里判断节点怎么设计。
4.2 在Agent Builder中定义意图和槽位配置
我建了一个意图,叫it_license_apply。训练语料我直接参考了过去三个月工单系统里的真实表达,整理出几个典型说法:
“帮我申请某软件授权” “我要用某软件做分析,申请下权限” “某软件的许可证能开一个给我吗?” “某某项目需要做数据处理,需要开通某软件专业版”
槽位设置了三类:软件的完整名称(必填)、申请用途说明(必填)、申请人所在项目(选填)。其中“软件名称”是核心槽位,用来决定Workflow走哪条产品分支逻辑。如果用户的话里没带软件名称,Agent会主动追问,并给出一个可选列表,减少用户自己输入时产生的笔误。
这里分享一个实测心得:选填槽位千万不要轻易删除。很多Agent配置者觉得“选填”就是可要可不要,直接删掉以简化对话。实际上“选填”槽位在对话里可以作为黄金信息段,比如“申请用途说明”在后续审批中,能让审批人更快理解上下文。即使不是执行必需的参数,保留它在训练和测试阶段也能让模型把更多真实意图的表达习惯学到手。
4.3 编排Workflow的执行步骤
授权开通的Workflow我分成了七个步骤。整个流程的骨架如下:
第一步:校验请求合法性。判断发起人账号状态是否正常,是否在许可申请白名单内,频率是否超限。不满足的请求直接打回,附上原因文案。
第二步:查询许可证库存。这里要注意库存数据存在独立许可证管理平台里,API响应的是“可用数”和“总数”两个字段,必须用“可用数”做判断,不能看总数。
第三步:根据发起人角色确定开通策略。数据分析岗和后端开发岗走标准授权流程,产品研究岗走只读授权流程。这个信息我放在了一个配置表里,定期更新,不放在代码里写死。
第四步:调用授权平台接口,执行开通。这一步做了幂等处理,同一个会话ID重复发起不会重复开通,避免网络重试时产生重复授权。
第五步:等待开通结果确认。平台返回“开通成功”之后,再调用一次许可证查询接口,确认用户账号下的许可证确实生效。这个二次确认的步骤,帮我挡掉过好几次“假成功”事故。
第六步:通知用户并附带使用说明。通知内容包含如何登录、如何激活、如何获取技术支持。这一步对用户体感非常重要,自动执行的意义不只是“做完”,还要“说到位”。
第七步:写入审计日志。把会话ID、发起人、执行动作、结果、耗时全部记录下来,用于后续审计指标统计。
4.4 联调、灰度与上线
系统开发完成之后,我没有直接全量上线,而是走了一个“三阶段灰度”的路径。
第一阶段,内部封闭测试。让测试团队模拟各种用户说法,重点测意图识别准确率、槽位提取成功率和异常分支触发率。这个阶段我调得最多的是兜底话术,因为模拟用户说话总是比真实工单里的说法更规范,导致Agent过于自信,在真实场景中容易误判。
第二阶段,真实流量小流量灰度。只开放给某一个部门,所有请求同时抄送给人工审批流做备份。也就是说,即使Agent已经自动执行成功了,也会有一封邮件发给管理员“系统已自动完成,如有疑问请拦截”。这个双重保险让管理员放心不少。这一阶段的日志我坚持人工每天过一遍,连续跑了两个星期。
第三阶段,全量放开。我专门拉了一个机器人告警渠道,把所有Agent无法处理的请求、工作流执行失败的请求,全部汇总成一个待办列表。每周复盘一次,看哪些失败是配置问题,哪些是系统问题,哪些是新出现的用户表达,逐一优化。
这个灰度路径看起来多花了两三周的时间,但从上线之后的问题工单量来看,非常值。
5. 常见问题与排查技巧实录
5.1 意图识别不准、答非所问,先别急着加训练数据
如果用户在测试中说“我说的是另一个意思”,第一反应往往是想加语料,但我的排查经验是:不要急着加。因为意图不准的根因通常有三个。
一是槽位设计干扰了意图判断。比如用户说“我申请了两台服务器”,原本是“关联资源”意图的槽位干扰了“申请资源”意图的判定,导致落到错误分支。排查方法是打开每条错误命中的日志,看模型把哪些词作为了判据,而不是只看最终预测结果。
二是意图定义太抽象。比如“it_related_question”这种宽泛的意图,它就像一个垃圾筐,什么都能接住,自然就抢占了别的意图的流量。解决办法是把宽泛意图拆细,同时给每个意图定义清晰的范围说明。
三是训练语料里的表达习惯和真实用户偏差太大。测试人员习惯打完整长句,真实用户可能就一句“开了吗?”这种省略句。这时候要回工单系统里捞真实表达,而不是继续靠团队脑补。
在排查手法上,我推荐一个实操技巧:把三个月内的对话日志全部导出,按“意图置信度从低到高”排列,逐个看置信度在0.5到0.7区间的样本。这部分样本是模型犹豫不决的区间,也是最容易出现“识别错了但错误得很自然”的区域。
一个真实的教训是:有一次我发现“解锁账号”和“更新账号信息”两个意图经常混淆,用户的表述里都含有“账号”和“不能用了”,但一个是账号被锁,一个是信息过期。后来我在槽位上增加了“原因描述”这个信息段,成功地把两个场景区分开。所以说,意图识别的问题不一定靠加数据解决,也可能是信息收集环节的缺陷。
5.2 Workflow执行中途失败,怎么快速定位
执行失败的排查,核心是“日志串联”能力。我要求所有的API调用、脚本执行、判断节点,都把会话ID写进日志里,这样无论日志散落在哪个系统,都可以用一个会话ID一次性拉全。即使Agent侧的日志和执行侧的日志在两个不同平台,我也要求双方保留相同的关联字段。
一旦执行失败,我习惯用“链路检查法”去排查,而不是猜:
先看最靠近“用户侧”的节点是否收到了错误标记。如果Agent根本没有生成请求,说明问题在对话层,和Workflow没关系。
再看Workflow的入口校验是否通过。有时候Agent发出的参数格式完全正确,但某个字段为空,因为没有做严格校验,入口直接把请求拦了。
再看具体执行节点的返回。API调用的错误码是什么?是超时、是权限不足、还是业务方返回了明确的失败原因?这一步能区分是基础设施问题还是业务逻辑问题。
最后看输出节点是否成功。有些时候执行已经成功了,问题出在通知环节。用户没收到消息,就以为流程失败了,实际权限早就开了,这种“假失败”最容易引发工单升级。
还有一个高频问题:重试策略引发的“幽灵重复执行”。比如用户请求创建虚拟机,API调用超时了,工作流自动重试了两次,结果下游系统其实是异步处理的,最终创建了三个虚拟机。后来我在重试节点上增加了“幂等检查”,每次重试前先查询当前用户是否已有同会话的虚拟机存在,如果存在直接复用,这才彻底解决。
5.3 权限安全:如何做到最小授权且可追溯
可执行Agent的本质是替人做高风险操作,权限设计必须从一开始就嵌入方案设计,而不是后期补丁。我在这部分吃了不少亏,总结下来有三个原则。
第一,Agent服务账号的权限永远是“最小执行权”。它只拥有被编排流程所需的API权限,比如密码重置Agent的账号只能调密码重置接口,不能拥有查询全量员工信息的权限。即使Agent被恶意提示词攻击,也只能造成有限影响。
第二,所有高风险操作必须强制二次确认。即使系统已经通过MFA验证了用户身份,在执行“权限提升”或“数据导出”类操作前,还是要让用户在对话中明确确认一次:“你确认要提升某账号的权限吗?”这个确认动作会记入会话日志,作为审计依据。
第三,审计日志不能只记结果,还要记“决策依据”。比如某次权限申请被系统自动拒绝,日志里要能看到拒绝的原因是“部门不是白名单内”,而不只是“拒绝”两个字。这样一旦出现争议投诉,不用翻半个小时的上下文才能还原现场。
我强烈建议每月把Agent操作日志和工单系统的反馈记录做一次交叉比对。哪类请求用户满意度低、哪类请求经常被转人工处理,这些数据能反过来指导意图划分和Workflow逻辑的调整,形成优化闭环。
6. 做完这个项目之后,我重新理解的几件事
整套系统从需求梳理到稳定运行,前后经历了三个多月。最大的感受是,可执行AI Agent的本质不是用AI替代人,而是把“人要从对话里提炼信息并做出判断的过程”标准化、自动化了。Agent Builder和Workflows两者配合,前者决定了用户和机器沟通顺畅与否,后者决定了机器办事是否靠谱,缺一不可。
最后分享一个我至今保留的习惯:每次新增一个自动化场景,先亲手把该场景手动走三遍,把中间每一条规则、每一个判断都写清楚,再把它翻译成Workflows的逻辑。宁可前面多花时间,也绝不让机器带着模糊逻辑上线。
做这个项目的过程中,还有一个小技巧让我印象很深——用户操作语言里经常会出现“你好”“在吗”“麻烦”这类问候词,很多Agent会认真回应问候而忽略后面的关键请求。我专门在训练语料里加了一批“带问候语的真实请求模板”,效果立竿见影。这些小细节积累得多了,整个系统才会从一个“能用的玩具”变成一个“可靠的工具”。
如果下一个场景还让我选,我会优先挑那些“规则最清晰、影响最可控、后端接口最成熟”的请求来自动化。先把简单场景做到极致稳定,再慢慢往复杂度爬。这个顺序,比什么都重要。