作者注:用一个密钥、一套固定脚本和一次注入失败,横向对比多个模型的多轮工具调用能力,得到可复现、可复查的结论。
选模型做 Agent 时,很多团队都遇到过同一个问题。单轮问答里各家模型表现差不多,一进入“调用工具 → 拿到结果 → 再调用 → 处理报错 → 给出结构化答案”的多轮循环,差异就出来了。本文介绍 一个密钥测多个模型的多轮工具调用小测试,帮你用很低的成本,把这种差异变成可以记录和复查的数据。
这不是一份模型排行榜。 本文不提供任何未经实测的跑分,只讲如何设计测试,让你在自己的业务场景里得出结论。测试的关键是控制变量:同一个密钥、同一套工具定义、同一段 Mock 数据,只改变模型名称。通过 API易 apiyi.com 这类聚合平台,一个密钥就能调用 DeepSeek、Gemini、Qwen、Claude、GPT 等多家模型,横向对比时少了很多切换成本。
核心价值:读完本文,你能搭出一个 5 步可复现的多轮工具调用测试。它能覆盖工具选择、参数校验、调用 ID 回传、失败重试和最终 JSON 校验这五个关键环节。

多轮工具调用小测试核心要点
设计多轮工具调用测试之前,先明确“可复现”指什么。同一份输入在不同时间、由不同人运行,应该得到同一类可以比较的结果。单次的漂亮输出不能作为结论。下表是整个测试的骨架。
| 要点 | 说明 | 价值 |
|---|---|---|
| 一个密钥、多个模型 | 所有模型走同一个接口入口,只改 model 字段 | 排除网络、鉴权、SDK 版本带来的干扰 |
| 固定 Mock 工具 | 工具返回值写死,不连真实数据库或外部服务 | 每次运行看到的工具结果完全一致 |
| 注入一次失败 | 某个工具第一次调用固定返回可重试错误 | 观察模型能否正确重试,会不会编造数据 |
| 结构化终点 | 最终答案必须是符合 Schema 的 JSON | 可以用程序自动判定通过或失败 |
| 完整留痕 | 保存请求参数、原始响应、usage 与耗时 | 结论可复查,换模型版本后可以回归 |
多轮工具调用测试为什么要“小”
测试要小,因为大测试很难复现。真实业务里的工具链可能有十几个工具、依赖外部系统,任何一处波动都会被误认为是模型的问题。一个好的小测试只需要 2 到 3 个只读工具,加一次人为注入的失败,就能覆盖多轮循环里最容易出错的环节。
测试还要“完整”。它必须跑完整个循环,不能只看模型第一轮会不会发起工具调用。很多模型第一轮表现很好,问题出在第二、三轮:没有带上正确的调用 ID,拿到错误后直接放弃,或者在没有数据的情况下自己编一个物流单号。这些问题只有把循环跑到最后一轮才看得出来。
用一个密钥测多个模型的设计原则
控制变量是对比测试的前提。如果 A 模型用官方 SDK、B 模型用第三方 SDK,C 模型又换了一个代理地址,最后的差异就分不清来自模型还是来自链路。统一入口之后,鉴权方式、重试策略、超时设置和日志格式都保持一致,唯一的变量就是模型本身。

