跳到主要内容

04-工具权限审计与人类审批

核对日期:2026-05-13。

不稳定项:工具调用协议、MCP Server 生态、浏览器/电脑操作能力、Agent 身份体系、审批工作流和审计字段会持续演进;生产系统必须按目标平台重新设计权限模型。

1. 学习目标

本专题聚焦 Agent 最容易造成真实事故的地方:模型不只是回答问题,而是可以调用工具改变外部世界。

学完后你应该能做到:

  • 为 AI 工具设计权限等级、参数校验、幂等性和回滚策略。
  • 区分只读、草稿、写入、外部发送、资金和权限类工具。
  • 设计策略层,让模型只能请求动作,不能自行越权执行。
  • 设计审批卡片,让人类在足够上下文下做最终控制。
  • 设计可追溯审计日志,回答谁、何时、基于什么证据、调用了什么工具、造成什么影响。

2. 工具风险分级

工具按外部影响分级,而不是按实现复杂度分级。

等级工具类型示例控制
L0无工具普通问答输出校验
L1只读搜索、读取知识库、查询订单用户权限过滤、trace
L2内部草稿创建邮件草稿、退款草稿、工单草稿参数校验、可撤销
L3内部写入更新 CRM、修改工单状态审批或强规则校验
L4外部副作用发邮件、发消息、提交表单人类审批、审计、限流
L5高危动作付款、退款、删库、权限变更、执行代码默认不暴露;专项评审

默认原则:能只读就不写入,能生成草稿就不直接执行。

3. 权限模型

工具权限至少由四个维度共同决定:

维度示例
用户身份当前用户是否有该业务权限
任务范围当前任务是否需要该工具
数据范围可访问哪些 tenant、项目、文档、订单
动作风险是否写入、外发、资金、权限、执行代码

不能用“模型觉得需要”作为授权理由。模型输出只是候选动作,最终由策略层判断。

推荐调用链:

model proposes tool_call
-> schema validation
-> business validation
-> permission check
-> risk classification
-> approval if needed
-> execute with scoped credential
-> audit and rollback metadata

4. 工具 schema

合格工具 schema 不只是参数类型。

{
"name": "create_refund_draft",
"description": "Create a refund draft for human review. Does not execute refund.",
"permission_level": "L2_draft",
"side_effect": "internal_draft_only",
"requires_approval": false,
"idempotency_key": "order_id + reason_hash",
"input_schema": {
"type": "object",
"required": ["order_id", "amount", "reason", "evidence_ids"],
"properties": {
"order_id": { "type": "string" },
"amount": { "type": "number", "minimum": 0 },
"reason": { "type": "string", "maxLength": 500 },
"evidence_ids": {
"type": "array",
"items": { "type": "string" }
}
}
},
"business_rules": [
"amount <= refundable_amount",
"order_status in ['paid', 'shipped']",
"no_duplicate_refund_draft"
],
"audit_fields": ["actor", "order_id", "amount", "evidence_ids", "trace_id"]
}

工具描述不能诱导模型越权,也不能把敏感实现细节暴露给模型。

5. Scoped Credential

不要让所有工具共享一个高权限 token。

推荐策略:

  • 每次工具调用使用短期凭据。
  • 凭据绑定用户、tenant、工具、资源范围和过期时间。
  • 写工具和读工具使用不同凭据。
  • 高风险工具需要审批后才生成执行凭据。
  • 凭据 ID 进入审计日志,原始密钥不进入日志。

如果工具后端无法支持细粒度授权,就不要把它直接暴露给 Agent。

6. 人类审批

需要审批的动作:

  • 发邮件、发短信、对外发布。
  • 资金变化、退款、付款、优惠发放。
  • 删除、覆盖、批量更新。
  • 权限变更、账号操作。
  • 访问或导出高敏数据。
  • 执行代码、命令、浏览器自动操作。
  • 法律、人事、医疗、金融等高风险决策。

审批卡片必须展示:

字段目的
动作审批人知道系统要做什么
参数能检查金额、收件人、对象 ID
证据能判断建议是否有依据
风险等级明确是否高风险
影响范围知道会影响哪些用户或系统
可撤销方式判断出错后能否回滚
trace id便于复盘

审批不是一句“确认吗”,而是一次有上下文的控制点。

7. 审计日志

AI 工具审计要能回放“为什么发生了这个动作”。

建议字段:

字段说明
trace_id调用链
request_id请求
tenant_id / user_id_hash租户和用户
feature功能
model / prompt_version模型和 Prompt 版本
tool_name / tool_version工具
tool_args_hash参数摘要
evidence_ids证据来源
policy_decisionallow / deny / require_approval
approval_id / approver审批
result_status成功、失败、回滚
risk_level风险等级

注意:审计日志本身也可能包含敏感信息,因此要做访问控制、脱敏、保留期和导出审批。

8. 工程案例

8.1 邮件发送 Agent

错误设计:

  • 模型直接调用 send_email(to, subject, body)
  • 没有域名限制。
  • 没有审批。
  • 日志保存完整邮件正文。

改造:

  • 先调用 create_email_draft
  • 外部域名发送需要审批。
  • 敏感字段检测。
  • 发送工具只接受 draft_id,不接受模型自由拼接正文。
  • 审计记录收件人、正文 hash、审批人和 trace。

8.2 代码执行工具

错误设计:

  • 模型可以生成 shell 命令并直接执行。
  • 工作目录和网络权限无限制。

改造:

  • 默认不暴露 shell。
  • 如必须执行,使用容器沙箱。
  • 限制目录、CPU、内存、网络和时间。
  • 命令白名单或审批。
  • 输出过滤密钥。

9. 常见反模式

反模式表现后果修正
一个万能 token所有工具共用高权限横向越权scoped credential
模型决定权限模型说能做就执行被注入诱导策略层授权
写工具无草稿直接发送、退款、删除不可撤销草稿加审批
审批信息不足只显示确认按钮人无法判断展示证据和影响
审计只记最终答案没有工具参数和策略决策无法追责trace 级审计

10. 练习

为“客服退款 Agent”设计工具权限矩阵,至少包含:

  • search_order
  • read_refund_policy
  • create_refund_draft
  • approve_refund
  • execute_refund
  • send_customer_email

每个工具标注权限等级、副作用、是否审批、是否可撤销、审计字段和拒绝条件。

11. 验收题

  1. 为什么模型只能提出工具调用请求,不能作为最终授权者?
  2. 只读工具和写入工具的风险差异是什么?
  3. 什么是 scoped credential?
  4. 合格审批卡片必须包含哪些信息?
  5. 工具审计日志为什么要记录证据 ID 和策略决策?

12. 延伸阅读