TaskBench 完整指南:3 个阶段构建 28,271 条 LLM 工具调用评估数据
【免费下载链接】JARVISJARVIS, a system to connect LLMs with ML community. Paper: https://arxiv.org/pdf/2303.17580.pdf项目地址: https://gitcode.com/gh_mirrors/jarvis3/JARVIS
为 LLM 构建"自动调工具"的评估数据有多麻烦?人工标注一批"用户请求 → 任务步骤 → 工具调用链"三元组,往往标到一半就发现:请求写得含糊、步骤和实际调用对不上、参数类型张冠李戴。JARVIS 项目的 TaskBench 模块给出的解法是用工具图(Tool Graph,节点为工具、边为调用依赖的有向图)自动定义任务骨架,再用反向指导(Back-Instruct)让 LLM 从骨架反推出贴近真实场景的用户请求与标注,最后叠加人工核验。本文先摆出数据集规模与质量数字,再倒推三阶段构建法与评测流程,收尾给出自定义数据时的扩展点与常见坑。
先看结论:规模与质量数字
TaskBench 覆盖三个领域,共28,271条样本。每条样本包含用户请求(user request)、任务步骤(task steps)和工具调用图(invoking graph,含节点与依赖边),可直接作为"LLM 任务自动化能力"的评测基准。
| 领域 | 数据目录 | 样本数 | 自动质检通过 | 人工核验通过 |
|---|---|---|---|---|
| Hugging Face Tools | data_huggingface | 12,217 | 69.22% | 61.76% |
| Multimedia Tools | data_multimedia | 8,904 | 70.54% | 62.71% |
| Daily Life APIs | data_dailylifeapis | 7,150 | 75.97% | 60.42% |
三个领域的结构分布(按工具调用图拓扑):
| 领域 | single(单工具) | chain(链式) | dag(有向无环图) |
|---|---|---|---|
| Hugging Face Tools | 3,067 | 3,642 | 837 |
| Multimedia Tools | 2,037 | 2,982 | 565 |
| Daily Life APIs | 1,258 | 2,787 | 275 |
工具图怎么建:两种依赖类型决定图的形状
工具库是一个 JSON,包含每个工具的描述与参数。TaskBench 支持两种工具格式,对应两种依赖类型,这也是后续所有脚本中--dependency_type参数的来源:
| 依赖类型 | 适用工具 | 工具库要求字段 | 建边规则 |
|---|---|---|---|
resource(资源依赖) | 有明确输入/输出类型的工具(如多媒体处理) | input-type/output-type | 仅当 A 的输出类型与 B 的输入类型有交集时才连边 |
temporal(时间依赖) | 带请求参数的 API(如查天气、发短信) | parameters(参数名/类型/说明) | 任意两个工具间均可连边,边表示调用先后 |
以多媒体领域为例,tool_desc.json中一条节点形如Image Downloader(输入url、输出image),与Video Synchronization(输入含video、audio)之间就能自动生成一条资源依赖边。
- 命令:
python generate_graph.py --tool_desc <工具描述文件> --dependency_type resource --data_dir <输出目录> - 参数:
--dependency_type:图类型,resource或temporal,决定建边规则 - 参数:
--tool_desc:工具库路径;省略时回退读取--data_dir下的graph_desc.json - 输出:生成
graph_desc.json,节点 + 边
一个常被忽略的点:README 明确提示自动生成的图未必合理,建议用visualize_graph.py渲染后人工修正——这一步决定了后续所有环节的上限,因为采样与生成都在这张图上做。
三阶段生成:采样子图,再让 LLM 反向写出请求与标注
数据引擎 data_engine.py 对每条样本执行"采样 → 生成 → 自检"三步。
采样策略:结构权重决定难度分布
data_engine.py内置了两组权重(默认值):
- 采样方式权重:single(单节点)= 3,chain(链)= 7,dag(DAG)= 8——链与 DAG 占大头,贴近真实任务以多步调用为主
- 工具数量权重(非 single 时生效):2 个工具 10%、3 个 20%、4 个 30%、5 个 20%、6 个 10%、7~10 个各 2.5%;DAG 采样最少 3 个节点
权重在脚本main()内的method_weights/number_weights两个字典中,可按评估需求调整。
Back-Instruct:从子图反推请求
采样得到子图后,脚本把"节点 + 描述 + 类型/参数"与"边(调用链)"拼进 prompt,要求 LLM 一次性输出三部分:task_steps(任务步骤)、user_request(自包含、可直接求解的用户请求)、invoking_graph(工具调用图,资源依赖下节点带input,时间依赖下节点带arguments)。
prompt 内置的硬约束保证了标注一致性:
- 任务步骤与工具图节点/边严格对齐,步骤数 = 节点数,每个工具只用一次
- 请求必须自包含(所需文本/图片/视频/音频都写在请求里,资源文件用
example.[jpg/mp4/wav/png]占位) - 参数数量与类型必须匹配工具的输入/输出类型定义
生成即质检:节点与边的一致性比对
生成结果解析后,脚本把 LLM 输出的invoking_graph与采样子图的节点 id、边集合分别排序比对,不一致即记 fail 并落日志。开启--check时,LLM 还会额外填写check_by_teacher字段,以"教师"口吻逐条评估生成图的 Executable(可执行)与 Correct(与给定工具图严格一致),相当于一次 LLM-based 自检查。
- 参数:
--temperature:生成多样性(README 推荐 1.0)、--top_p:采样截断 - 参数:
--dependency_type:须与工具图类型一致 - 参数:
--check:启用教师自检字段 - 参数:
--use_async/--multiworker:异步并发与并发数 - 参数:
--api_addr/--api_port/--api_key:OpenAI 兼容服务地址(默认localhost:4000)
质量怎么把关:双 critic + 人工核验
LLM-based 与 Rule-based 双通道
两条自动检查通道,都基于"生成结果与采样工具图的对齐":
- LLM-based critic:
check_by_teacher字段里的自检查结论 - Rule-based critic:纯规则,直接比对节点与边的集合是否一致
| 领域 | LLM 检查通过 | 规则检查通过 | 双通道都通过 |
|---|---|---|---|
| Hugging Face Tools | 74.01% | 84.22% | 69.22% |
| Multimedia Tools | 78.16% | 82.69% | 70.54% |
| Daily Life APIs | 79.63% | 87.70% | 75.97% |
人工核验:正确、废弃、修复三档
双通道通过的样本再进人工环节,检查三个维度:指令语法、工具调用图正确性、调用参数正确性。最终处置分为三档:
| 领域 | 进入人工核验 | 直接正确 | 废弃 | 修复语法 | 修复指令 | 修复调用图 |
|---|---|---|---|---|---|---|
| Hugging Face Tools | 8,457 | 82.46% | 10.77% | 0.32% | 3.87% | 9.96% |
| Multimedia Tools | 6,281 | 83.77% | 11.09% | 0.17% | 1.70% | 9.96% |
| Daily Life APIs | 5,432 | 79.29% | 13.14% | 0.11% | 1.68% | 6.11% |
修复样本以"工具调用图"居多(约 6%~10%),说明 LLM 生成时最容易出错的正是依赖边的对齐——这也解释了为什么双通道质检都以"节点 + 边"为核心。
每个领域目录最终落盘 4 个文件:data.json(样本)、graph_desc.json(工具图)、tool_desc.json(工具描述)、user_requests.json(用户请求,推理时只读这个文件)。
跑起来:推理、评估与排行榜读数
评测框架的三个维度
| 评测环节 | 指标 |
|---|---|
| 任务分解(task decomposition) | Rouge-1、Rouge-2、BertScore F1 |
| 工具调用(tool invocation) | 节点 F1(n-F1)、边 F1(e-F1,依赖关系是否正确) |
| 参数预测(parameter prediction) | 参数名 F1(t-F1)、参数值 F1(v-F1) |
两步跑完评测
- 环境:Python 3.8,
pip install -r requirements.txt;评开源模型推荐用fastchat+vllm把服务部署到localhost:4000 - 推理:
python inference.py --llm gpt-4 --data_dir data_multimedia --temperature 0.2 --top_p 0.1 --multiworker 5 --dependency_type resource,预测结果写入{data_dir}/predictions/{llm}.json - 评估:
python evaluate.py --data_dir data_multimedia --prediction_dir predictions --llm gpt-4 --splits all --n_tools all --mode add -m all,结果落到metrics目录的 JSON,可按"任务结构 × 工具数量"分档查看
排行榜怎么读
三个领域各取三行(完整 17 个模型的榜单见 taskbench/README.md):
| 领域 | 模型 | R1 | R2 | BsF | n-F1 | e-F1 | t-F1 | v-F1 |
|---|---|---|---|---|---|---|---|---|
| Multimedia | gpt-4 | 60.84 | 40.08 | 91.19 | 90.90 | 69.27 | 87.06 | 72.31 |
| Multimedia | claude-2 | 48.85 | 23.59 | 89.22 | 80.94 | 53.01 | 71.63 | 51.58 |
| Hugging Face | gpt-4 | 52.42 | 30.38 | 90.12 | 81.54 | 54.70 | 77.31 | 60.86 |
| Hugging Face | gpt-3.5-turbo | 42.99 | 21.58 | 88.47 | 69.49 | 33.36 | 55.88 | 36.32 |
| Daily Life | gpt-4 | 85.07 | 72.36 | 96.91 | 96.91 | 80.53 | 97.02 | 71.14 |
| Daily Life | codellama-13b | 89.86 | 83.27 | 97.90 | 87.73 | 63.16 | 84.26 | 62.38 |
注意 Daily Life 一栏:codellama-13b 的 R1/R2/BsF 反而高于 gpt-4,但 n-F1、t-F1、v-F1 仍落后——文本层面的分解接近不等于工具调用与参数预测达标,这是读评估结果时最容易踩的误判。
扩展到自定义领域:参数对应关系与常见坑
三步扩展流程
- 写工具库:支持两种格式——资源依赖工具必须有
id/desc/input-type/output-type;API 工具必须有id/desc/parameters(每项含name/type/desc) - 生成工具图:
generate_graph.py,依赖类型与工具格式对应 - 生成样本:
data_engine.py跑完后再过format_data.py(--data_dir <目录> --dependency_type <类型>),把data_raw.json转成data.json与user_requests.json,不合格样本写入data_error.json
容易踩的坑
--dependency_type必须与工具库字段匹配:带input-type的库用resource,带parameters的库用temporalresource类型仅支持data_huggingface与data_multimedia(inference.py中有硬断言),data_dailylifeapis必须用temporal- 自动生成的工具图建议人工修正后再跑生成,否则质检通过率会明显下滑
- 生成中断后,用
--data_dir指向已有结果目录即可续跑(脚本会跳过已完成样本并自动从目录内读取graph_desc.json/tool_desc.json) - 样本结构分布想调,改
data_engine.py里的method_weights/number_weights
完整流程与 17 个模型的榜单在 taskbench/README.md;评估指标实现见 taskbench/evaluate.py,数据格式转换见 taskbench/format_data.py。跑评测或构建数据遇到问题,可在 JARVIS 仓库(gitcode.com 上的 gh_mirrors/jarvis3/JARVIS)提交 issue。
【免费下载链接】JARVISJARVIS, a system to connect LLMs with ML community. Paper: https://arxiv.org/pdf/2303.17580.pdf项目地址: https://gitcode.com/gh_mirrors/jarvis3/JARVIS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考