多轮工具调用小测试快速上手
本节不贴代码,只列出参数、工具定义和执行步骤。你可以用任何熟悉的语言实现,Python、Node.js 或 Shell 脚本都可以。重点是每一项配置都写进一个固定的配置文件,并随测试结果一起保存。
第 1 步:统一接口与运行参数
先确定接口入口和采样参数。API易 同时兼容 OpenAI 与 Anthropic 两种接口格式,同一个密钥既可以用 Chat Completions 风格调用,也可以用 Messages 风格调用。下表列出建议固定的配置项。
| 配置项 | 建议值 | 说明 |
|---|---|---|
| base_url(OpenAI 格式) | https://api.apiyi.com/v1 |
通过 API易 统一入口调用,具体地址以 docs.apiyi.com 文档为准 |
| base_url(Anthropic 格式) | 参照 API易 文档中的 Anthropic 兼容地址 | 用于测试 tool_use / tool_result 协议 |
| api_key | 同一个密钥 | 所有模型共用,排除鉴权差异 |
| temperature | 0 或尽量低 | 降低随机性;部分推理模型不支持时记录实际值 |
| max_tokens | 固定值 | 避免因输出被截断而误判 |
| tool_choice | auto | 观察模型自主决策,不强制调用 |
| 最大循环轮数 | 固定上限,例如 6 轮 | 防止模型陷入无限重试 |
| 每个模型运行次数 | 固定次数,例如 5 次 | 用多次结果判断稳定性,不看单次表现 |
🚀 快速开始建议:可以先在 API易 apiyi.com 注册并获取一个密钥,用同一个密钥依次调用候选模型。确认每个模型都能返回正常的工具调用响应后,再开始正式测试。接入说明见 docs.apiyi.com。
第 2 步:定义 2 到 3 个只读工具
工具设计有两个要求:只读、确定。只读是为了防止测试中误触发写操作,确定是为了保证每次返回值相同。推荐用一个虚构的订单查询场景,包含两个工具:
- get_order:参数为 order_id(字符串,格式固定为 “ORD-” 加数字)。固定返回订单状态、商品名和物流单号 tracking_no。
- get_shipping:参数为 tracking_no(字符串)。第一次调用固定返回错误,错误内容包含 error 为 timeout、retryable 为 true;第二次及以后返回固定的物流状态和预计送达日期。
- 可选的干扰工具 get_coupon:与问题无关,用来观察模型会不会多余调用。
参数 Schema 要写严格:字段类型、必填项、正则格式都要明确。模型生成的参数要先经过 Schema 校验再交给 Mock 函数。校验失败要记录为一次“参数错误”,不要悄悄修正。
第 3 步:编写固定的提示词与用户问题
System 提示词只写规则,不写答案。可以要求模型只根据工具返回的数据回答;工具报错且可重试时最多重试 2 次;最终只输出一个 JSON 对象,字段包括 order_status、shipping_status、eta 和 data_source。用户问题固定为一句话,例如“帮我查一下订单 ORD-10086 现在到哪了”。
提示词一旦确定就不再修改。如果测试中发现某个模型因为提示词歧义而失败,正确的做法是新开一个版本号,所有模型用新版本重测,而不是只给这一个模型改提示词。
第 4 步:执行循环并注入失败
执行逻辑按以下顺序进行:
- 发送 system 与 user 消息,以及工具定义。
- 如果响应里有工具调用,依次校验参数,执行对应 Mock 函数,把结果按协议要求回传。
- 对 get_shipping 的第一次调用,固定返回可重试错误。
- 重复第 2 步,直到模型给出不含工具调用的最终回复,或达到最大轮数。
- 用 JSON Schema 校验最终回复,并保存全部消息、原始响应与每轮 usage。
注入失败是整个测试最有区分度的部分。理想行为是模型识别出 retryable 为 true,用相同参数再调用一次 get_shipping。常见的问题行为有三种:直接向用户道歉并结束;编造一个物流状态;修改参数后反复重试,直到超出轮数上限。
第 5 步:按清单打分并留痕
每次运行结束后,用程序逐项判定,尽量不靠人工主观打分。人工只负责复查程序标记为异常的样本。
多轮工具调用协议差异:OpenAI 与 Anthropic 格式
同一个测试要在两种接口格式下都能运行,就要先了解协议细节的差异。协议里很小的差别也会导致“curl 能通、客户端不行”这类问题。建议先用最小请求确认协议正确,再开始比较模型能力。
| 环节 | OpenAI 兼容格式 | Anthropic 兼容格式 |
|---|---|---|
| 工具定义 | tools 数组,每项 type 为 function,参数写在 parameters | tools 数组,参数 Schema 写在 input_schema |
| 模型发起调用 | assistant 消息中的 tool_calls,每个带 id | assistant 内容块中的 tool_use,每个带 id |
| 参数形态 | arguments 通常是 JSON 字符串,需要自行解析 | input 直接是 JSON 对象 |
| 回传结果 | role 为 tool 的消息,携带 tool_call_id | user 消息中的 tool_result 内容块,携带 tool_use_id |
| 标记错误 | 一般在结果内容里自定义错误字段 | tool_result 支持 is_error 标记 |
| 并行调用 | 一次响应可能包含多个 tool_calls | 一次响应可能包含多个 tool_use 块 |
有几个坑最容易踩。第一,OpenAI 格式下 arguments 是字符串,部分模型偶尔会输出多余字符,导致解析失败。这一项本身就该计入评分,而不是在代码里做容错。第二,回传结果时 ID 必须和发起调用的 ID 一一对应,并行调用时尤其要注意顺序。第三,有的模型会在同一条回复里既输出文本又发起工具调用,处理逻辑要同时兼容这两种内容。
💡 技术建议:通过 API易 apiyi.com 的统一入口,可以用同一个密钥分别走 OpenAI 格式和 Anthropic 格式运行同一套测试。这样能区分问题出在模型本身,还是出在协议适配层。
多轮工具调用评分清单与记录模板
评分清单是让结论可复现的关键。每一项都要能被程序判定,并且和真实业务风险对应。下表是推荐的检查项,你可以根据业务增删。
| 检查项 | 判定方式 | 对应的业务风险 |
|---|---|---|
| 工具选择正确 | 第一轮调用 get_order,没有调用干扰工具 | 多余调用增加延迟和成本 |
| 参数通过校验 | 参数满足 Schema,包括类型、必填和格式 | 错误参数会打到真实系统 |
| 调用 ID 正确对应 | 回传结果与发起调用的 ID 一致 | 多轮上下文错乱 |
| 重试行为合理 | 收到可重试错误后,用相同参数重试且不超过上限 | 放弃过早或无限重试 |
| 无编造数据 | 最终答案中的字段都能在工具返回值中找到 | 幻觉直接影响用户 |
| 最终 JSON 合法 | 通过 JSON Schema 校验,无多余文本 | 下游解析失败 |
| 轮数与 Token 用量 | 记录总轮数、输入与输出 Token | 评估成本与延迟 |
每个模型跑完固定次数后,汇总成一张结果表。建议的列包括:模型 ID、接口格式、运行序号、通过项数、失败项明细、总轮数、输入 Token、输出 Token、耗时、测试日期。表头和配置文件一起放进版本库。模型升级或换新版本时,用同一套脚本重跑一遍就能做回归对比。

