Agent 会继续往前跑
模型可能在信息不足时硬猜,在风险不清时继续执行,在权限不明时直接调用工具,最后把错误变成真实动作。
Guardrails 的作用不是让 Agent 更“听话”,而是让它知道什么时候该停下来、什么时候该请人确认、什么时候必须拒绝。企业系统里,真正重要的是把高风险动作、越权请求和不确定结果挡在可控边界里,同时让人保留最终控制权。
护栏负责自动拦截明显不该过的请求,人工审核负责处理高风险、低置信度和会影响真实世界的动作。
模型可能在信息不足时硬猜,在风险不清时继续执行,在权限不明时直接调用工具,最后把错误变成真实动作。
系统会在输入、工具和输出三个层面检查风险,遇到高风险动作就交给人确认,保留最终控制权。
Guardrails 是围绕 Agent 构建的分层安全护栏,包括输入检查、工具检查、输出检查、风险分级和人工审核。它的目标不是完全阻止 Agent 工作,而是在不确定、越权和高风险场景下及时停下来,让人保留最终控制权。
一旦 Agent 接上工具、记忆和状态,它就可能不断放大一个错误决策,直到真正影响数据、流程或外部用户。
没有把缺失信息标出来,而是继续往下做,最后结果看起来很完整,其实并不可靠。
发外部邮件、删数据、改权限、付款、发布内容都属于不可逆或高影响动作。
检索结果冲突、工具返回异常、上下文不完整时,继续执行只会增加错误。
最终决策必须可追溯到具体责任人,不能让模型自动承担审批责任。
分层设计的好处是:每一层都只管自己该管的事情,避免全靠一个大 Prompt 硬扛。
检查是否越权、是否恶意、是否缺少关键条件、是否属于禁止范围。
调用工具前检查角色、参数范围、影响对象、次数限制和审批要求。
过滤敏感信息、内部提示、越权数据和错误事实,必要时改成拒绝或追问。
输入护栏:检测越权请求、敏感请求、注入内容和缺失信息。
工具护栏:在调用前做参数校验、权限校验、频率限制和影响评估。
输出护栏:检查敏感字段、内部提示词、未授权信息和格式错误。
任何高风险动作都要升级到人工审核。
如果没有停止条件,Agent 可能无限检索、反复重试、越做越远,直到成本、延迟或风险失控。
分级能避免两个极端:一边是所有事都人工审,效率太低;另一边是所有事都自动做,风险失控。
| 等级 | 例子 | 处理方式 |
|---|---|---|
| 低风险 | 总结、分类、摘要、草稿、标签整理。 | 自动执行,必要时抽检。 |
| 中风险 | 创建任务、生成内部通知、修改文档草稿。 | 默认先确认,再执行。 |
| 高风险 | 删除、发送外部邮件、付款、改数据库、发布。 | 必须审批,且记录审计。 |
| 禁止 | 越权访问、导出敏感数据、绕过审计、执行恶意注入。 | 直接拒绝,必要时上报。 |
审核流要定义谁来批、批什么、多久批、拒绝后怎么办、通过后怎么执行、执行后怎么回流。
{
"taskId": "agent_task_8842",
"riskLevel": "high",
"requiresApproval": true,
"approverRole": ["product_owner", "team_manager"],
"approvalOptions": ["approve", "reject", "revise", "request_info"],
"approvalReason": "涉及外部邮件发送和客户名单导出",
"executionAfterApproval": true
}
这个案例最容易说明护栏价值。Agent 可能只是“建议”,但建议一旦自动变成改动,就会变成真实业务风险。
建议:将库存阻断策略从“硬阻断”调整为“条件阻断”。
影响:
- 可能影响活动商品的下单成功率
- 可能影响库存预警准确率
- 可能改变当前线上订单流转
状态:
- 需要产品负责人确认
- 需要研发负责人确认
- 未确认前禁止直接修改线上规则
这一步很重要。把建议和执行拆开,能把很多误操作挡在真正生效之前。
{
"suggestion": "建议删除过期测试数据",
"riskLevel": "high",
"executionAllowed": false,
"blockedReason": [
"涉及真实数据删除",
"可能误删生产记录",
"需要人工审批"
],
"nextStep": "提交给数据负责人审批"
}
没有日志,你不知道是模型没看懂,还是规则没拦住,还是人审批错了。
原始请求、上下文摘要、风险标记。
召回了什么资料、为什么命中、是否有冲突。
谁审批、审批结果、审批理由、时间戳。
调用了什么工具、执行是否成功、后果是什么。
{
"requestId": "gr_20260612_0031",
"taskId": "agent_task_8842",
"riskLevel": "high",
"gate": "approval_required",
"decision": "blocked_until_review",
"reason": "attempted external email and data export",
"approver": null,
"createdAt": "2026-06-12T16:55:00+08:00"
}
安全策略不是写完就完。要有评测集、红队样例和线上反馈闭环,才能持续收紧边界。
| 指标 | 意义 | 怎么看 |
|---|---|---|
| 拦截率 | 该停的时候有没有停。 | 高风险样例要尽量拦住。 |
| 误杀率 | 正常任务有没有被过度拦截。 | 不能把好任务也全挡掉。 |
| 审批通过率 | 需要人工判断的动作是否被合理处理。 | 看审批链路是否清晰。 |
| 回流率 | 审核结果有没有回到测试集和规则里。 | 没有回流就难以持续改进。 |
企业治理的关键,是把“系统能做什么”和“人必须确认什么”分开写清楚。
系统负责检查输入、工具、输出和策略,自动拦住明显不能过的请求。
删除、发送、付款、改数据、发布等动作需要责任人确认。
系统判不定、模型信心不足、工具失败、规则冲突时,升级给人工处理。
安全系统不能假设自己永远正确。它要会降级、会阻断、会升级,也要会把异常情况记录下来。
这一页可以直接当项目评审清单用。做不到的项,就是风险项。
这个案例能很好说明:护栏的目标不是“不让 Agent 帮忙”,而是“不让它越过控制线”。
建议:
将库存阻断策略改为条件阻断前,先由产品和研发共同确认。
风险:
- 影响订单转化
- 影响库存预警
- 影响线上行为
状态:
- 待审批
- 未审批前禁止执行
这节的关键不是“怎么让 Agent 更强”,而是“怎么让它可控、可停、可审、可回滚”。
它解决 Agent 在接工具、记忆和状态后可能出现的失控问题,包括越权、误操作、敏感信息泄露、无限循环和错误放大。Guardrails 的作用是把风险拦在不同层面,让系统知道什么时候该停。
因为这样成本太高、效率太低。正确做法是分级:低风险自动化,中风险先确认,高风险必须审批,禁止项直接拒绝。人工审核要保留在最关键的位置,而不是覆盖所有流程。
要定义明确停止条件:完成条件、最大步数、时间和成本预算、连续失败次数、信息增量不足、需要人工确认、权限不满足等。一旦满足任一停止条件,Agent 就不能继续硬跑。
护栏负责自动判断风险、过滤明显错误和触发升级;审批负责对高风险动作做最终确认。护栏是前置控制,审批是最终控制,两者一起才能保证人保留最终控制权。
要同时看拦截率、误杀率、审批通过率、回流率、审计完整性和异常处理效果。安全系统不能只看“拦了多少”,还要看有没有拦错、漏拦和能不能复盘。
这节课学完,应该能回答“Agent 什么时候该停”“为什么停”“停下来交给谁”“结果怎么追踪”。
我会把 Guardrails 和人工审核拆成五个部分来讲:
第一,输入护栏,先识别不可信内容、越权请求和缺失信息。
第二,工具护栏,在模型调用工具前校验参数、权限、频率和影响范围。
第三,输出护栏,防止敏感信息、错误事实和不合规内容泄露出去。
第四,风险分级和停止条件,明确什么情况下 Agent 该停下来,什么情况下必须升级给人。
第五,人工审核和回流,把高风险动作交给责任人确认,并把审核结果回流到评测集和规则里。
这个设计的目标不是把 Agent 卡死,而是保证它在企业里可控、可审、可追溯,并且最终控制权仍然在人。