第 1.6.3 节:把工具调用放进权限、审批和幂等流程
工具调用只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够设计工具调用的角色权限、审批条件、审计记录和越权处理。
| 任务卡 | 内容 |
|---|---|
| 本节任务 | 为每个工具设计权限、审批、确认和重复提交控制。 |
| 你会产出 | 一张“权限、审批与幂等矩阵”。 |
| 使用场景 | 只读查询、创建工单、投诉处理、退款审批、发送通知。 |
| 完成标准 | 每个工具都标出风险类型、校验点、审批策略和幂等键。 |
权限不能只写在 Prompt(提示词)里。Prompt 可以提醒模型,但真正的权限必须由系统规则执行。
工具调用至少要经过五层控制:
| 控制层 | 控制什么 | 客服例子 |
|---|---|---|
| 身份校验 | 当前用户是谁 | 未登录不能查订单。 |
| 业务对象校验 | 这个订单或工单是否属于当前用户 | 不能查陌生订单号。 |
| 工具权限 | 当前角色能不能用这个工具 | 普通用户不能调用内部备注工具。 |
| 动作权限 | 这个动作能否自动执行 | 创建工单可半自动,直接退款不行。 |
| 审批权限 | 高风险动作由谁确认 | 退款、补偿、敏感投诉进入人工审批。 |
写入工具还要考虑幂等。幂等的意思是:同一个业务动作重复执行时,不能造成重复后果。比如网络超时后 Agent 重试,不能创建两个工单,也不能提交两次退款审批。
实现步骤或决策流程
- 按风险把工具分成只读、写入、通知、高风险审批。
- 给每个工具补身份校验和业务对象归属校验。
- 判断是否需要用户确认:只读通常不需要,写入通常需要。
- 判断是否需要人工审批:资金、补偿、投诉、合规类动作必须谨慎。
- 给写入工具设计幂等键,例如 trace_id、order_id + issue_type、ticket_dedupe_key。
- 写清自动执行边界,说明 Agent 能申请什么、不能直接做什么。
读图重点:模型没有执行权;身份、对象、风险、幂等和审批都由系统控制,日志是所有结果的共同出口。
可复制模板
## 权限、审批与幂等矩阵
| 工具名称 | 风险类型 | 身份校验 | 业务对象校验 | 用户确认 | 人工审批 | 幂等键 | 自动执行边界 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | |
示例填写
| 工具名称 | 风险类型 | 身份校验 | 业务对象校验 | 用户确认 | 人工审批 | 幂等键 | 自动执行边界 |
|---|---|---|---|---|---|---|---|
| query_order_status | 只读 | 必须 | 订单必须归属当前用户 | 否 | 否 | trace_id | 只能查询当前用户订单,不能修改订单。 |
| create_support_ticket | 写入 | 必须 | 关联订单必须归属当前用户 | 必须 | 投诉类视情况 | user_id + issue_type + order_id | 只能在用户确认摘要后创建工单。 |
| create_refund_review | 高风险审批 | 必须 | 订单必须归属当前用户且可售后 | 必须 | 必须 | order_id + refund_reason | 只能发起审批,不能直接退款。 |
新手自查清单
- 我有没有把权限交给 Prompt,而不是系统校验?
- 我有没有校验订单、工单、客户资料是否属于当前用户?
- 写入工具是否必须经过用户确认?
- 退款、补偿、投诉等高风险动作是否进入人工审批?
- 写入工具是否有幂等键,能防止重复建单或重复审批?
本节交付物与面试讲法
本节交付物是一张“权限、审批与幂等矩阵”。合格标准是每个工具都能说明:谁能用、能对什么对象用、是否要确认、是否要审批、重复执行会怎样处理。
面试时可以这样讲:
我不会让模型直接决定是否执行高风险工具。模型只能提出调用意图,系统再做身份、对象归属、工具权限和动作权限校验。只读查询可以自动执行,写入动作要用户确认,资金和补偿类动作必须进入人工审批。对创建工单和退款审批这类写入工具,我还会设计幂等键,避免重复提交。