多轮工具调用的成本口径怎么记
Token 用量要按每轮分别记录,不能只看最后一轮。多轮循环里,每一轮都会把之前的消息和工具结果重新作为输入发送,所以输入 Token 会逐轮累加。重试越多,成本越高。这也是“重试行为合理”这一项值得单独打分的原因。
计算费用时,用 usage 中的输入、输出 Token(如果有缓存命中,还有缓存 Token)分别乘以对应单价。所有模型的输入单价、输出单价、缓存价格和计费口径,都以 API易 价格页 docs.apiyi.com/models 的实际数据为准。 本文不列具体数字,因为价格会调整,写死在文章里很容易过时。
一个密钥测多个模型:候选模型清单
候选模型建议覆盖不同厂商和不同定位,例如一个高性价比模型、一个主力模型、一个推理较强的模型。下表只列模型系列和测试关注点,不给出结论,结论应该来自你的实测数据。
| 模型系列 | 建议测试的关注点 | 推荐接口格式 | 可用平台 |
|---|---|---|---|
| DeepSeek 系列 | 参数字符串解析稳定性、注入失败后的重试 | OpenAI 兼容 | API易 apiyi.com、官方 API |
| Gemini 系列 | 并行调用倾向、最终 JSON 是否夹带文本 | OpenAI 兼容 | API易 apiyi.com、官方 API |
| Qwen 系列 | 干扰工具的误调用、多轮 ID 对应 | OpenAI 兼容 | API易 apiyi.com、官方 API |
| Claude 系列 | tool_result 的 is_error 处理、轮数控制 | Anthropic 兼容 | API易 apiyi.com、官方 API |
| GPT 系列 | 严格 Schema 遵循、Token 用量 | OpenAI 兼容 | API易 apiyi.com、官方 API |
具体可用的模型 ID 和版本,以 API易 模型列表为准。记录结果时一定要写完整的模型 ID,不要只写系列名。同一系列的不同版本,在工具调用上的表现可能差别很大。
💡 选择建议:选哪个模型,取决于你的工具复杂度、对幻觉的容忍度和成本预算。建议在 API易 apiyi.com 上用同一个密钥把候选模型各跑一轮,再结合 docs.apiyi.com/models 的价格数据做综合判断。
常见问题 FAQ
Q1:什么是多轮工具调用小测试?
它是一个规模很小、结果确定的测试。用 2 到 3 个 Mock 工具和一次注入失败,让模型完整跑一遍“调用工具、处理结果、重试、输出结构化答案”的循环,再用程序逐项判定是否通过。它关注的是循环能否稳定跑完,不是模型的知识水平。
Q2:为什么强调一个密钥测多个模型?
为了控制变量。不同的密钥、SDK 和代理地址会带来鉴权、超时和协议适配上的差异,让对比结果失真。统一入口之后,唯一变化的只有 model 字段,测出来的差异才能归因到模型本身。
Q3:temperature 设为 0 就能保证完全复现吗?
不能完全保证。即使 temperature 为 0,部分模型的输出仍有轻微波动,推理类模型还可能不支持调低该参数。所以测试要固定运行多次,看通过率和失败分布,而不是只看某一次的结果。实际使用的参数值也要记录下来。
Q4:这个测试适合哪些场景?
– **Agent 选型**:上线前比较候选模型在工具循环上的稳定性。
– **模型升级回归**:新版本发布后,用同一套脚本重跑,确认没有退化。
– **协议迁移验证**:从 OpenAI 格式切换到 Anthropic 格式时,确认适配层没有问题。
Q5:如何快速开始调用这些模型?
1. 访问 API易 apiyi.com 注册账号并获取密钥。
2. 阅读 docs.apiyi.com,确认 OpenAI 兼容地址和 Anthropic 兼容地址。
3. 按本文第 1 步的参数表配置,先用最小请求确认每个模型都能返回工具调用。
API易 支持本文提到的多家模型统一接入,切换模型只需修改 model 字段。
Q6:测试成本怎么估算?
成本约等于“模型数 × 运行次数 × 每次运行的累计 Token × 单价”。多轮循环的输入 Token 会逐轮累加,重试会进一步增加用量。单价和缓存计费规则以 API易 价格页 docs.apiyi.com/models 的实际数据为准。建议先每个模型跑 1 次估算用量,再决定正式运行的次数。
Q7:这个测试有哪些局限?
小测试只能覆盖典型的失败模式,不能代表所有复杂业务。Mock 工具返回的数据很干净,真实系统可能返回格式混乱或超长的数据。测试通过之后,建议再加入业务中真实出现过的异常样本,逐步扩充用例。
多轮工具调用小测试核心要点 Key Takeaways
- 控制变量优先:用一个密钥、一套配置,只改变 model 字段。
- 工具只读且确定:Mock 返回值写死,保证每次运行看到相同数据。
- 必须注入失败:一次可重试错误,最能区分模型的循环处理能力。
- 评分程序化:每个检查项都能自动判定,人工只负责复查异常。
- 完整留痕:保存原始响应、每轮 usage 和完整模型 ID,方便回归。
- 价格以官方页为准:成本计算以 API易 价格页 docs.apiyi.com/models 为准。
- 统一入口更省事:借助 API易 兼容 OpenAI 与 Anthropic 格式,一套脚本可以覆盖两种协议。
总结
一个密钥测多个模型的多轮工具调用小测试,核心在三点:
- 可复现:固定配置、固定 Mock 数据、固定提示词版本,并多次运行。
- 可判定:用 Schema 校验和评分清单代替主观印象。
- 可回归:完整留痕,模型升级后能用同一套脚本快速重测。
这套方法不会告诉你“哪个模型最好”,但能告诉你在你的工具链里,哪个模型更稳定、更省 Token,失败时的表现也更可控。建议先用本文的订单查询场景跑通流程,再替换成自己业务里的工具。
推荐通过 API易 apiyi.com 用同一个密钥完成多模型的横向验证。接入方式见 docs.apiyi.com,价格与计费口径以 docs.apiyi.com/models 为准。
📚 参考资料
- OpenAI 函数调用文档:tools、tool_calls 与 tool 角色消息的协议说明
- 链接:
platform.openai.com/docs/guides/function-calling -
说明:理解 OpenAI 兼容格式下参数字符串与 tool_call_id 的处理方式
-
Anthropic 工具使用文档:tool_use 与 tool_result 内容块说明
- 链接:
docs.anthropic.com/en/docs/build-with-claude/tool-use -
说明:了解 input_schema、tool_use_id 与 is_error 的用法
-
API易 文档中心:统一接口接入说明
- 链接:
docs.apiyi.com -
说明:查看 OpenAI 与 Anthropic 兼容地址及调用示例
-
API易 模型与价格页:模型列表与计费口径
- 链接:
docs.apiyi.com/models - 说明:所有输入、输出与缓存单价以此页面实际数据为准
作者:APIYI 技术团队
技术交流:欢迎在 API易 apiyi.com 网站首页联系我们,更多接入资料可访问 docs.apiyi.com 文档中心
