ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

智能体自主决策+人工审批+全程审计:从Demo到生产的落地实践

智能体自主决策+人工审批+全程审计:从Demo到生产的落地实践 1. 从能干活到敢放权智能体自动化的分水岭过去一年我经手过不少智能体项目从客服问答到代码检视从数据清洗到运维脚本生成几乎每个团队在Demo阶段都兴奋得不行——这东西能自己调工具、自己拆任务、自己写代码太强了。但真正推到生产环境的时候几乎所有人都会卡在同一个地方你敢让它自己动手吗这个问题听起来像是技术问题实际上是信任问题。一个智能体如果只能建议而不能执行那它本质上还是个高级搜索框可一旦让它真的去改数据库、发消息、调接口、删文件风险就瞬间从答错了重问一遍变成删库跑路谁来兜底。我见过最典型的一个场景某团队的运维智能体被授权自动处理告警结果它把一条正常的扩容操作误判成异常反手把生产节点给重启了。事后复盘问题不在于模型能力而在于整个链路里没有任何一个环节问过这一步该不该做。所以可审批、可审计这六个字不是给智能体加两个花哨的功能而是它从玩具变成生产工具的分水岭。可审批解决的是动作发生前的把关可审计解决的是动作发生后的追溯。这两件事合在一起才构成了一套让人类愿意把权限交出去的信任基础设施。这篇文章我想聊的不是某个具体框架的API怎么调而是把智能体自主决策人工审批全程审计这套模式拆开讲清楚它背后的设计逻辑、落地时会遇到哪些坑、以及我在实际项目里总结出来的一些取舍经验。不管你是用Coze、Dify这类平台搭智能体还是用Python自己撸一套Agent框架这套思路都是通用的。适合已经跑通Demo、正准备往生产推的开发者也适合正在评估要不要让AI接管某个流程的技术负责人。2. 拆解自主决策智能体到底在哪些环节拿主意2.1 决策粒度决定了审批的插入点很多人一上来就问怎么给智能体加审批但更该先问的是智能体在哪些地方做了决策。因为审批不是随便找个地方插一个确认框就完事你得先知道它的决策链条长什么样。一个典型的工具调用型智能体它的决策链大致是这样的理解意图 → 拆解任务 → 选择工具 → 填充参数 → 执行调用 → 处理结果 → 决定下一步。这里面每一步都可能是自主的但风险等级完全不同。理解意图和拆解任务这一步错了后面全错但它本身不产生副作用属于想错了而不是做错了。选择工具选错工具可能带来风险比如该用只读查询却选了写操作。填充参数这是最危险的一环。参数填错工具选对了照样出事。比如删除30天前的日志被填成删除3天前的日志工具没错参数要命。执行调用动作真正发生的时刻。处理结果和决定下一步可能触发连锁反应比如失败后自动重试重试逻辑写错会放大问题。我的经验是审批点应该卡在参数填充完成、执行调用之前这个位置。太早了你审批的是一个模糊的意图人也不知道该批什么太晚了动作已经发生审批就成了马后炮。这个位置对应的是我知道它要干什么、用什么工具、带什么参数但还没真的干——这才是人类能做出有效判断的时刻。2.2 不是所有动作都值得审批如果每个动作都要人点确认那智能体的价值就归零了人变成了瓶颈。所以真正可用的方案一定是分级授权的。我在项目里通常把动作分成三档风险等级典型动作处理策略低风险只读查询、日志检索、信息汇总直接执行事后审计中风险写操作但可逆、发通知、创建草稿首次审批同类动作批量授权高风险删除、覆盖、对外发送、涉及资金或权限变更逐次审批且需二次确认这个分级不是拍脑袋定的而是根据可逆性和影响范围两个维度来的。可逆的操作比如创建一条草稿出错了删掉就行没必要每次都拦不可逆的操作比如发送一封对外邮件发出去就收不回来必须拦。影响范围同理改自己的一条记录和改全表的数据风险差着数量级。提示分级策略一定要写进配置而不是写死在代码里。我踩过的坑是把风险等级硬编码在工具定义里结果业务方想调整某个动作的审批级别得改代码重新发版。后来改成配置文件驱动运营自己就能调。2.3 自主性的边界什么时候该让智能体停下来问除了按风险等级审批还有一种情况是智能体自己拿不准。这时候正确的做法不是让它硬着头皮猜而是主动触发审批请求。判断拿不准的信号有几个工具选择置信度低多个工具都像选哪个都说得通、参数缺失或歧义用户说处理一下那个文件哪个文件、执行结果异常返回了预期外的错误码、触发了预设的敏感词或敏感操作模式。这里有个反直觉的点让智能体频繁停下来问并不一定是坏事但问的方式很重要。如果它每次都弹一个我不确定请指示人会被烦死。好的做法是让它带着方案来问——我打算用A工具、带B参数执行因为C原因确认吗这样人只需要判断不需要重新思考。这其实就是审批界面的核心设计原则把决策成本从人身上转移到智能体身上。3. 审批机制怎么设计才不沦为摆设3.1 审批不是弹窗是一条完整的状态机我见过太多审批功能本质上就是一个confirm()弹窗点确定就继续点取消就终止。这种设计在生产环境里基本没用因为它没有状态、没有记录、没有超时处理、没有并发控制。真正的审批应该是一条状态机。一个审批请求从产生到终结至少经历这几个状态待审批 → 审批中 → 已批准/已拒绝 → 已执行/已取消。每个状态转换都要有明确的条件和记录。为什么要有审批中这个中间态因为审批可能是多人的、可能有时限的、可能被转交的。比如一个高风险操作需要主管和运维双签第一个人批了之后状态是审批中而不是已批准得等第二个人。如果第一个人拒绝直接进已拒绝。这套状态机用数据库表来实现最稳妥字段大致包括请求ID、智能体会话ID、动作描述、工具名、参数快照、风险等级、当前状态、审批人列表、创建时间、超时时间、执行结果。3.2 审批请求里必须包含什么信息审批人做判断的依据全在审批请求的内容里。信息给少了人没法判断给多了人懒得看。我总结的最小必要集是这几项动作的自然语言描述一句话说清楚要干什么比如删除2024年1月之前的归档日志。工具名和完整参数这是原始事实不能只给描述不给参数否则描述可能被智能体美化。触发原因智能体为什么决定做这个动作它的推理链是什么。影响预估预计影响多少条记录、哪些资源、是否可逆。风险等级和审批要求需要几个人批、有没有超时限制。其中触发原因这一项最容易被忽略但恰恰最重要。因为审批人真正要判断的是智能体的推理对不对而不是这个动作本身危不危险。一个删除动作如果推理链是用户明确要求清理旧数据且已确认范围那它可能是安全的如果推理链是我猜测这些数据可能没用了那就该拒绝。3.3 超时、批量与并发那些Demo里不会遇到的问题Demo里的审批永远是一个人、一个请求、立刻响应。生产环境里全是意外。超时审批人可能下班了、在开会、没看到通知。这时候请求不能无限挂着。我的做法是设置分级超时——低风险请求15分钟无响应自动批准因为本来就低风险中风险2小时无响应自动拒绝高风险24小时无响应自动拒绝并告警。自动批准低风险请求这个策略有争议但实测下来如果不这么做智能体在夜间基本处于瘫痪状态。批量智能体可能在一个任务里连续产生几十个同类审批请求比如批量处理100个文件。如果每个都单独审批人会疯。解决方案是同类动作聚合审批——把相同工具、相似参数的请求合并成一个批次审批人一次批准整批。但要注意聚合的前提是这些动作确实同质不能把删除A表和删除B表混在一起。并发多个智能体实例同时运行可能对同一资源产生冲突的审批请求。比如一个要扩容、一个要缩容。这种情况必须在审批层做资源锁同一资源的互斥操作不能同时进入待审批状态否则批了两个矛盾的动作执行时必然出事。注意审批和执行之间一定要有二次校验。审批通过后到真正执行前资源状态可能已经变了。我遇到过审批通过后等了半小时才执行结果目标文件已经被别人删了智能体执行时报错但错误处理逻辑又触发了重试反而制造了混乱。所以执行前要重新校验前置条件。4. 审计日志不是记流水账是还原决策现场4.1 审计要回答的三个问题审计日志最常见的错误是记成了操作流水——什么时间调了什么接口、返回了什么。这种日志在出事后基本没用因为它回答不了最关键的问题为什么。一份合格的智能体审计日志必须能回答三个问题它当时看到了什么它当时想了什么它当时做了什么看到了什么输入给模型的完整上下文包括用户指令、历史对话、检索到的资料、工具返回的结果。这是决策的原料。想了什么模型的推理过程包括它为什么选这个工具、为什么填这些参数、有没有考虑过其他方案。如果用的是支持思维链的模型这部分要完整保留。做了什么实际执行的工具调用、参数、返回结果、以及审批记录。这三部分缺一不可。只有做了什么你只能知道结果加上看到了什么你能知道它是不是被错误信息误导了再加上想了什么你才能判断它的决策逻辑本身有没有问题。4.2 日志的结构化与可检索审计日志如果是一坨纯文本出事的时候根本没法查。必须结构化。我的做法是每条日志记录一个JSON对象核心字段包括时间戳、会话ID、步骤序号、事件类型输入/推理/工具调用/审批/执行结果、模型版本、工具名、参数、结果、耗时、token消耗、审批状态。其中步骤序号很关键它把一次会话里的所有事件串成一条链方便按时间线还原。存储上我倾向于用支持全文检索的方案因为排查问题时经常需要按关键词搜。比如找出所有涉及删除操作且被拒绝的审批或者找出所有参数里包含某个表名的调用。纯关系型数据库做这种模糊查询很吃力加一层搜索引擎会舒服很多。4.3 审计的不可篡改性审计日志如果可以被智能体自己修改那它就失去了意义。所以日志的写入必须是单向的、智能体无权限修改的。具体做法智能体只能通过一个专门的日志接口写入这个接口只接受追加操作不提供修改和删除。日志存储和智能体运行环境在权限上隔离智能体进程没有直接写日志存储的凭证。如果对合规要求更高还可以对日志做哈希链——每条日志包含前一条的哈希任何篡改都会导致链断裂。这一点在Demo阶段没人关心但一旦涉及对外服务或者受监管的业务就是硬性要求。我建议从项目一开始就把日志写入做成独立服务别等到要合规了再重构那时候改起来伤筋动骨。5. 落地时的真实取舍我在项目里踩过的坑5.1 审批延迟对智能体体验的破坏理论上审批很美好实际上审批会严重拖慢智能体的响应。一个原本3秒完成的任务如果需要人工审批可能变成3分钟甚至3小时。用户体感上这个智能体就变笨了。我的应对策略是把审批做成异步的。智能体发起审批请求后不阻塞等待而是把当前任务挂起先去做其他不依赖这个结果的部分或者直接告诉用户这个操作需要确认确认后我会继续。等审批结果回来再恢复任务。这样用户不会觉得卡住智能体也不会因为等待而浪费资源。但异步带来一个新问题任务状态管理变复杂了。一个任务可能处于等待审批状态这时候如果用户又发了新指令怎么处理我的做法是给每个任务一个独立的状态机新指令要么排队、要么开启新任务不能打断正在等待审批的任务否则审批回来时上下文已经变了。5.2 审批人成了瓶颈怎么办小团队里能审批高风险操作的可能就一两个人。如果智能体用得多这两个人会被审批请求淹没最后要么草草点批准要么干脆不用了。解决这个问题的根本办法还是分级授权 信任积累。一开始所有中高风险操作都要审批但随着智能体在同类操作上表现稳定逐步放宽——比如某个工具连续50次调用都没出问题就把它从逐次审批降级为批量审批甚至事后审计。这个降级过程可以是自动的基于成功率、拒绝率、异常率这些指标。这本质上是在做信任的动态管理。人对智能体的信任不是一次性给的而是随着观察逐步建立的。系统设计上要支持这种渐进式放权而不是一开始就要求人做全信或全不信的二元选择。5.3 智能体绕过审批的可能性这是个安全边界问题。如果智能体的执行权限和审批检查在同一个进程里理论上它有可能通过某种方式绕过检查直接执行。虽然正常运行的智能体不会主动这么做但如果它被提示注入攻击或者模型产生了幻觉就可能出现意外行为。所以审批检查必须放在智能体无法触及的层面。具体来说工具的实际执行不应该由智能体进程直接完成而应该由一个独立的执行服务来做这个服务在执行前强制检查审批状态。智能体只能请求执行不能直接执行。这样即使智能体被攻破它也绕不过执行服务这一关。这个架构在Demo阶段显得很重但它是可审批真正成立的前提。如果审批只是智能体代码里的一个if判断那它随时可能被绕过。6. 从零搭一套最小可用的审批审计链路6.1 组件划分如果要自己实现我建议至少拆成四个组件智能体运行时负责推理和决策产生工具调用请求。审批服务接收审批请求管理审批状态机通知审批人。执行服务真正执行工具调用执行前校验审批状态。审计服务接收所有事件结构化存储提供检索。这四个组件之间通过消息或API通信智能体运行时对执行服务和审计服务只有请求权限没有直接操作权限。6.2 一次完整调用的时序用文字描述一下正常流程智能体决定调用某工具 → 运行时判断风险等级 → 低风险直接发执行请求高风险发审批请求 → 审批服务创建审批记录并通知审批人 → 审批人批准 → 审批服务更新状态并通知执行服务 → 执行服务校验审批有效后执行 → 执行结果写入审计服务 → 结果返回智能体 → 智能体继续下一步。这个链路里每一步都要写审计日志包括审批的等待时间、审批人是谁、审批意见是什么。这些在事后复盘时都是关键信息。6.3 配置驱动的风险分级风险分级不要写死在代码里用配置文件。一个工具的风险定义大概长这样tools: - name: query_logs risk: low approval: none - name: create_draft risk: medium approval: first_time - name: delete_records risk: high approval: every_time approvers: [admin, ops_lead] timeout: 24h这样业务方调整策略时不用改代码改配置重启即可。first_time这种策略表示同类操作首次需要审批之后批量授权适合那些第一次谨慎、后面放心的场景。6.4 审计日志的最小字段集如果不想一上来就搞很复杂审计日志至少要有这些字段timestamp、session_id、step、event_type、tool_name、params、result、approval_status、approver、duration_ms。有了这些基本的追溯和统计就能做了。后面要加思维链、加token统计、加成本核算都是在这个基础上扩展。7. 这套模式适合什么样的场景不是所有智能体都需要审批审计。如果一个智能体只做信息查询、内容生成、数据分析这类无副作用的活那审批就是多余的审计也可以简化。审批审计的价值和智能体被授予的权限成正比。我判断一个场景要不要上这套机制看三个信号动作是否可逆、影响是否对外、是否涉及敏感资源。三个里占一个就该考虑加审批占两个以上就必须加而且要做完整的审计。典型的适用场景包括自动化运维改配置、重启服务、扩缩容、数据处理删除、覆盖、迁移、对外交互发消息、发邮件、提交表单、权限管理授权、改角色、资金相关下单、退款、转账。这些场景的共同点是智能体一旦做错后果不是重新生成一次能解决的。反过来像智能体客服的问答、代码补全建议、文档摘要这些动作本身就是输出文本没有副作用审批审计的投入产出比就很低。把精力花在提升回答质量上更划算。8. 我个人的几条实操心得第一审批界面要能一键复现。审批人看到的不应该只是一段描述而应该能点开看到完整的上下文、推理链、参数详情。我做过一个审批后台审批人点开请求能看到智能体当时的完整思维过程判断效率高很多。这个投入很值。第二审计日志要定期做回放测试。随机抽一些历史会话按日志还原整个决策过程看能不能解释清楚每一步。如果还原不出来说明日志有缺失赶紧补。这个习惯帮我发现过好几次日志字段遗漏的问题。第三别指望智能体永远不犯错要指望它犯错时能被拦住。这是心态问题。很多团队花大量精力试图让智能体绝对正确但更务实的做法是接受它会犯错然后把审批和审计做扎实让错误在造成实际损失前被拦下或者事后能快速定位和回滚。第四审批的粒度要能动态调整。业务在变风险偏好在变审批策略也得能跟着变。我现在的做法是每个月复盘一次审批数据——哪些操作被拒得多、哪些审批耗时最长、哪些自动批准后出过问题——根据这些数据调整分级策略。这套机制不是搭好就不管了它需要持续运营。第五给智能体留一个紧急刹车。不管审批做得多好总要有一个全局的开关能在发现异常时一键暂停所有智能体的执行权限。这个开关要足够显眼、足够简单最好是不依赖任何复杂系统就能生效的。我见过出事时找不到刹车在哪的团队那几分钟的混乱代价很大。这套可审批、可审计的模式本质上是在智能体的自主性和人类的控制权之间找一个可持续的平衡点。它不追求让智能体完全自主也不追求让人完全掌控而是让两者各司其职——智能体负责高效执行和提出方案人负责在关键节点做判断和兜底。这个平衡点会随着信任的积累不断移动而支撑这个移动的就是审批和审计这两根柱子。
返回列表