结论先行:Function Calling 不是模型直接操作外部世界。模型只生成“想调用哪个工具、传什么参数”的结构化意图;宿主应用必须先校验参数与权限,再执行工具,并把结果或错误返回模型。
工具 Contract 的六部分
- 名称:具体且可与其他工具区分
- 描述:什么任务应使用,什么任务不应使用
- 输入 Schema:必填、枚举、范围、日期格式和默认值
- 返回结构:成功、缺失、错误、来源和时间戳
- 副作用:只读还是写入,是否需要审批
- 运行策略:超时、有限重试、幂等和日志
一个 calculate 工具过于宽泛。calculate_yoy 可以明确要求当前值、上期值和精度,返回公式、结果与除零错误。工具越可测试,Agent 越不需要猜测。
金融案例:先查数,再计算
模型需要回答收入同比。第一步调用文件搜索取得本期和上期收入,并保留来源与期间;第二步把两个数交给计算器;第三步把工具返回的公式和结果写入事实表。模型不负责心算,也不能在检索缺失时自行补数。
价格工具还要返回行情时间和市场状态,否则“当前价格”可能是昨收、盘中延迟价或盘后价。字段设计本身就是事实边界。
Lab:写三个工具 Contract
- 为价格、同比计算和文件搜索分别写名称、用途和禁止场景
- 用 JSON Schema 定义参数,给日期、ticker、精度和 top-k 设置约束
- 设计 success、not_found、timeout、permission_denied 四类返回
- 为只读与写入动作画权限边界,写入默认加入人工确认
- 用十个正常和异常输入测试工具,不让错误静默变成空结果
常见失败与排查
- 工具重叠:多个“搜索”描述相似会让模型选择不稳定
- 返回纯文本:下游难以区分数据、来源和错误
- 参数校验只靠模型:执行前必须由代码再次校验
- 给 Agent 全部权限:权限应按任务最小化,并为高影响动作审批
本课成果物
保存三个工具 Contract 和最少十个测试案例。每个 Contract 都应明确只读或写入、输入 Schema、结构化返回、错误语义、超时和人工确认条件。
资料来源
本课实践工作台
设计证据搜索、同比计算和行情快照三个最小权限工具,覆盖正常、缺失、超时和拒绝状态。
复杂度升级决策树与事实 Schema
三个工具 Contract 与异常测试
自动保存到当前浏览器;建议在完成后导出到自己的研究目录。
草稿仅保存在当前浏览器,不会上传。
查看合格示例
合格示例:calculate_yoy 返回输入、公式、结果和 divide_by_zero 错误;模型不能把错误当成空值。
查看失败示例
失败示例:一个名为 calculate 的工具接受任意字符串并返回纯文本,没有输入边界和错误语义。
实践通过条件:验收清单全部完成,并且本课小测最好成绩达到 4/5。当前最好成绩 尚未作答。
本课检查点
允许重试并保存最好成绩。达到 4/5 且 Lab 自查完成后,实践状态才会通过;它不会替你自动完成阅读。