ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Vending-Bench 2 跑 GPT-6 Astra,Key 走 TaoToken 能复现 Agent 评测吗?

2026/9/17 21:05:31 拓冰建站 浏览量
Vending-Bench 2 跑 GPT-6 Astra,Key 走 TaoToken 能复现 Agent 评测吗? 1. 从 Vending-Bench 2 的第一次 401 说起Key 与 Base URL 怎么切在 TaoToken 官网 创建 Key 之后把客户端 Base URL 设为https://taotoken.net/api再去跑 Vending-Bench 2能少踩很多坑。上周把 Andon Labs 的评测脚本拉到本地第一次 tool call 就返回 401原因不是 Key 无效而是 harness 里写死的 endpoint 没被环境变量覆盖换模型时只改了 model 名base_url 还指着旧地址鉴权自然对不上。社区里关于 GPT-6 Astra 与 Claude Fable 5.1 在两个 Agent 基准上的对照讨论很多但真正卡住复现的是调用层配置和 token 口径能否对齐而不是 benchmark 的 task 定义。要核对原评测结论第一步不是改 prompt而是把所有模型调用收敛到同一套 Key 与 Base URL。这样两个模型走同一计费与日志通道后续比较 prompt tokens、completion tokens 时不会因为供应商字段缺失而出现空值。先在 TaoToken 控制台创建 API Key然后按下面方式注入环境变量。# .env.eval export OPENAI_API_KEYYOUR_API_KEY export OPENAI_BASE_URLhttps://taotoken.net/api export EVAL_MODEL_Agpt-6-astra export EVAL_MODEL_Bclaude-fable-5.1注意两点第一模型 ID 以 TaoToken 控制台或模型列表实际显示为准不要照搬社区截图第二OpenAI 兼容协议与 Anthropic 兼容协议不要混用Claude Code 走ANTHROPIC_*Codex 走config.toml自写 harness 走 OpenAI SDK 时只认OPENAI_BASE_URL与OPENAI_API_KEY。Vending-Bench 2 的 harness 通常是一个长程 agent loop模型收到任务后生成 tool call环境执行后返回 observation循环直到结束或达到步数上限。Drone-Bench 也是类似结构但工具 schema 和状态空间不同。复现时不要只跑一次至少固定temperature0与相同max_tokens每个模型跑 20 次以上再比较平均 token 与得分。2. 把模型调用包一层保证每次请求都记录 usage很多开源 harness 在 tool call 分支里直接调 SDK没有统一记录 usage最后只能看到总分看不到 token 消耗。复现 Agent 评测时token 对照表比总分更重要因为长程任务里 completion tokens 会随步数放大不同模型差距可能来自输出长度而非决策质量。下面这个 wrapper 可以直接放进 Vending-Bench 2 与 Drone-Bench 的调用点。它只做三件事发请求、写 jsonl、返回原始 response。不要改动 harness 的业务逻辑只把client.chat.completions.create替换成call_model。# eval_usage.py import os import json import time from openai import OpenAI client OpenAI( api_keyos.environ[OPENAI_API_KEY], base_urlos.environ[OPENAI_BASE_URL], ) def call_model(model: str, messages: list, toolsNone, tag: str ): start time.time() resp client.chat.completions.create( modelmodel, messagesmessages, toolstools or [], temperature0, max_tokens4096, streamFalse, ) usage resp.usage record { ts: round(time.time(), 3), elapsed: round(time.time() - start, 3), tag: tag, model: model, prompt_tokens: usage.prompt_tokens if usage else None, completion_tokens: usage.completion_tokens if usage else None, total_tokens: usage.total_tokens if usage else None, finish_reason: resp.choices[0].finish_reason, } with open(usage.jsonl, a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n) return resp如果 harness 必须用流式记得加stream_options{include_usage: True}否则最后一个 chunk 的 usage 可能为空。非流式最省事也方便对齐原评测的 max_tokens 设置。运行命令可以写成set -a source .env.eval set a python run_vending_bench.py \ --model $EVAL_MODEL_A \ --runs 20 \ --out results/vending/astra python run_vending_bench.py \ --model $EVAL_MODEL_B \ --runs 20 \ --out results/vending/fableDrone-Bench 同理只改--out与 benchmark 入口python run_drone_bench.py \ --model $EVAL_MODEL_A \ --runs 20 \ --out results/drone/astra python run_drone_bench.py \ --model $EVAL_MODEL_B \ --runs 20 \ --out results/drone/fable注意--runs要一致随机种子要固定否则 token 对照表没有意义。3. Claude Code、Codex 与 CC Switch 三件套的配置拆分复现评测之外日常调试 prompt 时很多人会直接用 Claude Code 或 Codex 打开 harness 工程。这两类工具的配置入口完全不同不能把ANTHROPIC_*套到 Codex 上。Claude Code 使用settings.json环境变量以ANTHROPIC_开头{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: claude-fable-5.1 } }如果你的 Claude Code 版本读取的是项目级.claude/settings.json把上面内容放进去如果是全局配置放在用户目录对应位置。改完后重启终端用/status确认 base URL 已生效。Codex 使用config.toml不要写ANTHROPIC_*model gpt-6-astra model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat对应环境变量export TAOTOKEN_API_KEYYOUR_API_KEYCC Switch 三件套可以理解为三份配置的切换集合Claude Code 的settings.json、Codex 的config.toml、以及你自己 harness 用的.env。在 CC Switch 里维护三份 profile每份只改base_url、env_key和默认模型不要把 Claude Code 的 token 字段复制到 Codex。需要新建 Key 或核对额度时回到 TaoToken 官网 的控制台操作。4. GPT-6 Astra 与 Claude Fable 5.1 的 Token 对照表怎么产出跑完两轮 benchmark 后usage.jsonl里会有每次模型调用的明细。用下面的脚本按模型和 benchmark 聚合生成对照表底稿。注意这里不预设任何分数或倍数只做统计结论留给读者用原始评测口径核对。# aggregate_usage.py import json import argparse from collections import defaultdict def load(path): rows [] with open(path, r, encodingutf-8) as f: for line in f: line line.strip() if line: rows.append(json.loads(line)) return rows def main(): parser argparse.ArgumentParser() parser.add_argument(--file, defaultusage.jsonl) args parser.parse_args() agg defaultdict(lambda: {calls: 0, prompt: 0, completion: 0, total: 0}) for r in load(args.file): key (r[model], r.get(tag, )) agg[key][calls] 1 agg[key][prompt] r.get(prompt_tokens) or 0 agg[key][completion] r.get(completion_tokens) or 0 agg[key][total] r.get(total_tokens) or 0 print(model,benchmark,calls,avg_prompt,avg_completion,avg_total) for (model, tag), v in sorted(agg.items()): calls v[calls] or 1 print( f{model},{tag},{v[calls]}, f{v[prompt]/calls:.1f}, f{v[completion]/calls:.1f}, f{v[total]/calls:.1f} ) if __name__ __main__: main()把两个模型的 jsonl 合并后运行python aggregate_usage.py --file usage.jsonl token_compare.csv得到的 CSV 可以整理成 Markdown 对照表。下面给出模板数值需要你自己跑出来后填入不要抄社区流传的未核实数字模型基准运行次数平均 prompt tokens平均 completion tokens总 tokens平均工具调用步数得分GPT-6 AstraVending-Bench 220填写填写填写填写填写Claude Fable 5.1Vending-Bench 220填写填写填写填写填写GPT-6 AstraDrone-Bench20填写填写填写填写填写Claude Fable 5.1Drone-Bench20填写填写填写填写填写对照时至少检查三件事同一 benchmark 的 max_tokens 是否一致温度与随机种子是否固定harness 版本是否相同。如果某一边 usage 字段大量为空先修 wrapper不要直接比较总分。需要长期跑评测或把 harness 挂到 CI 里可以看 TaoToken 官网 的额度与计划说明避免中途因配额中断导致运行次数不一致。5. 常见报错与排查清单Vending-Bench 2 和 Drone-Bench 的长程特性会放大配置问题下面这些报错在复现时出现频率最高。现象可能原因处理方式401 UnauthorizedKey 未导出、Key 与 base_url 不匹配重新source .env.eval确认OPENAI_API_KEY与https://taotoken.net/api同时生效404 model_not_found模型 ID 写错或该模型未在账号下开放去控制台模型列表核对不要硬编码社区截图里的 ID400 context_length_exceededVending-Bench 2 长程上下文累积在 harness 里加截断或摘要并记录被截断的 token 数usage 为 null流式模式未开 include_usage改用非流式或加stream_options{include_usage: True}429 rate limit并发过高降低并发或分批次跑记录每次运行的开始结束时间结果波动大温度、种子、max_tokens 不一致固定参数统一运行次数先跑通再比较排查顺序建议先确认 base_url 与 Key再确认模型 ID最后才看 context 与并发。不要一上来就怀疑 benchmark 实现。6. 复现结论前必须固定的四个变量原评测给出的对照结论有参考价值但本地复现时要控制变量否则 token 对照表会失真。第一模型版本。GPT-6 Astra 与 Claude Fable 5.1 的具体快照以 TaoToken 控制台为准如果平台侧模型更新旧结果不可直接对比。第二运行次数。Vending-Bench 2 的单次结果方差可能较大建议每个模型至少 20 次取平均后再比较 token 与得分。第三工具调用上限。两个 benchmark 都要设置相同的最大步数否则一个模型因为提前终止而 completion tokens 偏低会被误读为“更省 token”。第四日志口径。prompt tokens 是否包含 tool 返回的 observation、completion tokens 是否包含 tool call 的 JSON这些要在 wrapper 里统一。建议在 jsonl 里额外记录step_index方便按步数聚合。7. 把复现流程固化成一键脚本为了避免每次手动改环境变量可以把配置与运行命令写进 Makefile 或 shell 脚本。下面是一个最小示例Key 仍然用占位符不要提交到 Git。#!/usr/bin/env bash set -euo pipefail export OPENAI_API_KEY${TAOTOKEN_API_KEY:-YOUR_API_KEY} export OPENAI_BASE_URLhttps://taotoken.net/api MODEL_Agpt-6-astra MODEL_Bclaude-fable-5.1 RUNS20 rm -f usage.jsonl python run_vending_bench.py --model $MODEL_A --runs $RUNS --out results/vending/astra python run_vending_bench.py --model $MODEL_B --runs $RUNS --out results/vending/fable python run_drone_bench.py --model $MODEL_A --runs $RUNS --out results/drone/astra python run_drone_bench.py --model $MODEL_B --runs $RUNS --out results/drone/fable python aggregate_usage.py --file usage.jsonl token_compare.csv运行前把YOUR_API_KEY换成真实 Key或者提前export TAOTOKEN_API_KEY。脚本里不要写死 Key也不要输出到日志。usage.jsonl建议按日期分目录保存方便回溯。8. 结论能复现的关键不是模型而是计费口径Vending-Bench 2 与 Drone-Bench 这类 Agent 基准复现难点通常不在任务本身而在调用层是否统一。Key 走 TaoToken、Base URL 统一为https://taotoken.net/api之后两个模型可以共用同一套日志与 token 统计才能把原评测的对照结论拆成可核对的 prompt tokens、completion tokens 与步数。不要直接引用未核实的倍数或排名先把自己的对照表跑出来再与原始结论逐项对齐。9. 继续深入与资源入口想先看模型列表再决定跑哪个基准可以去 模型对话 试一轮要把评测 harness 长期挂在 CI 或日常调试环境里Coding Plan 更适合持续消耗Key 在 API Keys 创建Claude Code 的settings.json细节和ANTHROPIC_*变量说明看 Claude Code 文档。