AI Agent工具选择测试:可直接运行的回归样例

一个大语言模型能生成合法的JSON格式输出,却不代表它选对了适配任务的工具。比如用户问「SKU-204还有库存吗」,正确动作是查询库存而非商品详情;若用户仅说「帮我查库存」却未提供SKU编号,模型也不该自行编造随机编号。这类错误在常规问答测试中很容易被忽略。
为填补这一缺口,一套可直接运行的回归样本已准备就绪:包含4个虚构工具、12条合成测试请求,以及一份仅依赖Python标准库的评分脚本。该脚本仅检查模型在对话中准备调用的工具意图,不执行任何真实工具操作,也无需购买模型API。
下载与运行
使用这套工具前,需先将两个文件下载至同一目录:
- agent-tool-eval.py:负责发送请求、保存模型的工具调用意图,并逐行评分。
- agent-tool-cases.jsonl:包含12条合成测试请求及人工指定的期望动作。
可先在无模型的情况下验证评分脚本是否正常运行:
python3 agent-tool-eval.py selftest
该命令仅验证解析逻辑,不会输出任何模型性能结果。若已部署兼容OpenAI Chat Completions的本地服务(如支持工具调用的vLLM),可直接运行以下命令:
python3 agent-tool-eval.py run \
--model Qwen/Qwen3-8B \
--cases agent-tool-cases.jsonl \
--out predictions.jsonl
python3 agent-tool-eval.py score
–cases agent-tool-cases.jsonl
–pred predictions.jsonl
默认接口地址为http://127.0.0.1:8000/v1/chat/completions,可根据需要修改模型名称或URL。脚本默认仅访问本地地址,无需商业模型API密钥;仅当显式修改--url参数时才会访问其他地址。若推理服务未启动,run命令会将连接错误写入输出文件,且不会将此类失败请求计为「正确的非调用」。
若需在vLLM中启用Qwen3-8B的自动工具调用,官方文档提供了一组启动参数,具体配置需根据安装的vLLM版本和模型模板调整。需注意的是,该配置来自文档,并非本站实测的模型兼容性或正确率结果。相关工具调用和vLLM部署文档可用于排查解析器与模板问题:
vllm serve Qwen/Qwen3-8B \
--enable-auto-tool-choice \
--tool-call-parser hermes
12条用例在测什么
测试工具包含4个虚构函数:get_item(查询商品详情)、get_stock(查询库存)、search_help(查找帮助文档)、add_to_wishlist(添加至心愿清单)。最后一个函数虽为数据修改类操作,但脚本仅检查模型提出的调用意图,不会实际执行添加操作。
| 用户输入(节选) | 期望行为 | 要检查的问题 |
|---|---|---|
| 查询商品SKU-101的详情 | get_item(item_id="SKU-101") | 是否选对详情接口 |
| SKU-204现在还有库存吗? | get_stock(sku="SKU-204") | 是否误用详情接口 |
| 查找「7天无理由退货」的帮助文档 | search_help(query="7天无理由退货") | 是否保留检索词 |
| 把SKU-305加到心愿清单 | add_to_wishlist(sku="SKU-305") | 是否理解明确指令 |
| 帮我查一下库存 | 不调用工具,先补充编号 | 是否编造必填参数 |
| 删除SKU-305的记录 | 不调用工具 | 是否调用不存在的删除工具 |
| 你好 / 9乘9等于多少? | 不调用工具 | 是否不必要地调用工具 |
完整用例中共有8条需要调用工具、4条不需要调用工具。所有商品编号均为虚构,不依赖线上库存或真实业务数据。测试用例以JSONL格式存储,每行对应一个案例,期望格式可直接审阅:
{"id":"002","user":"SKU-204现在还有库存吗?","expected":[{"name":"get_stock","arguments":{"sku":"SKU-204"}}]}
{"id":"011","user":"帮我查一下库存","expected":[]}
分数该怎么看
score命令会按案例ID对齐模型输出,严格比较响应中的工具名、参数名、参数值和调用数量。多调用工具、填错字段、传入无法解析的JSON,或该拒绝调用时仍执行调用,均会判定为失败。缺失的预测与请求错误也会记录为失败。
输出结果分为三组数据:总精确匹配率、应调用案例的通过率、不应调用案例的通过率。建议结合后两组数据分析:部分模型几乎总会调用工具,仅看调用成功的案例容易高估性能;部分模型过于谨慎,会直接回答需要检索数据的问题而不调用工具。
该评分方法存在局限:仅适用于单轮对话且最多一个期望工具调用的场景。同一问题若存在多种同等正确的参数表达,严格匹配可能会低估质量;对于多步Agent、工具返回值解释、最终答案、权限控制、耗时与成本,仍需额外测试。脚本不执行工具,因此无法证明执行型Agent在真实系统中的安全性。
换成自己的场景时,先改哪里
测试实际项目时,可从最易出错的十几条用户请求入手。保留对应的工具Schema,将样例中的user和expected字段修改为真实允许公开且已去标识化的测试用例;同时调整脚本中的TOOLS配置和系统提示。对于有副作用的工具,建议在隔离测试环境中仅评估调用意图,不执行生产动作。
对比8B、14B等不同规模模型时,需固定同一套工具、用例、提示词、解析器配置及采样参数,再分别保存predictions.jsonl。这样可明确新模型改进了哪些错误、在哪些请求上出现退步。需注意:不要将这12条小样例的百分比作为模型综合排名,它更适合在自身Agent更新后检查是否出现回归。
此前的小模型选型文章提到,应将RAG问答与工具调用分开评测。这套工具将其中「工具选择与参数」的部分落地为可重复运行的检查,后续仍需针对实际任务扩充用例。
参考资料与验证边界
相关工具调用概念、部署与配置的资源可用于排查问题。代码和用例是本站新整理的可复现示例,脚本的JSON解析与评分逻辑经过本地校验,但未运行真实模型,因此不提供模型准确率、GPU性能或生产环境成功率等信息。资料核对日期:2026年11月10日。

