再用 TaoToken 跑 21 组,harness 选择还重要吗
2026/9/18 6:34:16 网站建设 项目流程

1. 21 组复跑前先把 TaoToken Key、Base URL 和 harness 配置分开

如果你正在用 Claude Code、Codex 或 Pi 复跑 7 个模型 × 3 种 harness 的 21 组编码评测,先别改 prompt。先去 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=intro21 获取 Key,再把 Base URL 固定为 https://taotoken.net/api。这样做的原因很直接:这次复跑的核心变量是 harness,而不是供应商入口。如果每个 harness 走不同入口、不同 Key、不同 Base URL,最后看到的成功率差异和成本差异就分不清是 harness 造成的,还是配置漂移造成的。

公开评测里常见的设定是 7 个模型分别跑 Claude Code、Codex、Pi 三种 harness,共 21 个模型-harness 组合。原始结论大致是:harness 选择对成功率影响小,但对成本影响显著。作为二次验证者,我不应该直接把这句话抄一遍,而要把 21 组重新跑成可复现记录:每个组合用同一套任务、同一套成功判定、同一套 Token 统计口径。TaoToken 在这里扮演的是统一模型入口:Key 从官网控制台创建,Base URL 填 https://taotoken.net/api,Claude Code、Codex、Pi 分别按自己的配置文件接入。

先建一个本地目录,把配置、任务和结果分开:

arena-rerun/ configs/ claude-code/ settings.json codex/ config.toml pi/ .env tasks/ task-01/ task-02/ ... runs.csv scripts/ summarize.py

这个目录结构不复杂,但能避免一个常见问题:把 Key 写进仓库。Key 占位符统一用YOUR_API_KEY,真实 Key 放在本机环境变量或本地 settings 文件里。TaoToken 的 Key 创建入口在官网控制台,不要从旧笔记、聊天记录或第三方脚本里复制来源不明的 Key。你可以在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=config21 进入官网后找到控制台入口,再创建自己的 Key。

复跑 21 组时,建议把“模型 ID”和“harness 配置”也拆开记录。模型 ID 是模型侧变量,harness 配置是调用侧变量。谁在消耗 Token?答案不是 harness 本身,而是三种 harness 调用 7 个模型时,模型推理消耗 Token。Harness 决定了每次请求发送多少上下文、是否重试、工具结果回传多少,所以它间接影响成本。把这两层拆开,后面看成本表才不会乱。

2. Claude Code 配置:settings.json 与 ANTHROPIC_* 的最小闭环

Claude Code 的接入重点是settings.jsonANTHROPIC_*环境变量。不要把 Codex 的config.toml混进来,也不要把 OpenAI 风格变量套到 Claude Code。一个最小可复制配置如下,路径可以放在用户级~/.claude/settings.json,也可以放在项目级.claude/settings.json

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID", "ANTHROPIC_SMALL_FAST_MODEL": "YOUR_SMALL_MODEL_ID" } }

如果你更习惯用 shell 环境变量,也可以这样临时验证:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_MODEL_ID" export ANTHROPIC_SMALL_FAST_MODEL="YOUR_SMALL_MODEL_ID"

这里有两个细节容易出错。第一,ANTHROPIC_BASE_URL应填https://taotoken.net/api,不要自己在末尾加/v1,也不要拼成完整对话路径。第二,ANTHROPIC_AUTH_TOKEN用你在 TaoToken 创建的 Key,占位符写YOUR_API_KEY,不要把真实 Key 提交到 Git。Claude Code 启动后,先跑一个很小的本地任务,比如读取一个文件并生成摘要,确认请求确实走了 TaoToken,再开始 21 组复跑。

Claude Code 在 21 组里的特点是工具调用链比较长。它可能多次读取文件、执行本地命令、回传工具结果。成功率通常不会因为换 harness 就大幅波动,但输入 Token 会随着文件读取和工具回传增加。成本记录时,不要只记总 Token,要把输入 Token、输出 Token、重试次数分开。因为 Claude Code 的成本差异往往来自输入侧,而不是输出侧。

如果遇到 401,优先检查ANTHROPIC_AUTH_TOKEN是否被 shell 里旧变量覆盖;如果遇到 404,优先检查ANTHROPIC_BASE_URL是否被写成了带/v1的地址。TaoToken 官网的 Claude Code 文档入口在文末 CTA 中给出,配置前可以先对照官方字段名。

