☰
TaskBench 完整指南:3 个阶段构建 28,271 条 LLM 工具调用评估数据
2026/10/29 19:39:58 网站建设 项目流程

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 Toolsdata_huggingface12,21769.22%61.76%
Multimedia Toolsdata_multimedia8,90470.54%62.71%
Daily Life APIsdata_dailylifeapis7,15075.97%60.42%

三个领域的结构分布(按工具调用图拓扑):

领域single(单工具)chain(链式)dag(有向无环图)
Hugging Face Tools3,0673,642837
Multimedia Tools2,0372,982565
Daily Life APIs1,2582,787275

工具图怎么建:两种依赖类型决定图的形状

工具库是一个 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 Tools74.01%84.22%69.22%
Multimedia Tools78.16%82.69%70.54%
Daily Life APIs79.63%87.70%75.97%

人工核验:正确、废弃、修复三档

双通道通过的样本再进人工环节,检查三个维度:指令语法、工具调用图正确性、调用参数正确性。最终处置分为三档:

领域进入人工核验直接正确废弃修复语法修复指令修复调用图
Hugging Face Tools8,45782.46%10.77%0.32%3.87%9.96%
Multimedia Tools6,28183.77%11.09%0.17%1.70%9.96%
Daily Life APIs5,43279.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):

领域模型R1R2BsFn-F1e-F1t-F1v-F1
Multimediagpt-460.8440.0891.1990.9069.2787.0672.31
Multimediaclaude-248.8523.5989.2280.9453.0171.6351.58
Hugging Facegpt-452.4230.3890.1281.5454.7077.3160.86
Hugging Facegpt-3.5-turbo42.9921.5888.4769.4933.3655.8836.32
Daily Lifegpt-485.0772.3696.9196.9180.5397.0271.14
Daily Lifecodellama-13b89.8683.2797.9087.7363.1684.2662.38

注意 Daily Life 一栏:codellama-13b 的 R1/R2/BsF 反而高于 gpt-4,但 n-F1、t-F1、v-F1 仍落后——文本层面的分解接近不等于工具调用与参数预测达标,这是读评估结果时最容易踩的误判。

扩展到自定义领域:参数对应关系与常见坑

三步扩展流程

  1. 写工具库:支持两种格式——资源依赖工具必须有id/desc/input-type/output-type;API 工具必须有id/desc/parameters(每项含name/type/desc)
  2. 生成工具图:generate_graph.py,依赖类型与工具格式对应
  3. 生成样本: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的库用temporal
  • resource类型仅支持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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询