ToolCall-15 深度研究:15 个场景,精准测出 LLM 到底会不会用工具

> GitHub: stevibe/ToolCall-15

> 作者: stevibe

> 技术: Next.js + TypeScript

> License: MIT

> 研究时间: 2026-03-26

🎯 一句话版本

15 个精心设计的场景测试 LLM 工具调用能力——选对工具、传对参数、多步链、克制不该调的冲动、错误恢复。所有工具结果都是 mock 的(确定性),有实时可视化 dashboard,支持 OpenRouter/Ollama/llama.cpp。比学术 benchmark 更实用、更直观。

🧠 为什么需要这个?

现有 tool calling benchmark 的问题:

问题ToolCall-15 的解法
学术化、不透明每个场景有明确预期行为
无法直观展示**实时可视化 dashboard**
不可复现固定 prompt + mock 工具 + temperature:0
偏科(某一类测太多)**5 类别均衡分布**
评分模糊**pass/partial/fail 三级确定性评分**

📊 5 大类别 × 3 场景

Category A: Tool Selection(选对工具)

#场景测什么
TC-01"柏林天气怎么样?"有 `get_weather` 就别用 `web_search`
TC-02"AAPL 股价多少?"12 个工具里只选 1 个对的,抗干扰
TC-03"告诉 Sarah 会议改到 3 点"没说"发邮件"——能推断出 `get_contacts` → `send_email` 链?

Category B: Parameter Precision(参数精准)

#场景测什么
TC-04"东京温度,要华氏"传了 `units: "fahrenheit"` 吗?
TC-05"下周一 9:30 排会"相对日期解析 + 时间格式 + 可选参数
TC-06(多参数组合)

Category C: Multi-Step Chains(多步链)

连续调用多个工具完成复杂任务。

Category D: Restraint and Refusal(克制与拒绝)

这是最有意思的类别——测试模型是否知道不该调工具:

Category E: Error Recovery(错误恢复)

工具返回错误时,模型能否:

📐 评分体系


每场景:pass = 2分 | partial = 1分 | fail = 0分
每类别:3 场景 × 2 分 = 6 分满分
最终分 = 5 个类别百分比的平均值

评分示例(TC-01: 柏林天气)

行为评分
调 `get_weather({ location: "Berlin" })`✅ pass (2分)
调 `web_search("Berlin weather")`⚠️ partial (1分) — 能用但次优
两个都调❌ fail (0分) — 冗余
不调工具直接答❌ fail (0分) — 编造数据

🔧 技术设计

确定性保证

12 个通用工具

所有 15 个场景共享同一套工具:


web_search / get_weather / calculator / send_email / search_files / 
read_file / create_calendar_event / get_contacts / translate_text / 
get_stock_price / set_reminder / run_code

模型每次都收到全部 12 个工具定义——这测试了忽略不相关工具的能力。

支持的 Provider

Provider配置格式
OpenRouter`openrouter:openai/gpt-4.1`
Ollama`ollama:qwen3.5:4b`
llama.cpp`llamacpp:local-model`

支持双表对比(LLM_MODELS + LLM_MODELS_2),适合 A/B 测试。

🆚 和其他 Benchmark 的对比

ToolCall-15BFCL (Berkeley)Scale ToolCompPinchBench
场景数**15**2000+未公开23
可视化**✅ 实时 dashboard**❌ 静态排行榜❌ 静态❌ 静态
可复现**✅ 完全开源 + mock**✅ 开源❌ 闭源✅ 开源
评分确定性 3 级自动 + 人工人工自动
自托管**✅**
本地模型**✅ Ollama/llama.cpp**❌ API only
覆盖面窄(纯工具调用)**广(多种任务)**广广(Agent 任务)

ToolCall-15 的定位:不是大而全的 benchmark,而是精准狙击工具调用能力的小而美测试套件。

💡 与我们的关联

1. 评估我们用的模型 ⭐⭐⭐

我们用 Claude Opus 做 Agent,工具调用质量直接影响效果。可以用 ToolCall-15 跑一遍:


LLM_MODELS=openrouter:anthropic/claude-opus-4-6
LLM_MODELS_2=ollama:qwen3.5:27b
npm run dev

看看 Claude Opus vs Qwen3.5:27b(ub2 上的本地模型)在工具调用上差多少。

2. 评估 Qwopus 蒸馏模型

我们正在测试的 Qwopus(Qwen3.5-27B-Claude-Opus-Distilled)——ToolCall-15 是完美的测试工具:

3. Category D(Restraint)对 Agent 特别重要

Agent 不该调工具的时候乱调 = 灾难(发错邮件、执行危险命令等)。"克制与拒绝"这个类别直接测试 Agent 安全性。

4. 可以部署在 ub2 上

支持 Ollama,可以在 ub2(RTX 4090)上跑本地模型的 tool calling benchmark。

5. 设计思路可以借鉴

如果我们想做 OpenClaw 的 Agent 能力评测,ToolCall-15 的设计模式(mock 工具 + 确定性评分 + 可视化 dashboard)是很好的参考。

⚠️ 注意事项

1. 只测工具调用:不测推理、代码生成、知识等其他能力

2. 15 个场景偏少:统计意义有限,一个场景失败就影响 ~7% 的总分

3. Mock 工具 vs 真实环境:Mock 不能完全代表真实 API 的复杂性

4. 单一 system prompt:不同 prompt 可能产生不同排名

5. 新项目:2026 年 3 月刚发布,社区验证不足

📊 评分

维度评分(/10)
设计质量9.0 — 5 类别均衡、确定性评分、可审计 trace
实用性8.5 — 自托管 + 支持本地模型 + 实时 dashboard
创新性8.0 — "可视化 benchmark" 的理念比静态排行榜好太多
覆盖面6.5 — 只有 15 个场景,纯工具调用
与我们的关联8.5 — 评估 Opus/Qwen/Qwopus 的工具调用能力
**综合****8.0**

报告由深度研究助手自动生成 | 2026-03-26

来源: GitHub