如何验证 AI Agent 能否在终端里真正干活:Terminal-Bench 完整指南

如何验证 AI Agent 能否在终端里真正干活:Terminal-Bench 完整指南

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

如果你正在开发基于大模型的 Agent,多半被这个问题卡住过:模型在聊天窗口里看起来聪明,可一旦放进真实的终端环境——装依赖、调试脚本、起服务、跑测试——它到底能不能把事做完?Terminal-Bench 就是为回答这个问题而生的开源基准平台。它由两部分组成:一套两百多个真实终端任务构成的数据集(当前仓库original-tasks/目录下就有 241 个任务目录),以及一个把语言模型接入 Docker 沙箱终端的执行工具(harness),让评测全程自动、可复现。

先看痛点:为什么"聊天看起来聪明"不够用

问答型评测只能证明模型会说,而真实的终端任务是链条式的:一条指令背后往往连着"读文件、改配置、编译、验证输出"一长串动作,中间任何一步出错任务就失败。

Terminal-Bench 的处理方式很直接:给 Agent 一份英文指令和一个干净的 Docker 沙箱,让它自主操作,最后由测试脚本判定成败。这样得到的不是主观印象,而是每个任务"通过/未通过"的硬指标,并且换一台机器重跑也能得到可复现的分数。

5 分钟跑通第一次评测 🏃

最快的安装命令

Terminal-Bench 以 pip 包形式发布,安装后获得tb命令行工具:

uv tool install terminal-bench

习惯传统工具链的话,pip install terminal-bench同样可以。由于任务跑在 Docker 容器里,宿主机还需要装好 Docker;仓库本身用uv管理依赖(见 pyproject.toml)。

一条 tb run 启动评测

安装完成后,核心入口就是tb run:

tb run \ --agent terminus \ --model anthropic/claude-3-7-latest \ --dataset-name terminal-bench-core \ --dataset-version 0.1.1

参数含义可以对照 CLAUDE.md 理解:

  • --agent决定用哪个 Agent 把模型输出翻译成终端命令,内置的 terminus 是目前最常用的起点,更多实现在 terminal_bench/agents/ 中;
  • --model指定被测模型;
  • --dataset-name与--dataset-version锁定任务集版本。terminal-bench-core的0.1.1版本对应官方排行榜,数据集版本元数据记录在仓库根目录的 registry.json 中,固定版本号才能和别人横向比分数;
  • 想控制并发可加--n-concurrent(官方示例取 8,机器紧张时降到 2–4 更稳),用--task-ids只跑部分任务,--n-attempts调整每个任务的尝试次数,--output-path自定义结果落盘位置。

跑之前如果不确定有哪些参数,tb run --help是最快的参考。

看懂一个任务的内部构造 🔍

打开 original-tasks/ 任意目录,比如最简单的hello-world,每个任务都是"三件套":

  1. task.yaml:英文指令加上元数据。hello-world 的指令只有一句"创建 /app/hello.txt,写入 Hello, world!",文件里还标了difficulty、category、超时时间(max_agent_timeout_sec)等字段。注意文件开头的 canary GUID 注释——它用于标记基准数据,防止这些任务意外混入模型训练语料。
  2. run-tests.sh 与 tests/:判定 Agent 是否做对的测试脚本。hello-world 的 run-tests.sh 会在容器里装好 uv 和 pytest,然后运行tests/test_outputs.py检查文件内容。
  3. solution.sh:参考解(oracle solution)。hello-world 的参考解就一行echo。它用来验证任务本身可解,也方便人工对照 Agent 的解法路径。

再配上 Dockerfile / docker-compose.yaml 定义沙箱环境,任务就齐了。难度跨度非常大:从fix-git、configure-git-webserver这类系统管理,到compile-compcert、make-doom-for-mips这类编译构建,再到cartpole-rl-training、mcmc-sampling-stan这类训练与统计建模任务,覆盖了"终端环境里 AI 该会的活"的主要面。

Agent 与模型怎么搭

--agent和--model是互相独立的两层:Agent 负责"把意图变成命令"的策略与解析(仓库在 terminal_bench/parsers/ 里放了针对不同输出格式的解析器),模型负责推理。同一模型换 Agent、或同一 Agent 换模型,分数差异本身就是有价值的实验信息。

另外,docker/mcp-server/ 提供了在沙箱内运行 MCP 服务的镜像,docker/agents/goose/ 则展示了把第三方 Agent(如 goose)带进终端容器的方式——评测框架本身不绑定某一家模型或 Agent,这正是它被用作跨团队对比工具的原因。

评测结果怎么读 📊

一次 run 结束后,harness 会为每个任务留下通过与否、Agent 执行轨迹(依赖 asciinema 录制)和运行日志,聚合起来就是这次评测的总通过率与分任务明细。

想看得更直观,可以用仓库自带的 Streamlit 面板:dashboard/ 目录下的dashboard.py配合数据库初始化脚本(db_init.py、migrations.py)把结果导入后,提供可视化的任务级钻取。日常建议养成两个习惯:

  • 汇报成绩时写清数据集与版本号,比如"terminal-bench-core @ 0.1.1",否则分数没有可比性;
  • 对未通过的任务,直接回放终端录屏定位失败点——是命令写错、环境没装好,还是超时,通常一眼可见。

