AI Agent工具调用人工审批安全设计

AI Agent 工具调用如何加人工审批?把确认按钮绑定到真实执行参数

2026-09-11 · 约 9 分钟阅读

给 AI Agent 增加一个“是否继续”按钮,并不等于建立了可靠的人工审批。用户确认的是哪封邮件、哪笔订单、哪个收款对象?如果确认后模型还能改参数,或者旧确认被用于新任务,按钮就无法代表真实授权。本文提供应用侧的审批设计方法,不依赖任何模型新增功能。

一、模型负责提议,业务系统负责授权

首先划清职责:模型可以提出工具调用建议,但能否执行必须由业务系统决定。不要让模型自行输出“用户已同意”,再把这句话当作授权凭据。用户身份、工具权限和资源访问权应来自可信会话与服务端权限体系。

按照操作后果拆分工具。只读查询、草稿生成、发送消息和修改业务记录应有不同授权要求。是否需要人工确认由风险规则决定,不由模型临时判断。对于支付、删除等高影响操作,还应设计独立审核或撤销机制。

二、审批对象必须是一份固定提案

建议工具提案至少包含操作类型、目标资源、参数快照、发起用户、所属租户、有效期和提案状态。服务端先验证参数,再生成用户能够理解的审批摘要。摘要应来自固定参数,而不是让模型自由描述,以免漏掉抄送人、收件地址或金额等关键内容。

当参数发生变化,应生成新提案并使旧审批失效。不要把“同意发邮件”理解为允许模型向任意地址发送任意内容。编辑邮件正文、增加附件或更换收件人,都可能改变用户同意的实际范围。

  • 明确展示操作对象与关键参数。
  • 标注是否影响外部系统以及能否撤销。
  • 允许拒绝、修改或返回查看完整内容。
  • 不把默认勾选当作高风险操作的明确同意。

三、检查批准内容与执行内容是否一致

以下 Python 示例演示纯本地的匹配规则。审批记录必须由服务端持久化并受访问控制保护,不能让调用者提交一个“approved”字段就通过检查。时间值只是测试数据,不代表生产有效期建议。

def can_execute(proposal, approval, now):
    return all([
        approval["status"] == "approved",
        not approval["consumed"],
        approval["expires_at"] > now,
        approval["proposal_id"] == proposal["id"],
        approval["tenant"] == proposal["tenant"],
        approval["actor"] == proposal["actor"],
        approval["action"] == proposal["action"],
        approval["params"] == proposal["params"],
    ])
proposal = {"id": "demo", "tenant": "test", "actor": "alice", "action": "send_mail", "params": {"to": "demo@example.com"}}
approval = dict(proposal, proposal_id="demo", status="approved", consumed=False, expires_at=20)
assert can_execute(proposal, approval, 10)
assert not can_execute(proposal, approval, 30)

这段代码只是决策规则,不包含数据库锁、权限系统或真实发送逻辑。生产环境需要冻结参数快照,避免检查完成后对象又被修改。测试时应覆盖参数被改动、跨租户、过期和重复消费等拒绝路径。

四、执行前还要重新鉴权

审批通过与工具执行之间可能隔着排队和人工等待。在这段时间里,用户权限、资源状态或业务规则可能变化。因此执行前需要再次检查操作者权限、目标资源是否有效以及提案是否仍适用,而不是只检查一枚审批标识。

把审批消费设计成受并发控制保护的一次性状态转换。两个执行进程同时拿到同一提案时,只能有一个取得执行资格。但这仍不能自动保证外部服务只执行一次:如果发送后连接中断,结果可能不明确,需要依靠业务幂等标识和结果查询处理。

遇到结果不确定的操作,不要直接重新申请一次确认并再次执行。先核对外部系统是否已生效,把“等待核对”作为独立状态,防止重复发信或重复修改记录。

五、审批界面也需要安全边界

邮件正文、网页摘要和检索资料都可能包含要求用户点击的文字。审批界面应把这些内容作为待审数据展示,与系统生成的授权提示明确分区。不要让外部文档中的“已审核”“请立即执行”改变提案状态或覆盖真实目标地址。

界面还应对内容按安全方式渲染,避免把模型生成的标记直接当作可信页面执行。重要参数应有固定位置展示,长正文可折叠,但收件人、目标对象等影响授权范围的信息不能被隐藏。

六、用无副作用工具完成验收

上线前先接入只记录参数、不触发真实外部动作的测试工具。分别验证正常批准、用户拒绝、批准后改参数、权限撤销、过期和并发执行。检查审计记录是否能够还原“谁批准了什么、实际执行了什么”,同时避免无期限保存敏感正文。

中转站提供模型接入,不应替代业务系统的最终授权。可到 openairouter.net 中转站对比 和 中转站排行榜 筛选支持目标调用方式的平台,再在自己的应用内落实审批边界。

找到最适合你的 AI API 中转站

收录 125+ 服务商,按价格、模型、标签一键筛选

查看所有中转站 →