Tool Calling 可靠性¶
单元 23|难度:中级|前置:结构化输出、幂等、权限|目标:让模型只能提出受控操作,不能绕过后端边界
标准流程¶
模型不能承担的责任¶
模型可以建议调用什么工具,但不能成为最终安全边界。以下责任必须留在服务端:
- 用户身份和租户隔离;
- 工具白名单;
- 参数类型与业务范围;
- 速率、预算和并发限制;
- 幂等;
- 高风险操作审批;
- 审计与脱敏。
Schema 校验仍然不够¶
下面的参数在类型上可能完全合法:
但业务可能只允许重启操作最长持续 30 秒,或者当前用户根本无权操作该设备。因此需要:
重试与幂等¶
如果工具已经成功,但网络响应丢失,Agent 可能再次调用。对会产生副作用的工具,应带稳定的 operation_id:
重复请求返回第一次的执行结果,而不是创建第二张工单。
工具分类¶
| 类型 | 示例 | 默认策略 |
|---|---|---|
| 只读 | 查询设备、检索文档 | 权限、限流、脱敏 |
| 可逆写入 | 修改草稿、创建待审记录 | 幂等、审计、可撤销 |
| 外部副作用 | 发邮件、创建工单 | 幂等、确认、结果保存 |
| 高风险 | 删除数据、支付、控制设备 | 强审批、最小权限、沙箱/策略 |
最大步骤和停止条件¶
Agent 循环必须设置:
- 最大工具调用次数;
- 总执行时间;
- 总 Token / 费用;
- 连续失败次数;
- 重复调用检测;
- 明确的成功和失败终态。
“让模型自己判断什么时候停止”不能成为唯一保护。
自测¶
- Tool Schema 合法为什么仍需业务校验?
- 只读、外部副作用和高风险工具的策略有什么不同?
- operation_id 如何在模型重试时保持稳定?
- 为什么必须由程序设置停止条件?
完成标准¶
- 能画出完整 Tool 执行链
- 能为工具设计 Schema、权限和业务校验
- 能设计稳定 operation_id
- 完成 Tool 幂等实验
下一单元:RAG 检索链路