二次扩展:从用别人任务到写自己的任务 🔧

自定义任务三步走

想把自己遇到的真实运维/开发场景变成基准任务,步骤和 hello-world 的结构一致:

  1. 在任务目录里写task.yaml,用英文把指令、难度、超时时间写清楚;
  2. 用 Dockerfile 或 docker-compose.yaml 描述沙箱的初始环境(预装什么、留下什么"坑");
  3. 编写tests/下的测试与run-tests.sh判定逻辑,并附一份能跑通的solution.sh。

提交前可以先过一遍 scripts_bash/ 里的检查脚本(如check-dockerfile-sanity.sh、validate-task-fields.sh),它们会拦截任务目录结构、字段和 Dockerfile 的常见错误,比人工自查快得多。

把 SWE-bench 等外部基准接进来

仓库的 adapters/ 目录已经内置了一批适配器:swebench、mlebench、quixbugs、swelancer 等,每个适配器由adapter.py负责把外部任务转换成 Terminal-Bench 格式,parity_experiment.json记录与原始基准的对齐实验结果。如果你的模型团队需要"一套流水线跑多个公开榜单",从这里看起是最短路径。

收尾:这套工具适合谁

如果你在做 LLM Agent 的落地开发,Terminal-Bench 给出的"任务通过率 + 可回放轨迹"比任何 demo 都更能暴露真实短板;如果你在比较不同模型或 Agent 框架的终端能力,固定数据集版本即可得到可横向比较的分数;如果你只是好奇"现在的 Agent 到底能干什么",跑一遍terminal-bench-core再打开 dashboard 看分任务结果,半小时内就能建立体感。

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

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

相关新闻

LUA在线解密工具(LUA反编译)UnLockLUA

LUA在线解密工具(LUA反编译)UnLockLUA

功能介绍 支持LUA加密文件的反编译。 操作简单,直接使用。 使用说明 添加待解密的lua文件。 点击解密按钮,稍等片刻即可获得反编译后的lua内容。 >> 解密前: >> 解密后: 注意事项 请确保使用的是合法授权的文件进行解…

2026/10/21 1:18:57 阅读更多 →
noname 三国杀网页版完整指南:免费开源的浏览器即开即玩三国杀

noname 三国杀网页版完整指南:免费开源的浏览器即开即玩三国杀

noname 三国杀网页版完整指南:免费开源的浏览器即开即玩三国杀 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 晚上十一点,想打一局三国杀,手机里没装游戏客户端,办公电脑也不方便再装…

2026/10/21 1:18:57 阅读更多 →
maple 程序,编译,运行

maple 程序,编译,运行

/* 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:17:56 阅读更多 →

最新新闻

Django数据可视化实践:超市销售系统全流程开发与热词分析

Django数据可视化实践:超市销售系统全流程开发与热词分析

毕业设计做到一半才意识到"选对题"比“写代码”重要得多——这是我在带几个应届生做完整套毕设流程后最深的体会。今天这篇想好好拆解一个很有代表性的题目:基于PythonDjango的超市销售系统,以及其中数据可视化模块的具体实现。这个选题好在哪…

2026/10/21 2:01:38 阅读更多 →
iPhone 模拟器实测:Madeira 在 iOS 跑 x86-64 Windows 游戏拆解

iPhone 模拟器实测:Madeira 在 iOS 跑 x86-64 Windows 游戏拆解

iPhone 模拟器实测:Madeira 在 iOS 跑 x86-64 Windows 游戏拆解 【免费下载链接】Madeira Run x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT 项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira App Store 里搜不到它&#xff0…

2026/10/21 2:01:38 阅读更多 →
PLC实战经验清单:从硬件接线到程序调试的90条避坑指南

PLC实战经验清单:从硬件接线到程序调试的90条避坑指南

/* 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:01:38 阅读更多 →
零成本用GitHub Pages部署HTML5游戏

零成本用GitHub Pages部署HTML5游戏

零成本用GitHub Pages部署HTML5游戏 【免费下载链接】github-pages Create a site or blog from your GitHub repositories with GitHub Pages. 项目地址: https://gitcode.com/GitHub_Trending/gi/github-pages 想让玩家在线试玩你的游戏,是不是得先租台服务…

2026/10/21 2:01:38 阅读更多 →
Cx-Programmer中ST语言编程实战:从梯形图到结构化文本

Cx-Programmer中ST语言编程实战:从梯形图到结构化文本

/* 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:01:38 阅读更多 →
自动驾驶黄埔军校:4500人培养体系与行业技术扩散

自动驾驶黄埔军校:4500人培养体系与行业技术扩散

在自动驾驶这行混久了,你会发现一个很有意思的现象:圈子里提到“黄埔军校”四个字,大家不用解释就知道说的是哪家。前阵子跟几个老朋友闲聊,有人随口说了句“现在从那儿出来的,加起来得有4500人了”,在场的…

2026/10/21 2:00:38 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →