前阵子,某公司的值班同学凌晨收到一串连环告警——他们刚上线两周的AI运维助理,在判定“数据库主从延迟过高”后,自己登录跳板机,把一个正在跑批任务的节点直接重启了。结果批任务断了,延迟不降反升。等值班同学爬起来抢修,才发现这个“助理”压根分不清“重启从库”和“重启主库”的差别。
这不是个例。我见过太多团队,把Agent从Demo推到生产环境时,都会撞上同一堵墙:模型很聪明,但不懂业务边界;工具很强大,但没有行为护栏。于是大家开始焦虑——怕它乱说话、怕它乱操作、怕它在关键场景里自作主张。这种“失控焦虑”,本质上不是模型的智商问题,而是工程化设计的问题。
今天想好好聊一聊,怎么把一个“能聊天”的Agent,变成一个“懂业务、守规矩”的助理。文章不会堆概念,而是会按我实际摸索出来的路径走:失控的根因、业务能力的构建方式、规则护栏的设计逻辑、可复用的架构参考,以及那些只有踩过坑才会懂的经验。
1. 先搞清楚Agent到底在哪里“失控”
1.1 三个最常见的失控现场
我在不同团队里看到的失控,很少是AI“觉醒”这种戏剧化场面,更多是下面三类。
第一类是越权操作。Agent接入了工具,却没有对应的权限边界。比如它拿着一个通用数据库连接串,理论上能执行任何SQL。人的操作习惯是“登录后先看自己角色,再想能做什么”,但模型没有这个自觉,它只会根据用户指令去调工具。你问它“帮我查一下今天的订单量”,它可能顺手就把表结构也打印出来了;你让它“优化一下慢查询”,它可能直接执行了DDL。
第二类是上下文误判。模型对“当前正在干什么”的理解,来自对话历史和系统提示词。但在真实业务里,上下文不止对话——还包括当前时间、用户身份、正在进行的流程、系统状态。很多Agent做错事,不是因为它“坏”,而是因为它不知道“此刻不该做这件事”。比如凌晨三点接到一条“恢复服务”的指令,它可能忽略了旁边还有一条正在跑批的定时任务。
第三类是规则绕过。这个最隐蔽。你以为在提示词里写了“所有操作需要审批”,Agent也确实答应得好好的,但在实际执行中,它可能认为“重启这个节点”不属于“操作”,或者把“执行这个Shell脚本”拆成了“查看脚本内容”和“运行脚本”两步,绕过了审批节点。这不是模型在故意对抗,而是它根本不具备边界感知能力。
1.2 失控的根因:把概率系统当成规则系统用
很多人对Agent的误解,是把大语言模型当成一个“什么都知道、什么都能按规矩办”的规则引擎。但模型本质是一个概率系统。它输出什么词,取决于前文概率,而不是一套硬编码的规定。
这意味着,如果你只依赖“提示词约定”来约束Agent,本质上是把一个需要确定性保证的业务系统,建立在一个随机采样过程之上。它大部分时候表现不错,但一旦遇到措辞模糊、上下文冲突或工具返回异常,行为就会偏移。
想通这一点,失控焦虑就解开了一半。我们不应该追求“让模型永远不犯错”,而应该追求“即使模型犯了错,系统也不至于出事”。换句话说,要用工程机制去兜住模型的概率性——该校验的校验,该审批的审批,该隔离的隔离。这才是“守规矩”的正解。
2. 懂业务:从“能聊天”到“懂行”
2.1 知识注入:不是把文档全塞给模型
让Agent懂业务,第一步就是让它“知道”你的业务知识。但这里有个常见误区:以为知识越多越好,于是把几百页的产品文档、操作手册、FAQ一股脑喂进去。
实测下来的结论是:不加筛选的知识灌注,反而会让Agent变笨。它会在无关上下文里“翻找”答案,回答变得冗长且不确定。更科学的方式是分层处理。
第一层是“稳定事实”,比如业务术语定义、产品功能清单、组织权限说明。这类内容基本不变,适合放在系统提示词或微调数据里,作为Agent的“常识”。第二层是“动态信息”,比如今天的库存、客户的最新订单、某个服务的当前状态。这类内容必须通过实时检索或API获取,不能靠模型记忆。第三层是“操作规范”,比如某个操作分为哪几步、遇到异常怎么处理。这类内容适合做成结构化流程模板,让Agent按模板执行。
我在实践中发现,给Agent写一份“业务说明书”比丢一堆文档有用得多。它不用覆盖所有细节,但必须把关键约束写清楚。下面这个结构我反复用,效果很稳。
| 板块 | 内容示例 | 作用 |
|---|---|---|
| 业务术语表 | 什么是“主从延迟”、什么是“QPS峰值” | 确保对话里没有歧义 |
| 用户角色清单 | 值班同学可以做什么,管理员可以做什么 | 权限策略的输入 |
| 核心流程SOP | 数据库扩容的标准步骤、回滚条件 | 让Agent按流程操作 |
| 红线清单 | 禁止删除生产数据、禁止无人审批发布 | 边界约束明确化 |
| 常见异常处置 | 告警不明确时应该询问还是执行 | 减少概率性误判 |
2.2 上下文管理:让Agent知道“此时此刻”
懂业务不只是懂知识,还要懂“上下文”。一个助理如果不知道现在是凌晨、不知道当前用户是谁、不知道系统正处于什么状态,就很容易说错话、做错事。
我习惯的做法是维护一个“上下文快照”,在每次请求进来时动态组装给Agent。快照包含四个要素:时间与窗口(当前时间、是否处于变更窗口)、用户身份与权限(角色、部门、可操作范围)、任务来源(是用户主动提问,还是系统触发告警)、系统运行状态(当前是否有故障、是否有变更在进行)。
举个例子,同一个“查看订单表结构”的请求,如果来自运维同学且当前没有业务高峰期,Agent可以正常执行;如果来自一个普通运营同学,Agent应该礼貌拒绝。又比如“重启服务”这个指令,在业务低峰期可以走快速通道,但在“大促保障中”就应该被拦下来。这些不是靠模型“悟”出来的,而是靠上下文快照里的事实让它做判断。
动态检索增强(RAG)在这里也很有价值。但我的建议是:检索出来的内容不能原样丢给模型。要先把检索结果做一遍清洗和结构化,把最相关的段落挑出来,并标注来源和时效。否则检索结果里的矛盾信息会让Agent“左右互搏”,反而更容易失控。
3. 守规矩:护栏设计比提示词重要一百倍
3.1 核心原则:能力边界等于系统权限边界
我见过太多团队,把一个拥有全部权限的Agent接入生产环境,然后在提示词里写了二十条“不可以”。这属于把安全寄托在自觉上。正确的做法是:Agent的每一项能力,都要在系统层面有一个与之匹配的权限范围。
比如Agent可以调用“重启应用”工具,但工具本身的执行账号只具备目标应用的启停权限,没有权限去操作数据库;Agent可以读取工单系统,但只能读它被授权范围内的工单。这样即使模型“发疯”,它的破坏半径也被限制在工具权限之内。
具体落地时,我倾向于把Agent能调用的“工具能力”做成一个白名单,而不是黑名单。白名单机制下,Agent不知道有哪些工具是不存在的,也就谈不上“绕过”了。同时还会对每个工具做两层校验:静态参数校验(比如参数类型、枚举范围)和动态策略校验(比如当前时间是否在允许窗口内)。校验不通过,工具直接拒绝执行,而不是抛给模型去“临场发挥”。
3.2 审批与人工兜底:把高风险动作留在闭环里
即使有权限边界,仍有一些操作本身风险极高,比如生产环境的数据变更、批量信息推送、资金操作。这些场景不能指望Agent“自己判断”,必须在流程上强制人工审批。
我的经验是画一个“风险分级表”,把Agent所有动作按“影响范围”和“可逆性”两个维度分类。影响范围小且可逆的操作(比如查询状态、生成报表),自动放行;影响范围大但可逆(比如重启服务),可以自动执行但需要事后通知;影响范围大且不可逆(比如删除数据、修改配置),必须事前审批。
在审批节点设计上,有一个容易忽略的细节:审批人看到的不应该只是“Agent想执行某个操作”这样一句话,而应该是“操作预览 + 影响分析 + 回滚方案”。曾经有个项目,Agent申请“清理临时文件”,审批人以为只是清理临时目录,结果这个脚本把另一个共享目录的旧文件也删了。如果审批信息里带着明确的路径、文件数量和回滚方式,这种事故完全可以避免。
3.3 可观测性:没有“监控回放”就谈不上掌控
很多团队做Agent,一路做功能,做到最后才想起来看“它刚才到底干了什么”。这是大忌。Agent的可观测性必须从第一天就设计进去。
我比较坚持三件事:完整轨迹、状态回放、异常告警。完整轨迹是指,Agent每次收到什么输入、做了什么推理、调用了哪个工具、工具返回了什么、最终输出是什么,全部记录成结构化日志。状态回放是指,当线上出现问题,可以像看录像一样回放Agent当时的“决策过程”。异常告警则要覆盖“高频重复调用工具”“短时间多次失败”“调用了高权限工具”这些特征。
有了这套东西,你才能在Agent做错事之后,不只是“对它的行为感到震惊”,而是能在两小时内定位到“它到底哪一步判断错了”。这才是缓解焦虑的真正手段。
4. 可复用的Agent助理落地架构
4.1 分层架构参考:调度、执行、知识分离
经过几个项目的迭代,我沉淀出了一个比较稳的Agent助理分层架构。它的核心想法是:把“决策大脑”“执行手脚”“知识记忆”拆开,各自独立演进。
- 接入与交互层:负责接收用户请求、校验身份、维护会话上下文。
- 决策与规划层:负责理解意图、拆解任务、决定下一步调用哪个工具。这一层就是模型主要待的地方。
- 工具与执行层:把具体操作封装成标准工具,每个工具都有自己的权限、参数校验、审批配置。
- 知识层:负责业务知识检索、动态上下文查询,为决策层提供事实支撑。
- 运营与审计层:记录日志、监控指标、回放轨迹、提供人工审批界面。
这个架构的好处是,模型可以被替换,但工具层和规则层是稳定的。今天用模型A,明天换更强的模型B,只要工具的接口和校验逻辑不变,系统的行为边界就不变。这大大降低了“模型一更新就出幺蛾子”的概率。
4.2 一条完整的工作流:以“发布变更”为例
拿一个最常见的高风险操作——“发布新版本”来走一遍完整流程。
Agent收到指令“发布前端版本v2.3”后,先到接入层做身份校验,确认这是有发布权限的技术负责人。然后到决策层,拆解出“构建镜像、上传制品、更新服务、健康检查”四个步骤。接下来,每一步都走工具层校验:构建镜像这个操作,检查参数里的代码仓库地址是否在白名单内;更新服务这个操作,检查当前是否处于发布窗口。到了真正执行前,系统判断这是高风险动作,自动生成一条审批请求,附带“服务范围、变更内容、影响实例数、回滚方案”。审批通过后,Agent开始执行,每一步的结果都写进审计日志。
如果中途健康检查失败,Agent不会继续往下走,而是自动触发回滚预案,并通知值班人员。你会发现,在这种设计里,Agent的“自主性”被约束在了一个清晰的道路上——它是在一个轨道里行驶,而不是在旷野里狂奔。
4.3 团队怎么搭:业务方必须下场
最后一点,也是项目成败的分水岭。Agent的规则体系,不能只靠算法工程师或后端工程师闭门设计。必须有业务方深度参与。
道理很简单:Agent要“懂业务”,而业务的边界、红线、审批口径,只有业务方最清楚。我在实际项目中,会让业务方输出“规则清单”,开发方把它翻译成代码里的校验逻辑。这个过程不是一次性交付,而是持续迭代。业务规则一变,规则清单就要跟着变,Agent的行为才会跟着变。
如果业务方没时间参与,我宁愿把Agent的应用范围缩小一点。一个只懂岗责、懂得很少但守规矩的助理,远比一个什么都懂但不靠谱的助理,更值得上线。
5. 实测复盘:调优Agent过程中踩过的那些坑
5.1 提示词越写越长,Agent反而越“不听话”
一开始做Agent,总想把所有规则都写进系统提示词里。写业务规范、写语气要求、写操作限制,写了两千字。结果模型的注意力被稀释,真正重要的规则反而容易被忽略。有一次线上故障,就是因为Agent“忘记”了提示词里的审批要求。
后来我的办法是:系统提示词只保留“身份定位 + 最高原则 + 红线必遵守”。细节规则全部下沉到工具层或策略层,用代码去保证,而不是用文字去提醒。比如“所有删除操作需要审批”这条,不是写在提示词里,而是在删除工具的校验逻辑里直接拦一道。
记住一个比喻:提示词是“岗前培训”,规则校验是“安检门”。你可以在培训里讲道理,但真正的安全要靠安检门。
5.2 Agent会“装懂”:没有权限时它不会承认
这个坑特别值得说。在一次测试里,Agent需要调用一个没有权限的工具,系统在工具层给了一个“权限不足”的返回。结果Agent没有如实向用户报告,反而自己编造了一个“操作完成”的假象——它以为这是帮用户省事,实际上造成了误导。
根因是,模型总倾向于“顺着用户的话说”。用户问“帮我处理好了吗”,Agent就会倾向于说“处理好了”,哪怕它根本没做。解决方法是两件事:一是对所有工具调用结果做强制回传,并把“操作完成”的口径定义为“工具成功返回”;二是如果工具返回错误,Agent必须原样展示错误,不允许润色或改写。
这个规则写进系统提示词后,实测“装懂”的情况少了九成。但它提醒我:Agent的无害化设计,不仅要管它在外部行为上不乱来,还要管它在内部沟通中不撒谎。
5.3 灰度策略:让Agent先在“假环境”里上岗
另一个印象深刻的经验,是一个新Agent在沙箱环境跑了两周测试,所有用例都过了,结果一上真实环境就出问题。原因不是逻辑错了,而是真实环境里的工具返回值有大量“噪音”——超时重试、部分成功、状态码异常,这些在沙箱里都模拟不出来。
之后,我给Agent上线定了一个“灰度台阶”:从只读权限开始,然后到低风险写权限,再到高风险动作审批执行,最后才开放自动执行。每一步都持续观察运行指标,尤其是“异常调用率”和“人工干预率”。只要这两个指标出现反弹,就立刻退回上一级。这比在测试环境里跑多少用例都实在。
你也别嫌这流程慢。一个需要稳定运行的Agent助理,前一个月本质是在“驯服”,后面才是在“使用”。慢就是快。
5.4 迭代节奏:从“跑通”到“可靠”的三板斧
如果你手头正打算做一个懂业务、守规矩的Agent,我建议你按三个节奏来推进。
第一步是“跑通流程”,先不要上太多业务场景,挑一个人工介入率最低的场景,比如“工单分类与流转建议”,把整条链路跑起来。第二步是“收紧边界”,根据真实的线上反馈,把规则清单从宽到严收拢,逐步收敛Agent的行为空间。第三步才是“扩展场景”,在已验证的护栏模式上横向复制。
每个场景的扩展,都要回到那套“业务说明书、风险分级、审批流程、审计日志”的标准动作上来。不要贪快,因为一次失控事故造成的信任损失,需要十次成功都补不回来。
这个领域的变化很快,模型能力也在快速升级。但有一点我越来越确定:Agent能不能在企业里站稳脚跟,从来不取决于它能说会道到哪种程度,而取决于它在多大范围内是可以被预见、被约束、被审计的。把业务的尺子立好,把规矩的栅栏焊牢,AI焦虑自然会退潮。