3. Codex 配置:config.toml 不要复用 ANTHROPIC_*

Codex 的配置方式和 Claude Code 完全不同。这里再强调一次:不要把ANTHROPIC_*套到 Codex。Codex 使用config.toml,常见位置是~/.codex/config.toml。一个接入 TaoToken 的示例:

model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"

然后在 shell 里提供 Key:

export TAOTOKEN_API_KEY="YOUR_API_KEY"

如果你的 Codex 版本对wire_api的取值要求不同,以实际报错和模型支持为准,在chatresponses之间切换测试。但不要因为报错就把 Claude Code 的ANTHROPIC_BASE_URL写进 Codex 配置,这不会生效,还会让排障方向跑偏。Codex 的供应商配置核心是model_providerbase_urlenv_key三件事。

在 21 组复跑里,Codex 的成本表现通常和它的工具回传策略有关。它可能把命令输出、diff、错误日志回传给模型,输入 Token 会上升;如果失败后自动重试,成本还会叠加。成功率方面,Codex 对模型本身的依赖更大,harness 更多影响的是“失败后怎么恢复”和“每次请求塞多少上下文”。所以复跑记录里要加一列retry_count,否则你只会看到总成本,看不到成本为什么高。

建议在跑正式任务前,用 Codex 执行一个最小本地命令,例如列出当前目录并解释一个文件。确认config.toml生效后,再跑 21 组。不要把 Codex 指向生产数据库或线上服务,所有命令都在本地或隔离环境执行。

4. Pi 与通用 OpenAI 兼容 harness:只改 Base URL 和 Key 的边界

Pi 的接入方式取决于你使用的版本和 provider 配置。本文不编造未验证的插件名或私有 API,只保留能核实的通用做法:如果该 harness 支持 OpenAI 兼容环境变量,就把 Base URL 指向 TaoToken,Key 用YOUR_API_KEY。示例.env

export OPENAI_BASE_URL="https://taotoken.net/api" export OPENAI_API_KEY="YOUR_API_KEY"

如果 Pi 使用自己的 provider 配置文件,就把 provider 的baseURLhttps://taotoken.net/apiapiKeyYOUR_API_KEY。不要同时设置多个供应商的环境变量,否则很容易出现“以为改了,实际读的是旧变量”的情况。复跑 21 组时,Pi 这一列要额外记录它的上下文策略:是否自动压缩历史、工具输出截断多少、失败重试几次。因为这些策略会直接影响模型推理消耗的 Token。

Pi 在三种 harness 中往往是成本波动最大的一个,原因不是它本身更贵,而是它可能把长文件、长日志或长工具结果注入上下文。成功率上,只要模型能力够用,Pi 和另外两种 harness 的差距通常不会像成本差距那样明显。二次验证时,我会把 Pi 的请求次数、平均输入 Token、平均输出 Token 单独聚合,避免被总成本平均值掩盖。

如果你不确定当前 Pi 版本支持哪种变量,先用最小任务验证:只让它读取一个短文件并返回一句话。成功后再增加工具调用和长上下文任务。不要一上来就跑完整 21 组,否则排障成本会比 Token 成本更高。

5. 复跑 21 组:任务集、成功判定与 Token/成本记录表

要复现“harness 对成功率影响小但显著影响成本”这个结论,任务集必须固定。建议准备 8 到 12 个本地编码任务,覆盖:单文件修改、多文件重构、测试修复、依赖配置、脚本补全、错误日志定位。每个任务保存初始快照,每个模型-harness 组合跑同一套任务,至少重复 3 轮。21 个组合 × 3 轮,可以观察噪声,而不是只看单轮排名。

成功判定不要靠肉眼。可以统一为:

# 在任务目录内由读者本地执行 git diff --check pytest -q npm test -- --runInBand

具体命令按任务技术栈替换。成功条件建议包含:测试退出码为 0、没有新增高危变更、diff 能解释、没有跳过关键测试。失败也要分类:编译失败、测试失败、超时、上下文超限、工具调用错误、模型拒绝。分类后,成功率才有意义。

记录表建议用 CSV:

