3 步跑通 terminal-bench:AI 终端评测的完整实战指南

3 步跑通 terminal-bench:AI 终端评测的完整实战指南

【免费下载链接】terminal-bench-1A benchmark for LLMs on complicated tasks in the terminal项目地址: https://gitcode.com/GitHub_Trending/tb/terminal-bench-1

terminal-bench 是一个面向 AI 终端评测的基准框架:它把语言模型接入一个隔离的 Docker 终端环境,让 AI 代理自主完成写代码、修环境、起服务这类真实任务,再用测试脚本自动判定结果。本文从安装到第一次跑通评测,再到内部数据流、并发调优与自定义任务开发,把一条完整的评测链路讲清楚。

先看一个真实的评测场景

以最基础的任务hello-world为例,代理在容器里只拿到一句英文指令:创建一个/app/hello.txt,内容写入Hello, world!。代理自行决定执行什么命令;任务结束后,评测器在容器内运行tests/test_outputs.py,用 pytest 断言文件存在且内容精确匹配。通过即记一次成功。

这就是整个基准的判定逻辑:指令、测试脚本、参考解三件套齐全,结果不靠人眼看日志。仓库目前在 original-tasks/ 目录下内置了 200 多个原始任务,覆盖文件操作、Git 修复、编译 C/Rust 程序、训练模型、搭建 Web 服务等场景,每个任务一个独立目录,任务注册表 负责版本化管理。

terminal-bench 是什么,解决谁的问题

一句话定位:terminal-bench 是给构建 LLM 代理、评测框架或系统级推理能力的团队提供的可复现 AI 终端评测工具——任务数据集 + 执行 harness 两部分组成,通过tbCLI 驱动。

  • 任务数据集:每个任务 = 英文指令(task.yaml)+ Docker 环境 + 测试脚本(run-tests.sh)+ 参考解(solution.sh或solution.yaml)。
  • 执行 harness:位于 terminal_bench/harness/,负责把模型连到沙箱终端、并发调度、记录与判定。
  • 代理层:terminal_bench/agents/ 内置 terminus、oracle 等实现,也支持 OpenHands、ClaudeCode、Aider、Goose 等安装型代理和 MCP 代理。

安装并跑通第一次评测

环境要求:Python 3.12+、Docker(沙箱必须)、uv包管理器。

  1. 安装 CLI:uv tool install terminal-bench(也可以pip install terminal-bench),装完用tb --version验证。
  2. 用 oracle 代理验证管线:tb run --agent oracle --task-id hello-world。oracle 不接模型,直接执行任务的参考解并跑测试。这一步能确认你的 Docker 环境和测试链路没问题,是排查配置问题的最快方式。
  3. 接入真实模型:tb run --agent terminus --model anthropic/claude-3-7-latest,代理会在容器内自主执行任务,结果写入输出目录。

运行结束后,默认输出落在runs/目录下,按run_id(默认时间戳YYYY-MM-DD__HH-MM-SS)组织:每个任务一个 trial 目录,包含run.log运行日志和 asciinema 录制的完整终端录像。用tb tasks list可以浏览当前数据集里所有可用任务。

一次评测的完整数据流

顺着一次tb run的执行过程看,系统内部是这样运转的:

  1. 解析数据集:harness 读取 registry.json,确定任务集合(本地original-tasks/或指定版本的terminal-bench-core数据集),应用--task-id、--n-tasks、--exclude-task-id做筛选。
  2. 构建沙箱:按任务的Dockerfile基于基础镜像构建容器(--no-rebuild可跳过)。
  3. 代理接管终端:通过 tmux 会话把指令注入容器终端,代理(如 terminus)循环执行「读输出 → 调 LLM → 发命令」;AsciinemaHandler 同步录制全过程。
  4. 超时与判定:任务到达max_agent_timeout_sec或代理主动结束,harness 在容器内执行run-tests.sh,由 pytest 产出结构化结果。
  5. 汇总产出:每个 trial 生成TrialResults(含成功与否、失败模式),整轮汇总为BenchmarkResults写入输出目录;加--upload-results可上传到远端。

并发在这一层生效:--n-concurrent(默认 4)控制同时运行的容器数,--n-attempts控制每任务重复次数。

熟练之后:调并发、筛任务、写新任务

常用参数速查

参数默认值作用
--task-id全部任务指定任务 ID 或 glob,可多次传入
--n-tasks全部任务限制任务数量
--exclude-task-id无排除指定任务
--n-concurrent4并发 trial 数
--n-attempts1每任务尝试次数
--dataset-name/--dataset-version本地任务指定数据集版本,如terminal-bench-core+0.1.1(当前排行榜版本)
--no-rebuild关跳过镜像重建,重复调试省时
--agent-kwarg无透传代理参数,如version=0.51.0、prompt_template=./my_prompt.j2

写一个自定义任务:新建目录放入四样东西——task.yaml(指令、parser_name、超时配置)、Dockerfile(环境)、run-tests.sh+tests/test_outputs.py(判定)、solution.sh(参考解)。写好先用tb run --agent oracle --task-id 你的任务名验证参考解能通过测试,再换真实模型评测。任务可以引用数据文件甚至图片,比如 code-from-image 任务 直接给模型一张代码截图,要求它复现程序:

