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绕过, 请求拦截, 逆向工具