run_id,model_id,harness,task_id,round,status,input_tokens,output_tokens,cache_read_tokens,retry_count,duration_ms,cost 1,model-a,claude-code,task-01,1,ok,12000,1800,0,0,45000,0.012 2,model-a,codex,task-01,1,ok,9800,1600,0,0,38000,0.009 3,model-a,pi,task-01,1,fail,26000,900,0,2,92000,0.021

成本公式:

cost = input_tokens / 1000000 * input_price + output_tokens / 1000000 * output_price

具体单价以 TaoToken 模型详情或控制台显示为准。你可以在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=cost21 进入官网查看模型与计费信息。不要用旧价格表硬算,否则 21 组复跑的成本结论会失真。

聚合脚本可以这样写:

import csv rows = list(csv.DictReader(open("runs.csv", encoding="utf-8"))) summary = {} for r in rows: key = (r["model_id"], r["harness"]) s = summary.setdefault(key, { "runs": 0, "ok": 0, "input": 0, "output": 0, "retry": 0, "cost": 0.0, }) s["runs"] += 1 s["ok"] += 1 if r["status"] == "ok" else 0 s["input"] += int(r["input_tokens"]) s["output"] += int(r["output_tokens"]) s["retry"] += int(r["retry_count"]) s["cost"] += float(r["cost"]) for key, s in sorted(summary.items()): rate = s["ok"] / s["runs"] avg_input = s["input"] / s["runs"] avg_output = s["output"] / s["runs"] avg_cost = s["cost"] / s["runs"] print(key, rate, avg_input, avg_output, s["retry"], avg_cost)

这个脚本只做本地统计,不连接任何生产库。跑完 21 组后,你会得到按模型和 harness 聚合的成功率、平均输入 Token、平均输出 Token、重试次数和平均成本。

6. 二次验证结论:成功率差异被噪声吃掉,成本差异被上下文放大

复跑后最值得关注的不是“哪个 harness 绝对第一”,而是三个现象。

第一,同一模型换 harness,成功率差异通常小于任务难度带来的差异。简单任务上,Claude Code、Codex、Pi 都可能通过;复杂任务上,失败原因更多是模型推理边界、工具调用格式、上下文丢失,而不是 harness 名字本身。把 21 组混在一起看总成功率,会掩盖任务分层。建议按任务类型再看一遍。

第二,成本差异比成功率差异更稳定。同一个模型在 Claude Code、Codex、Pi 下的平均成本可能明显不同,原因主要是输入 Token 和重试次数。输出 Token 反而差异没那么大,因为最终补丁长度受任务限制。Harness 决定的是“每次请求送多少上下文”和“失败后重试几轮”,这两个变量直接放大成本。

第三,缓存和重复运行会影响结论。如果你不随机化任务顺序、不清空会话、不记录缓存命中,第二轮可能因为缓存而变便宜,第三轮又因为上下文累积而变贵。21 组复跑如果要作为成本基线,至少要记录cache_read_tokensretry_count

可以用一个聚合模板来看:

harness成功次数/总次数成功率平均输入 Token平均输出 Token平均重试平均成本
Claude Code填入填入填入填入填入填入
Codex填入填入填入填入填入填入
Pi填入填入填入填入填入填入

这张表填完后,结论通常会变成:harness 选择还重要,但它重要在成本控制和失败恢复,而不是直接决定模型能不能做对。对团队来说,这比“哪个 harness 排名第一”更有用。

7. 谁在消耗 Token:三种 harness 的输入膨胀、重试和工具回传

谁在消耗 Token?三种 harness 调用 7 个模型时,模型推理消耗 Token。Harness 本身不按 Token 计费,但它决定了每次发给模型的请求长什么样。一次请求通常包含:系统提示、用户任务、工具定义、历史消息、文件内容、命令输出、错误日志、当前补丁、模型输出。这里面除了模型输出,其余大部分都会作为输入 Token 进入计费。

Claude Code 的典型开销是工具链长。它可能多次读取文件、执行命令、回传结果,再让模型继续推理。输入 Token 会随文件读取次数上升。如果它支持历史压缩,成本会被压下来;如果压缩不充分,长会话会持续膨胀。

Codex 的典型开销在命令回传和重试。config.toml把 provider 固定后,模型选择更清晰,但如果失败重试策略激进,成本会叠加。尤其是测试失败后,它可能把完整日志再次注入,输入 Token 会明显增加。

