Arize-ai/fireworks-cost-benchmark
GitHub: Arize-ai/fireworks-cost-benchmark
一个AI模型成本基准测试工具,通过衡量「每次成功任务的实际成本」而非token价格来评估不同LLM在生产场景中的真实性价比。
Stars: 1 | Forks: 0
# 每次成功任务的成本
**一项衡量完成一个任务实际需要多少成本的基准测试,而不是 token 的价格。**
大多数模型对比会引用每百万 token 的价格。生产系统关心的是另一件事:*成功完成这个任务花费了多少成本?*
重试、失败的工具调用、格式错误的输出,以及耗尽 token 限制的运行,都需要花费真金白银,而这些是 token 价格基准测试所隐藏的。
```
cost per successful task = total $ spent on a model across ALL attempts
---------------------------------------------
number of successful runs
```
这个代码库是一个小型的、经过插桩的 agent,它在 Docker 中运行真实的 [Terminal-Bench](https://www.tbench.ai) 任务,使用任务自带的测试对每次运行进行评分,并报告每个模型每次成功任务的成本。每一次运行都会被追踪至 [Arize AX](https://arize.com)。
## 研究发现
40 个任务 × 10 个模型 × 6 次试验(2,400 次运行),涵盖四家提供商。价格已于 2026-07-07、2026-07-14 和 2026-07-16 核实。400 个(任务,模型)单元中的每一个都恰好进行了 6 次试验。
| 模型 | 提供商 | 通过率 | 平均 $/尝试 | **$/成功** | 重试税 |
|---|---|---|---|---|---|
| gpt-oss-120b | Fireworks (开源) | 33% | $0.0178 | **$0.0541** | 3.0× |
| gemini-3.1-flash-lite | Google | 40% | $0.0255 | **$0.0632** | 2.5× |
| kimi-k2.6 | Fireworks (开源) | 42% | $0.1632 | **$0.3839** | 2.4× |
| glm-5.2 | Fireworks (开源) | 42% | $0.2083 | **$0.5000** | 2.4× |
| deepseek-v4-pro | Fireworks (开源) | 39% | $0.2302 | **$0.5877** | 2.6× |
| gpt-5.5 | OpenAI (前沿) | 67% | $0.4242 | **$0.6363** | 1.5× |
| kimi-k3 | Fireworks (开源) | 66% | $0.4410 | **$0.6699** | 1.5× |
| gpt-5 | OpenAI | 41% | $0.3171 | **$0.7687** | 2.4× |
| claude-sonnet-5 | Anthropic | 49% | $0.4945 | **$1.0144** | 2.1× |
| gemini-3.5-flash | Google | 23% | $0.2877 | **$1.2331** | 4.3× |
该指标揭示的核心结论:
- **每次成功成本最低的模型,通过率却最差。** gpt-oss-120b 以 $0.054 的成本完成一个任务,而其通过率仅为 33%,其每次成功的成本大约比 **gpt-5.5 便宜 12 倍**,比 **gemini-3.5-flash 便宜 23 倍**。便宜的 token 加上重试击败了昂贵的 token,即使在支付了三倍的重试税之后依然如此。
- **当我们增加研究难度时,这一发现依然成立。** 早期一项包含 10 个任务、3 个模型、3 次试验的研究表明,gpt-oss 对比 gpt-5.5 的成本差值为 **12.5 倍**。将任务数量增加四倍、模型数量增加三倍、试验次数翻倍,并切换到难度大得多的任务组合后,该差值变为 **11.8 倍**。这种差距依然保持稳定。
- **前沿模型的优势体现在能力上,而不是性价比上。** gpt-5.5 拥有最好的通过率 (67%) 和最低的重试税 (1.5 倍)。它是这里最*可靠*的模型。但完成单位工作时,它的成本依然要高出约 12 倍。
- **听起来便宜的名字并不代表是便宜的模型。** gemini-3.5-flash 是全场性价比最差的:通过率最低 (23%),重试税最高 (4.3 倍),并且 **91% 的失败 (184 次中的 168 次) 是由于 `token_cap`**,这意味着它会陷入死循环,直到触及预算上限并失败。它的同胞兄弟 gemini-3.1-flash-lite 却是每次成功成本第二低的模型。"Flash" 这个名字什么也没说明;但该指标却说明了一切。
- **“重试税”**(每次成功所需的尝试次数 = 1 ÷ 通过率)用一个数字概括了隐藏成本:最便宜的模型每次成功需要尝试 3 次,而前沿模型只需 1.5 次。
- **每次成功成本最低并不代表它能直接作为替代品。** gpt-oss-120b 仅能可靠解决(6 次试验中通过 4 次)**40 个任务中的 8 个**;而 gpt-5.5 能可靠解决 **40 个中的 25 个**。开源模型之所以便宜,部分原因*是*它只能赢下它能赢的任务。每次成功的成本和覆盖率是两个不同的问题,而这两个问题你都需要考虑。
- **开源模型也达到了前沿水平,所以开源对战闭源是错误的对比维度。** kimi-k3(开源)在整体成功率上与 gpt-5.5 持平(66% 对 67%),在可靠覆盖率上略胜一筹(26/40 对 25/40),并且每次成功的成本基本相当($0.67 对 $0.64),同时它是唯一一个解决了所有简单任务的模型。无论在低端(gpt-oss-120b 对 gemini-3.1-flash-lite)还是前沿(kimi-k3 对 gpt-5.5),开源和闭源模型都并驾齐驱。真正决定成本和能力的是价格档次和任务契合度,而不是授权协议。
### 路由策略在两个维度上都击败了所有单一模型
运行 `python scripts/routing.py results/benchmark_40x6.jsonl`。
| 策略 | 可靠解决 | **$/成功** |
|---|---|---|
| 仅使用 gpt-oss-120b | 8/40 | $0.054 |
| 仅使用 gpt-5.5(最佳单一模型) | 25/40 | $0.636 |
| **Oracle 路由**(选择能可靠解决每个任务的最便宜模型) | **34/40** | **$0.228** |
| **升级策略**(gpt-oss → flash-lite → kimi → gpt-5.5,首次通过即停止) | 每次通过 32.3/40 | **$0.527** |
| 遍历所有 10 个模型的简单升级策略 | 每次通过 34.5/40 | $1.319 |
- **Oracle 路由比最佳单一模型多解决了 36% 的任务,且成本仅为后者的约 1/3**
($0.228 对 $0.636)。它需要“事后诸葛亮”的视角来为每个任务挑选模型,因此应将其视为良好路由策略所能达到的上限,而不是一种可直接部署的策略。
- **升级策略是可部署的版本**,并且它同样在两个维度上胜出:比单独使用 gpt-5.5 更便宜,*并且*解决的任务更多,因为大多数任务都会被单次尝试成本低于 $0.03 的模型提前解决,只有真正困难的任务才会交由前沿模型处理。
- **简单的“遍历一切升级”是一个陷阱。** 每次 success $1.319 的成本比研究中的任何一个单一模型都要糟糕:你要为大约 6 个没有任何模型能解决的任务支付整条升级链路的成本,而且沿途你还在为性价比极差的层级买单。升级链路的设计才是重中之重;一个糟糕的链路设计比完全没有路由还要糟。
前沿模型并不一定具有更高的性价比。gpt-5.5 在简单的 `csv-to-parquet` 任务中,6 次试验仅通过了 **3 次**,而整个研究中成本最高的一次成功是 claude-sonnet-5 解决 `feal-linear-cryptanalysis`,花费了 **$1.35**。追踪记录准确地展示了每次运行在哪里做对了,或者在哪里出了错。
范围:40 个任务中有 37 个被至少一个模型解决。三个任务(`gpt2-codegolf`、`path-tracing-reverse`、`pcap-to-netflow`)没有被任何模型解决;这三个任务都能通过它们自己的 oracle 解决方案在此测试工具中运行通过,因此它们是确实难度很高,而不是因为损坏。本研究的总花费为 $626.29。
## 本代码库包含什么
```
run.py CLI matrix runner: (task × model × trial), bounded concurrency,
--resume to finish a crashed/stopped matrix without re-running
cpst/
tasks.py load a Terminal-Bench task (instruction, timeouts, paths)
container.py per-task Docker lifecycle: build / run / exec / copy / teardown
agent.py the agent: OpenAI-compatible loop, one run_terminal_cmd tool,
token accounting, token/wall-clock guardrails
grading.py faithful port of Terminal-Bench's pytest grading
runner.py one run: container -> agent -> grade -> cost -> traced result
report.py cost-per-successful-task aggregation + summary table
models.py model matrix loader + OpenAI-compatible client factory
tracing.py Arize AX / OpenInference setup
config/
models.yaml model matrix + per-1M-token pricing (single source of truth)
tasks/
subset40.txt the 40-task set for the headline study (8 easy / 20 medium /
12 hard), a superset of subset.txt, each oracle-validated
subset.txt the original 10-task subset (earlier study)
results/
benchmark_40x6.jsonl the headline 2,400-run study (one row per run)
benchmark_3trials.jsonl the earlier 90-run study (10 tasks × 3 models × 3 trials)
subset_validation.log record of which candidate tasks passed their oracle
scripts/
summarize.py render the summary table from any results JSONL
routing.py oracle + escalation routing analysis over a results JSONL
run_status.py live progress / throughput / spend for an in-flight matrix
stop_run.sh cleanly stop a long run so it can be --resumed later
resume_run.sh resume the remaining cells and merge the final results
ax_link.py build correct Arize AX deep links to traces in a results JSONL
validate_grading.py prove grading is faithful on one task (oracle passes, empty fails)
validate_batch.py oracle-validate candidate tasks for subset selection
verify_tool_spans.py check tool spans go red on failure; exec survives binary output
run_agent_once.py run one (task, model) end-to-end
```
结果 JSONL 文件中的每一行都包含:任务、模型、试验、`passed`、`failure_reason`(`test_failed` / `token_cap` / `timeout` / `max_steps` / `agent_error`)、token 计数、美元 `cost_usd`、实际运行时间、`steps`、`tool_calls` 以及 `trace_id`。
## 工作原理
- **任务**来自 Terminal-Bench,在这里*仅*用作任务来源(提示词、Docker 环境、测试脚本)。我们**不**使用 Harbor 作为运行环境。执行和评分系统是我们自主开发的,因此该演示展示的是*我们自己的*插桩 agent。
- **Agent** 是一个基于 OpenAI 兼容协议的轻量级循环,包含一个单一工具 `run_terminal_cmd`,该工具通过 `docker exec` 在任务的容器内运行 bash。只需编辑 `config/models.yaml`,任何提供商的模型都可以运行。Fireworks、OpenAI、Anthropic 和 Google 都通过它们兼容 OpenAI 的 endpoint 运行相同的代码路径。这种轻量级的脚手架设计确保了成本完全归因于*模型*本身,而不是测试工具。
- **评分**会在 agent 结束*之后*,将任务自带的 `tests/` 和 `run-tests.sh` 复制到容器中并运行它们(pytest;必须通过所有测试)。agent 永远看不到测试内容。这与 Terminal-Bench 自带的评分机制完全一致。
- **防护机制:** 一个 **token 预算上限**(主要的、保证公平性的截断机制)和一个宽裕的**实际运行超时限制**(安全网)。触发其中任何一个都会被记录为相应原因的失败,这与真正的测试失败有所区别,从而确保成功计数的真实性。每次执行的命令输出都有上限,因此会产生大量失控输出的任务不会耗尽宿主机内存。
- **可观测性:** 每次运行都会向 Arize AX 发送 OpenInference 追踪数据:一个根 `AGENT` span,包含嵌套的 `LLM` 和 `TOOL` span、token 计数、延迟,以及在失败时的 ERROR 状态和失败原因。当退出状态码不为零时,Tool span 会变红,因此你可以清楚地看到运行在*哪里*遇到了阻力。
## 设置
需要 **Docker**(正在运行)和 **Python 3.12**。
```
python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # fill in the keys (see below)
# Task 源(只读,gitignored,约 240 个 task)
git clone --depth 1 https://github.com/laude-institute/terminal-bench.git .tb-src
```
`.env` 中的键值:
| 键 | 用途 |
|---|---|
| `FIREWORKS_API_KEY` | Fireworks 开源模型 |
| `OPENAI_API_KEY` | OpenAI 对比模型 |
| `ANTHROPIC_API_KEY` | Anthropic 对比模型 |
| `GOOGLE_API_KEY` | Google 对比模型 |
| `ARIZE_SPACE_ID`, `ARIZE_API_KEY` | Arize AX 追踪 |
| `ARIZE_ORG_ID` | (可选)用于 `scripts/ax_link.py` 的深链接 |
| `ARIZE_PROJECT_NAME` | AX 项目(默认为 `cost-per-successful-task`) |
定价配置位于 `config/models.yaml` 中,是 Python 成本计算的单一事实来源。请将相同的各模型价格同步配置到 Arize AX 的模型成本设置中,以便仪表板上的成本与本代码库保持一致。
## 用法
复现核心研究(2,400 次运行;需要数小时及真实费用):
```
python run.py \
--tasks tasks/subset40.txt \
--models fw-gpt-oss-120b,fw-kimi-k2p6,fw-deepseek-v4-pro,fw-glm-5p2,fw-kimi-k3,oai-gpt-5.5,oai-gpt-5,ant-claude-sonnet-5,goog-gemini-3.5-flash,goog-gemini-3.1-flash-lite \
--trials 6 --token-cap 200000 --wall-clock-cap 900 --concurrency 12
```
较长的测试矩阵是可以中断的。`--resume` 会跳过 `--output` 中已经存在的(任务、模型、试验)单元并追加新内容,因此停止或崩溃只会损失正在运行中的单元,不会产生其他额外代价:
```
./scripts/stop_run.sh # clean stop, keeps completed cells
nohup ./scripts/resume_run.sh >/dev/null 2>&1 & # finish the rest, then merge
python scripts/run_status.py # progress, throughput, spend
```
查看结果:
```
python scripts/summarize.py results/benchmark_40x6.jsonl # the summary table
python scripts/ax_link.py results/benchmark_40x6.jsonl --failed-only # AX links
```
小规模冒烟测试:
```
python run.py --task csv-to-parquet --models fw-gpt-oss-120b --trials 1
```
## 注意事项
- **无状态执行 Agent。** Agent 通过一次性的 `docker exec` 命令来驱动任务,而不是持久的交互式终端。这适用于批处理/文件输出任务(占绝大多数),但不适用于需要实时 TUI 的任务。任务子集也是据此挑选的。
- **子集,而非完整测试套件。** 选取了-Bench 约 240 个任务中的 40 个,它们集中在部分模型通过、部分模型失败的区间,这正是该指标最能提供有效信息的地方。每一个任务都通过在此测试工具中运行其自带的 oracle 解决方案进行了验证。这不是一个可用于排行榜横向比较的分数。
- **不要将通过率与早期的 10 任务研究进行对比。** `subset40.txt` 难度大得多(12 个高难度任务对比之前的 1 个),因此绝对通过率要低得多。每次成功的*成本比率*才是可复现的。
- **价格会浮动。** `config/models.yaml` 中的价格截至 2026-07-07 和 2026-07-14;请重新核对。这里的 Claude Sonnet 5 是按其 $3/$15 的标准费率计费的,而不是持续到 2026-08-31 的 $2/$10 优惠费率。
- **样本量。** 6 次试验 × 40 个任务意味着每个模型进行 240 次运行,这使得通过率的 95% 置信区间大约为 ±6%。这足以让我们有信心根据每次成功成本对模型进行排名;但不足以在相邻模型之间斤斤计较(kimi-k2.6 和 glm-5.2 在通过率上仅有一线之差)。
- **Agent 错误。** 2.2% 的运行由于提供商的瞬态错误而失败,主要集中在 OpenAI 和 Anthropic。它们被计为失败,这对那些模型来说稍微有些不公平。
## 鸣谢
任务来自 [Terminal-Bench](https://github.com/laude-institute/terminal-bench)
(Apache-2.0),此处仅将其用作任务来源。各个任务可能根据其自身的许可协议捆绑了第三方组件,因此在任何公开发布之前,请逐个检查任务。追踪由 [Arize AX](https://arize.com) 和 [OpenInference](https://github.com/Arize-ai/openinference) 提供。
标签:AI智能体, DLL 劫持, 人工智能, 大语言模型, 安全规则引擎, 性能基准测试, 成本评估, 用户模式Hook绕过, 请求拦截, 逆向工具