跳到主要内容

第 1.6.4 节:为工具失败、越权和重复调用设计兜底与审计

工具失败、越权和重复调用只有拆成可执行步骤,才容易复核、排错和交接。完成本节后,你应该能够设计工具失败、越权和重复调用的角色权限、审批条件、审计记录和越权处理。

任务卡内容
本节任务为工具调用设计失败兜底和审计日志字段。
你会产出一张“失败兜底表”和一张“审计日志字段表”。
使用场景未登录、无权限、缺字段、工具超时、重复提交、高风险动作。
完成标准每类失败都有系统处理方式、用户回答方式和日志记录字段。

工具调用最危险的不是失败,而是失败后让模型自由补答案。客服场景里,如果订单工具超时,Agent 不能说“你的订单明天送达”;如果退款审批失败,Agent 不能说“退款已完成”。

失败兜底要同时解决三个问题:

问题要求客服例子
系统怎么处理重试、追问、拒绝、转人工、展示已有状态。工具超时可有限重试,越权必须拒绝。
用户怎么感知不泄露内部细节,但说明下一步。“当前订单系统暂时无响应,可以稍后重试或转人工。”
日志怎么复盘记录 trace_id、工具、状态、错误和处理结果。复盘为什么没有创建工单或为什么进入审批。

审计日志不是把所有隐私数据复制一份。日志只记录复盘需要的摘要字段,不能记录 API Key、完整身份证号、完整地址等敏感原文。

实现步骤或决策流程​

  1. 从前三节的工具清单里列出每个工具可能失败的情况。
  2. 把失败分成身份问题、权限问题、字段问题、业务规则问题、系统问题和重复提交。
  3. 为每类失败写系统处理:追问、拒绝、重试、转人工或展示已有状态。
  4. 写用户回答方式,确保模型不编造工具结果。
  5. 设计审计日志字段,能串起用户请求、工具调用、工具结果和最终回答。
  6. 把失败样例加入验收清单,不能只验成功路径。

可复制模板:失败兜底表​


## 工具调用失败兜底表

| 工具名称 | 失败场景 | 系统处理方式 | 用户回答方式 | 是否转人工 | 需要记录的日志 |
| --- | --- | --- | --- | --- | --- |
| | | | | | |

可复制模板:审计日志字段表​

## 工具调用审计日志字段表

| 日志字段 | 含义 | 来源 | 是否必填 | 脱敏要求 |
| --- | --- | --- | --- | --- |
| trace_id | 串联一次请求 | 系统生成 | 是 | 无 |
| | | | | |

示例填写​

工具名称失败场景系统处理方式用户回答方式是否转人工需要记录的日志
query_order_status订单不属于当前用户拒绝查询,记录越权尝试“该订单无法在当前账号下查询。”否trace_id、user_id、tool_name、NO_PERMISSION
query_order_status订单系统超时有限重试一次,仍失败则提示稍后或转人工“订单系统暂时无响应,可以稍后重试或转人工。”可选trace_id、tool_name、TIMEOUT、retry_count
create_support_ticket重复提交查询已有工单并返回状态“你已有进行中的工单,我为你展示当前进度。”否trace_id、dedupe_key、ticket_id、DUPLICATE_REQUEST
create_refund_review高风险动作缺少审批阻断直接退款,转审批流程“我可以帮你提交退款审批,不能直接完成退款。”是trace_id、order_id、review_required、blocked_action

新手自查清单​

  • 我有没有为每个工具准备成功以外的失败样例?
  • 工具超时后,Agent 是否被禁止编造业务结果?
  • 越权查询是否明确拒绝,而不是模糊提示?
  • 重复提交是否能返回已有状态,而不是重复创建?
  • 日志是否能串起 trace_id、工具名称、输入摘要、输出摘要和错误状态?
  • 日志是否避免记录完整隐私资料和密钥?

本节交付物与面试讲法​

本节交付物包括两张表:失败兜底表和审计日志字段表。合格标准是每个关键工具至少覆盖无权限、缺字段、超时、重复提交和高风险阻断。

面试时可以这样讲:

我会把工具失败当成正常路径设计,而不是只做成功演示。比如订单工具超时,系统可以有限重试,但模型不能编造订单状态;越权查询要拒绝并记录日志;重复创建工单要通过幂等键返回已有工单。所有工具调用都会记录 trace_id、工具名、执行状态、错误码和处理结果,方便排查和审计。

继续学习​