函数调用与工具调用模型怎么选?稳定性、参数错误与重试机制

直接回答:函数调用工具调用模型,不能只看是否“支持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怎么写更稳

  1. 一个工具只做一件明确的事;
  2. 名称使用动词+对象,例如get_order_status
  3. 描述写清何时使用、何时不要使用;
  4. 必填字段尽量少,但关键字段必须required;
  5. 使用enum、minimum、maximum和格式约束;
  6. 禁止额外字段时设置additionalProperties为false;
  7. 时间、货币、单位和时区必须明确;
  8. 高风险操作增加confirm或approval字段。

一套50题工具调用评测集

  • 10题无需工具,测试模型是否滥用;
  • 10题单工具且参数明确;
  • 10题相似工具选择;
  • 10题多步依赖;
  • 10题错误、超时、权限和用户确认。

统计工具选择准确率、参数一次通过率、平均调用次数、重试成功率、重复副作用次数和最终任务完成率。

安全边界

  • 高风险工具使用最小权限;
  • 删除、支付、发送、发布必须人工确认;
  • 所有工具调用记录参数、结果、耗时和用户;
  • 工具返回内容按不可信输入处理,防止提示词注入;
  • 设置总步数、总时长和总预算上限。

选型结论:最好的工具调用模型,不是最积极调用工具的模型,而是能在需要时选对工具、一次生成正确参数、出错后可控恢复,并能被程序严格约束的模型。

工具描述本身就是模型能力的一部分

同一个模型在差工具定义下也会表现很差。不要给十个名称相似、描述只有一句话的工具。工具说明应包含使用条件、禁止条件、输入单位、返回字段和失败语义。评测模型时,要固定工具定义,否则无法判断差异来自模型还是Schema。

多步Agent调用的状态机

状态允许动作退出条件
规划选择工具、请求补充信息参数齐全
执行调用工具成功、可重试错误或终止错误
观察读取结果、判断下一步任务完成或继续调用
确认向用户展示高风险动作用户同意或取消
完成总结结果与证据输出最终答复

状态机比“让模型自己循环直到完成”更容易控制成本和风险。

必须记录的可观测数据

  • 模型与版本、请求ID、用户和会话;
  • 模型选择的工具及完整参数;
  • 参数校验错误;
  • 工具开始/结束时间、状态码和返回摘要;
  • 重试原因、次数和退避时间;
  • 是否触发人工确认;
  • 最终结果和任务完成标签;
  • Token、工具费用和总耗时。

工具返回也可能攻击模型

网页、邮件、文档和第三方API返回的文本都可能包含提示词注入。系统应把工具结果作为不可信数据,限制其覆盖系统指令;高权限工具不能仅因为网页写着“请执行删除”就被调用。

补充常见问题

工具越多模型越强吗?

不一定。工具过多会增加选择混淆和上下文负担,应按场景动态提供最小工具集。

并行工具调用一定更快吗?

独立查询可以并行;有依赖关系或副作用的操作应串行,并核对返回ID和顺序。

参数校验失败后重试几次?

通常1—2次足够。连续失败应切换备用模型、简化Schema或请求人工补充,而不是无限循环。

参考资料

  1. Google Gemini:Function Calling流程
  2. OpenAI Responses API:函数工具与strict参数
  3. Gemini:调用模式、Schema与错误建议
  4. Gemini:内置工具与自定义工具流程
© 版权声明

相关文章