Pi 的典型开销取决于实现。如果它把大文件、长日志或完整工具结果放入上下文,成本会快速上升。成功率不一定变差,但成本表会很难看。复跑时要专门看 Pi 的平均输入 Token,而不是只看总成本。

降低 Token 消耗的通用方法:

  • 限制单次读取文件大小,优先用搜索定位再读片段。
  • 工具输出超过阈值就截断,只保留错误行和上下文。
  • 失败重试设置上限,避免无限循环。
  • 对长历史做摘要,不要每次全量回传。
  • 小任务用小模型做预处理,大模型只做最终推理。
  • 记录retry_count,重试是隐藏成本大户。

这些方法不改变 harness 的成功率上限,但会改变成本曲线。二次验证的价值就在这里:你能看到同一模型在不同 harness 下的成本差异,也能看到差异来自哪一类请求。

8. CC Switch 三件套与排障清单:401、404、上下文超限怎么查

如果你同时使用 Claude Code、Codex 和其他 CLI,建议用 CC Switch 的思路管理配置。这里说的三件套是:

  1. 供应商配置:Base URL 固定为https://taotoken.net/api,Key 使用YOUR_API_KEY
  2. 模型映射:把 Claude Code 的默认模型、小模型映射到 TaoToken 可用模型 ID;Codex 在config.toml里单独写modelmodel_provider
  3. 环境注入:确认 shell、settings.jsonconfig.toml之间没有互相覆盖,切换后重启 CLI。

不要把这些配置混在一起。Claude Code 用ANTHROPIC_*,Codex 用config.tomlTAOTOKEN_API_KEY,Pi 按它自己的 provider 配置读取。混用的结果是 401 和 404 反复出现。

排障清单可以按下面顺序查:

# 1. 检查 Claude Code 相关变量 env | grep ANTHROPIC # 2. 检查 Codex 相关变量 env | grep TAOTOKEN # 3. 检查是否有多余的 BASE_URL env | grep -E "OPENAI|BASE_URL|API_KEY"

常见问题:

401 Unauthorized:Key 错误、Key 被旧变量覆盖、请求没有带认证头、Key 已被删除。重新从 TaoToken 控制台创建 Key,并确认本地变量已刷新。

404 Not Found:Base URL 写成了带/v1或完整路径的地址。Claude Code 和 Codex 都应先尝试https://taotoken.net/api。如果工具要求 OpenAI 兼容路径,按工具文档处理,不要自己拼接。

模型不存在:YOUR_MODEL_ID与 TaoToken 当前可用模型不一致。去模型对话或控制台确认模型 ID,不要在配置里写猜测值。

上下文超限:harness 没有压缩历史,或工具回传太长。减少文件读取、截断日志、开启摘要。复跑 21 组时,这类失败要单独标记,不要算成模型能力失败。

Codex 报 wire API 不匹配:不要用ANTHROPIC_*,回到config.toml调整wire_api,并确认模型支持对应协议。

成本突然升高:先看输入 Token 和重试次数,再看模型单价。多数情况下是输入膨胀,不是输出变长。

9. 把 21 组复跑固化成基线:文末 CTA 与执行顺序

再用 TaoToken 跑 21 组之后,我的结论是:harness 选择仍然重要,但它重要在成本、重试和上下文管理,而不是直接决定成功率排名。对于团队,最实用的做法不是争论哪个 harness 最强,而是把 21 组复跑固化成自己的成本基线:同一任务集、同一成功判定、同一 Token 统计口径,按模型和 harness 聚合。

执行顺序建议如下。第一步,先到模型对话确认当前可用模型和模型 ID,避免配置里写错模型名:

https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=cta_chat21

第二步,如果你准备长期跑多轮评测,先看 Coding Plan,评估调用量和成本:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=cta_plan21

第三步,创建并管理 API Key,把 Key 占位符替换为YOUR_API_KEY,不要写进仓库:

https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=cta_keys21

第四步,如果你主要用 Claude Code 复跑,对照 Claude Code 文档检查settings.jsonANTHROPIC_*字段:

https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=cta_doc21

最后,所有配置都指向同一个 Base URL:https://taotoken.net/api。Claude Code 用settings.jsonANTHROPIC_*,Codex 用config.toml,Pi 按自身 provider 配置读取。跑完 21 组后,把成功率、输入 Token、输出 Token、重试次数和成本写进同一张表。这样你得到的不是一条转述结论,而是一套能继续复跑的本地基线。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询