SuperAPI AI 工具集

tbench

测试与质量

查看项目

更新于 10-16 22:15

技能介绍

tbench 简介

tbench 是 Xum 智能体面向 Terminal-Bench 2.0 的适配与基准测试集成。适配器代码位于 benchmarks/terminal_bench/,评测框架使用 Harbor。

用途

用于在 Terminal-Bench 2.0 数据集上运行 Xum 智能体,评测其在终端任务中的表现,并支持失败分析与排行榜提交。

主要能力

  • 运行完整基准套件或指定任务。
  • 支持本地 Docker 与 Daytona 云沙箱两种运行环境,云沙箱可提高并发、缩短耗时。
  • 通过环境变量配置数据集、并发数、全局超时、任务名、Harbor 参数以及 mux run 参数。
  • 支持严格 goal 模式运行(MUX_RUN_AS_GOAL=1)。
  • 结果保存到 runs/YYYY-MM-DD__HH-MM-SS/,包含聚合结果、运行元数据、每个任务的会话日志、asciinema 录制与测试输出。
  • 提供 GitHub Actions 集成(.github/workflows/terminal-bench.yml 与 nightly-terminal-bench.yml),夜间工作流在完整任务集上运行 Claude 与 GPT 模型并上传结果工件。
  • 结果可上传 BigQuery,通过 bq CLI 查询。
  • 提供排行榜提交准备脚本与 HuggingFace 上传方式。
  • 提供失败率分析脚本与日志下载脚本,用于对比 Xum 与其他智能体的表现。

使用方式

快速开始(通常假设通过 CI 的 workflow_dispatch 运行):

# 运行完整基准套件
make benchmark-terminal

# 运行指定任务
make benchmark-terminal TB_TASK_NAMES="hello-world chess-best-move"

# 指定模型与 xhigh thinking
MUX_RUN_ARGS="--thinking xhigh" make benchmark-terminal TB_ARGS="--agent-kwarg model_name=anthropic/claude-opus-5-5"

# 在 Daytona 云上运行(高并发)
TB_ENV=daytona TB_CONCURRENCY=48 make benchmark-terminal

Daytona 云沙箱:

export DAYTONA_API_KEY="your-api-key"
make benchmark-terminal TB_ENV=daytona TB_CONCURRENCY=48
make benchmark-terminal TB_ENV=daytona TB_CONCURRENCY=48 TB_TASK_NAMES="chess-best-move stockfish-elo"

环境变量:

  • TB_DATASET:数据集,默认 terminal-bench@2.0
  • TB_CONCURRENCY:并发任务数,默认 4
  • TB_TIMEOUT:全局超时秒数,默认 1800(30 分钟)
  • TB_ENV:运行环境(local 或 daytona)
  • TB_TASK_NAMES:空格分隔的任务名,默认全部任务
  • TB_ARGS:传给 harbor 的额外参数
  • MUX_RUN_ARGS:直接传给容器内 mux run 的 CLI 标志
  • MUX_RUN_AS_GOAL:设为 1 时以严格 mux run --goal 目标运行每个任务指令

智能体配置通过 --agent-kwarg 传入 Harbor:

  • model_name:模型名,例如 anthropic/claude-opus-5-5、openai/gpt-6.1-sol
  • experiments:启用的实验,逗号分隔,例如 programmatic-tool-calling

CI 调度示例:

gh workflow run terminal-bench.yml \
  -f model_name=anthropic/claude-opus-5-5 \
  -f mux_run_args="--thinking high --use-1m"

gh workflow run terminal-bench.yml \
  -f model_name=openai/gpt-6.1-sol \
  -f mux_run_args="--thinking high --budget 5.00"

严格 goal 模式:

MUX_RUN_AS_GOAL=1 \
MUX_RUN_ARGS="--thinking high --goal-turns 30 --goal-budget 10.00" \
make benchmark-terminal TB_TASK_NAMES="chess-best-move"

本地运行监控:可将本地 Terminal-Bench 作为受监控的后台 bash 启动,设置过滤条件匹配失败/完成行。

结果目录结构:

  • results.json:聚合结果与通过/失败率
  • run_metadata.json:运行配置与元数据
  • <task-id>/:每个任务目录,含 sessions/agent.log、sessions/agent.cast、sessions/tests.log、results.json

BigQuery 查询:结果上传至 mux-benchmarks.benchmarks.tbench_results,需先 gcloud auth login 并设置项目为 mux-benchmarks。表结构为每个任务试验一行,包含 run_id、task_id、model_name、thinking_level、mode、dataset、experiments、passed、score、n_input_tokens、n_output_tokens、github_workflow、github_run_id、github_sha、ingested_at。

排行榜提交:先运行 prepare_leaderboard_submission.py 准备提交目录,再通过 HuggingFace Python API 上传(hf upload CLI 在大提交时容易超时)。脚本会生成 leaderboard_submission/ 结构,包含 metadata.yaml 与多个 job 文件夹。上传示例使用 HfApi().upload_folder(...) 指向 alexgshaw/terminal-bench-2-leaderboard 数据集并创建 PR。

失败分析工作流:

  1. 用 analyze_failure_rates.py --top 20 找出 Xum 表现较差的任务(高 M/O 比)。
  2. 用 BigQuery 查询特定任务的通过/失败分布。
  3. 用 download_run_logs.py 下载并检查智能体日志,日志缓存在 .run_logs/<run-id>/。
  4. 克隆排行榜仓库到 .leaderboard_cache/ 对比其他提交。

M/O 比定义为 Xum 失败率除以排名前 10 智能体的平均失败率,比值高表示优化机会大。

适用场景

  • 评测 Xum 智能体在 Terminal-Bench 2.0 任务上的表现。
  • 在 CI 中定期运行基准并上传结果。
  • 对比 Xum 与其他智能体的失败模式,定位优化方向。
  • 准备并提交 Terminal-Bench 2.0 排行榜结果。

限制

  • 依赖 Harbor 评测框架、Docker 或 Daytona 云沙箱、BigQuery 与 HuggingFace 等外部服务。
  • Daytona 账户有资源限制(Tier 3:250 vCPU / 500GB RAM 池)。
  • 排行榜提交需用户自行执行上传命令,不应由助手直接上传或对排行榜仓库开 PR。
  • 超时采用全局默认而非按任务配置。
  • 资料未提供收费、价格与平台支持范围等信息。