直接回答:函数调用或工具调用模型,不能只看是否“支持Function Calling”。生产环境真正要测的是:工具选择是否正确、参数是否符合Schema、是否漏必填字段、工具报错后能否恢复、是否会重复执行副作用操作,以及整个调用链是否可观测。模型负责提出调用意图,应用程序负责校验和真正执行工具。[1]
API能力核验日期:2026年8月5日。不同模型与SDK的字段、严格模式和并行调用行为会变化,上线前请查看对应官方版本文档。

先分清“函数调用”做了什么
标准流程是:应用把工具名称、说明和参数Schema发给模型;模型决定是否调用,并返回工具名和参数;应用校验参数、执行真实API;再把结果返回模型生成用户可读答案。Google官方文档明确指出,自定义函数代码由应用程序执行,模型只提供结构化调用参数。[1]
模型选型的六个硬指标
| 指标 | 说明 | 测试方法 |
|---|---|---|
| 工具选择 | 该不该调用、调用哪个 | 加入相似工具和无需调用的问题 |
| 参数正确 | 字段、类型、枚举、范围 | 程序Schema校验 |
| 多步调用 | 能否按依赖顺序执行 | 搜索→计算→写入任务 |
| 错误恢复 | 能否根据错误修改参数 | 模拟400、401、429、超时 |
| 停止条件 | 是否避免无限循环 | 设置最大步数并观察重复调用 |
| 结果整合 | 是否忠实使用工具返回 | 放入容易误读的结构化结果 |
参数错误通常从哪里来
- 工具说明太相似,模型选错工具;
- 字段描述含糊,单位和时区不清楚;
- Schema允许过多额外字段;
- 枚举值与用户语言不一致;
- 模型把空值、自定义文本或自然语言放进结构字段;
- 上下文太长,早期工具约束被弱化;
- 函数返回和调用ID、名称或数量没有正确对应。
OpenAI函数定义使用JSON Schema描述参数,并提供strict选项约束参数;Gemini也提供AUTO、ANY、VALIDATED等调用模式,并在新API中强调调用ID与返回结果匹配。[2][3]
重试不能简单“再来一次”
| 错误类型 | 是否重试 | 推荐动作 |
|---|---|---|
| 参数校验失败 | 可以 | 把具体字段错误反馈给模型,最多1—2次 |
| 429限流 | 可以 | 指数退避、随机抖动、尊重Retry-After |
| 网络超时 | 谨慎 | 先查询操作是否已成功,避免重复副作用 |
| 401/403权限错误 | 不应盲重试 | 停止并上报配置或审批问题 |
| 业务规则拒绝 | 按规则 | 向用户请求补充信息或人工确认 |
有副作用的工具必须做幂等
发送邮件、创建订单、转账、删除文件和发布内容,都可能因为网络超时而让系统“不知道是否成功”。重试前应使用幂等键、请求ID或查询接口确认状态。不要把安全性寄托在模型“应该不会重复调用”上。
工具Schema怎么写更稳
- 一个工具只做一件明确的事;
- 名称使用动词+对象,例如
get_order_status; - 描述写清何时使用、何时不要使用;
- 必填字段尽量少,但关键字段必须required;
- 使用enum、minimum、maximum和格式约束;
- 禁止额外字段时设置additionalProperties为false;
- 时间、货币、单位和时区必须明确;
- 高风险操作增加confirm或approval字段。
一套50题工具调用评测集
- 10题无需工具,测试模型是否滥用;
- 10题单工具且参数明确;
- 10题相似工具选择;
- 10题多步依赖;
- 10题错误、超时、权限和用户确认。
统计工具选择准确率、参数一次通过率、平均调用次数、重试成功率、重复副作用次数和最终任务完成率。
安全边界
- 高风险工具使用最小权限;
- 删除、支付、发送、发布必须人工确认;
- 所有工具调用记录参数、结果、耗时和用户;
- 工具返回内容按不可信输入处理,防止提示词注入;
- 设置总步数、总时长和总预算上限。
选型结论:最好的工具调用模型,不是最积极调用工具的模型,而是能在需要时选对工具、一次生成正确参数、出错后可控恢复,并能被程序严格约束的模型。
工具描述本身就是模型能力的一部分
同一个模型在差工具定义下也会表现很差。不要给十个名称相似、描述只有一句话的工具。工具说明应包含使用条件、禁止条件、输入单位、返回字段和失败语义。评测模型时,要固定工具定义,否则无法判断差异来自模型还是Schema。
多步Agent调用的状态机
| 状态 | 允许动作 | 退出条件 |
|---|---|---|
| 规划 | 选择工具、请求补充信息 | 参数齐全 |
| 执行 | 调用工具 | 成功、可重试错误或终止错误 |
| 观察 | 读取结果、判断下一步 | 任务完成或继续调用 |
| 确认 | 向用户展示高风险动作 | 用户同意或取消 |
| 完成 | 总结结果与证据 | 输出最终答复 |
状态机比“让模型自己循环直到完成”更容易控制成本和风险。
必须记录的可观测数据
- 模型与版本、请求ID、用户和会话;
- 模型选择的工具及完整参数;
- 参数校验错误;
- 工具开始/结束时间、状态码和返回摘要;
- 重试原因、次数和退避时间;
- 是否触发人工确认;
- 最终结果和任务完成标签;
- Token、工具费用和总耗时。
工具返回也可能攻击模型
网页、邮件、文档和第三方API返回的文本都可能包含提示词注入。系统应把工具结果作为不可信数据,限制其覆盖系统指令;高权限工具不能仅因为网页写着“请执行删除”就被调用。
补充常见问题
工具越多模型越强吗?
不一定。工具过多会增加选择混淆和上下文负担,应按场景动态提供最小工具集。
并行工具调用一定更快吗?
独立查询可以并行;有依赖关系或副作用的操作应串行,并核对返回ID和顺序。
参数校验失败后重试几次?
通常1—2次足够。连续失败应切换备用模型、简化Schema或请求人工补充,而不是无限循环。
参考资料
© 版权声明
文章版权归作者所有,未经允许请勿转载。