对接其他基准:adapters/ 目录提供了 SWE-bench、MLE-bench、AppWorld 等外部基准的适配层,可以把它们的任务转成 terminal-bench 格式统一评测。

排错与常见问题

  • 评测结果异常:先看runs/<run_id>/下的run.log,再回放 asciinema 录像定位代理卡在哪一步;日志级别用--log-level调高可看到更多细节。
  • 镜像构建慢:调试阶段加--no-rebuild复用已有镜像;跑完用默认的--cleanup行为清理 Docker 镜像,避免磁盘占满。
  • 机器资源不够:把--n-concurrent降到 1~2,同时控制--n-attempts,先小规模验证再全量跑。

小结与下一步

terminal-bench 的价值在于把「AI 代理能不能在终端干活」变成可复现、可对比、可自动判定的指标。建议的行动路径:先tb run --agent oracle --task-id hello-world打通管线,再用--n-tasks 5跑一个小样本对比两个模型,最后用--dataset-name terminal-bench-core --dataset-version 0.1.1对齐排行榜口径做正式评测。

【免费下载链接】terminal-bench-1A benchmark for LLMs on complicated tasks in the terminal项目地址: https://gitcode.com/GitHub_Trending/tb/terminal-bench-1

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

edge-tts 语音合成报错排查:4 类常见故障的定位与修复

edge-tts 语音合成报错排查:4 类常见故障的定位与修复

edge-tts 语音合成报错排查&#xff1a;4 类常见故障的定位与修复 【免费下载链接】edge-tts Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge 项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts 你刚敲完命令…

2026/10/21 1:58:37 阅读更多 →
1990–2024年 省级-外商直接投资水平数据(xlsx)

1990–2024年 省级-外商直接投资水平数据(xlsx)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:58:37 阅读更多 →
1960-2023年 世界各国对外开放度数据(xlsx)

1960-2023年 世界各国对外开放度数据(xlsx)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:58:37 阅读更多 →

最新新闻

纯Java数据包处理实战:抓包解析过滤统计全链路

纯Java数据包处理实战:抓包解析过滤统计全链路

简介&#xff1a;这份资源面向具备一定Java与网络编程基础、希望研究高性能数据包处理的开发者&#xff0c;是一套基于Intel数据平面开发套件&#xff08;DPDK&#xff09;的Java快速数据包处理框架。它最初作为毕业设计项目开发&#xff0c;包含DPDKJava主框架及报告后重构的D…

2026/10/21 2:42:59 阅读更多 →
Notepad++新手入门:语法高亮、编码转换与正则替换实战指南

Notepad++新手入门:语法高亮、编码转换与正则替换实战指南

简介&#xff1a;本资源为Windows平台下轻量级代码编辑器Notepad的完整安装与配置包&#xff0c;面向初学者至中高级程序员&#xff0c;解决日常文本编辑、多语言代码编写、远程文件协作及轻量级开发环境搭建等核心需求。压缩包共392个文件&#xff0c;涵盖128个XML配置与界面定…

2026/10/21 2:42:59 阅读更多 →
Mybatis一级缓存和结合Spring Framework后失效的源码探究

Mybatis一级缓存和结合Spring Framework后失效的源码探究

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:42:59 阅读更多 →
LangGraph多智能体编排:主管架构与分层架构实战指南

LangGraph多智能体编排:主管架构与分层架构实战指南

“多智能体”这几年有点被当成“AI应用进阶的标配”了&#xff0c;好像不拆出三五个Agent就显得不够高级。我的观点反而比较朴素&#xff1a;多智能体不是用来炫技的&#xff0c;它是当单个Agent的复杂度跨过某个临界点之后&#xff0c;不得不做的工程拆分。真正决定一个系统能…

2026/10/21 2:42:59 阅读更多 →
C51单片机驱动LCD1602入门:从点亮到显示温度时间

C51单片机驱动LCD1602入门:从点亮到显示温度时间

简介&#xff1a;这份资源是面向C51单片机初学者与嵌入式爱好者的LCD1602显示例程合集&#xff0c;围绕字符型液晶屏与8051内核单片机的交互展开&#xff0c;覆盖矩阵按键键值、DS18B20温度、DS1302实时时钟以及ADC0832模数转换电压四类典型应用场景&#xff0c;帮助读者理解数…

2026/10/21 2:42:59 阅读更多 →
GobiNet驱动V1.6.2.9:嵌入式Linux下4G模组拨号联网实践

GobiNet驱动V1.6.2.9:嵌入式Linux下4G模组拨号联网实践

简介&#xff1a;移远通信Linux/Android平台GobiNet驱动V1.6.2.9&#xff0c;是为移远Gobi系列3G/4G/LTE模块适配的Linux内核驱动源码包&#xff0c;适合嵌入式开发、物联网设备及工业路由等场景&#xff0c;解决系统识别无线模组并建立数据通道的问题。压缩包共9个文件&#x…

2026/10/21 2:41:58 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →