能力相近智能体难分?GAUGE 双盲复评用 TaoToken 📅 发布时间:2026/9/18 6:45:52 👁 浏览次数: 1. GAUGE 双盲复评的真正盲区相近能力智能体为什么难分GAUGE 论文把“LLM 模拟用户 LLM judge”这条评估关卡推到台前当两个任务型智能体能力接近时单轮满意度或单次 judge 偏好很容易把胜负判偏。站在评测架构师视角问题通常不在“judge 模型不够强”而在评测闭环没有把双盲、随机顺序、任务成功核验、奖励回放和 Token 成本放在同一张表里。满意度不等于任务完成度相近能力配对的误选率又明显高于强弱分明的配对这意味着你如果只跑一次 A/B 对比结论大概率不可复现。更实际的切入点是配置入口。很多团队在写 judge prompt 时很认真却在 Key、Base URL、并发、超时和成本口径上随手填导致 401、404、429、JSON 截断混在一起最后把接口问题误判成模型偏好。建议在做双盲复评前先到 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_llm_judge_open创建 Key并把所有 Claude Code、Codex、评测脚本的 Base URL 统一为https://taotoken.net/api。这样 judge、模拟用户、被评智能体走同一套接入口径后续换模型、算成本、复跑配对时不会因为供应商配置漂移而污染结果。本文按“评测架构师”视角拆一套可复现流程先接 TaoToken再配 Claude Code / Codex / CC Switch然后设计相近能力配对评测表最后把 Token 成本核算和排障清单固定下来。目标不是复述 GAUGE 的结论而是让你本地能跑出一张“配对选择 任务成功 满意度 奖励 Token 成本”的复评表。2. 评测架构师的 TaoToken 接入清单Key、Base URL 与 judge 调用双盲复评里至少有三类调用被评智能体、LLM 模拟用户、LLM judge。三类调用可以走同一个 TaoToken Key但建议在日志里打上roleagent、roleuser_sim、rolejudge否则成本表会混。拿 Key 的位置在 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_llm_judge_key 。拿到后不要写进代码仓库统一放环境变量。Base URL 按产品配置填写export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYYOUR_API_KEY如果你用 OpenAI 兼容客户端做本地 judge可以这样初始化。注意这里的 Base URL 不加 UTMUTM 只用于官网入口和 deep link 归因。import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) def judge_pair(task, transcript_a, transcript_b): prompt f 你是双盲评测 judge。只根据任务是否完成、事实正确性、约束满足度评分。 不要猜测哪个智能体来自哪个厂商。 任务{task} 回复 A{transcript_a} 回复 B{transcript_b} 返回 JSON{{winner:A或B或tie,reward_a:0-1,reward_b:0-1,reason:一句话}} resp client.chat.completions.create( modelos.environ.get(TAOTOKEN_JUDGE_MODEL, YOUR_JUDGE_MODEL), messages[{role: user, content: prompt}], temperature0, response_format{type: json_object}, ) return resp.choices[0].message.content如果客户端或框架自动追加路径导致 404先检查你传入的 Base URL 是否就是https://taotoken.net/api不要把官网 UTM 链接误填进 SDK。评测脚本里还要固定随机种子并把 A/B 顺序随机化。judge 看到的只能是“回复 A / 回复 B”不能看到模型名、供应商名、历史胜率。模拟用户也建议走 TaoToken但要用独立 prompt 和独立温度。模拟用户负责给任务、追问、判断是否完成但不能兼任 judge。judge 只看最终 transcript 和任务约束避免模拟用户的满意度直接灌进最终奖励。论文提醒的核心风险正在这里用户说“满意”不代表任务真的完成judge 说“更好”也不代表奖励更高的一方被选中。把角色拆开问题才会暴露在表里。3. Claude Code、Codex、CC Switch 的可复制配置评测环境常和编码环境混用所以先给一份可复制配置。原则只有一条Claude Code 用ANTHROPIC_*Codex 用config.toml不要把ANTHROPIC_*套到 Codex。3.1 Claude Codesettings.json 与 ANTHROPIC_*Claude Code 的settings.json可以这样写。YOUR_MODEL按你在 TaoToken 控制台选择的模型名填写YOUR_API_KEY用真实 Key。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL } }如果你更习惯 shell也可以临时导出export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_MODEL配置后先跑一个最小请求确认 Claude Code 能正常对话。不要在同一终端里同时导出旧供应商的ANTHROPIC_BASE_URL否则会出现在 A 终端正常、B 终端 401 的假故障。3.2 Codexconfig.tomlCodex 不使用ANTHROPIC_*。它的供应商配置放在config.tomlBase URL 同样填https://taotoken.net/apiKey 通过环境变量读取。model YOUR_MODEL 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_KEY如果你的 Codex 版本使用不同的 provider 字段以本地codex --help或实际配置文档为准但不要改成ANTHROPIC_AUTH_TOKEN。两个工具的鉴权头不同混填是最常见的 401 来源。3.3 CC Switch 三件套供应商名、Base URL、API Key用 CC Switch 做多供应商切换时新增 TaoToken 条目重点核对三件套字段建议值供应商名称TaoTokenBase URLhttps://taotoken.net/apiAPI KeyYOUR_API_KEY模型名YOUR_MODEL三件套确认后再切换 Claude Code 或 Codex 的当前配置。切换完成后分别跑一次Claude Code最小对话和Codex最小请求确认两个客户端没有互相串配置。TaoToken 官网入口也可用于核对 Key 与模型https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_llm_judge_config 。4. 相近能力配对评测表任务、双盲协议与奖励错选率GAUGE 式复评的关键不是“多跑几个 prompt”而是把相近能力配对单独拿出来。强弱分明的配对通常 judge 一眼能分参考价值有限能力相近的配对才会暴露 judge 的位置偏差、冗长偏好、格式偏好和过度自信。你要产出的不是一个总分而是一张可回溯的配对表。4.1 任务集最小结构建议先选 30 到 50 个任务型任务覆盖以下类别类别示例目标核验点信息检索找约束条件并总结是否包含全部约束多步操作按顺序完成步骤步骤顺序与结果工具调用调用本地脚本或 API参数与返回码约束满足在字数、格式、预算内完成硬约束是否满足澄清追问信息不足时先问再答是否避免瞎猜拒答边界超范围请求应拒绝是否给出替代方案每个任务要有task_id、task_prompt、success_criteria、hard_constraints。success_criteria 用可判定规则写例如“必须包含三个价格区间且不能出现未来源引用”。不要让 judge 自由心证。4.2 双盲协议双盲复评至少做四件事被评智能体匿名成agent_x、agent_y。每次配对随机交换 A/B 位置记录blind_order。judge prompt 不出现模型名、供应商名、版本号。同一配对跑多次或换 judge 模型复评记录一致性。推荐字段如下字段含义pair_id配对 IDtask_id任务 IDagent_left匿名左侧智能体agent_right匿名右侧智能体blind_order实际 A/B 顺序judge_choiceA / B / tiereward_a左侧奖励reward_b右侧奖励selected_reward被 judge 选中一方的奖励lower_reward_selected是否选中奖励更低方task_success任务是否完成user_sat模拟用户满意度input_tokens输入 Tokenoutput_tokens输出 Tokenest_cost估算成本核心指标不是“谁赢了多少次”而是相近能力配对中lower_reward_selected的比例交换 A/B 后 judge 选择是否翻转满意度高但task_successfalse的比例每个任务的平均 Token 成本judge 理由中是否频繁出现“更详细”“更长”“语气更好”等与任务成功弱相关的词。论文给出的现象是满意度与任务成功会错位相近能力配对中 judge 选出更低奖励一方的概率远高于差距大的配对。你不必把具体数字写进结论但必须在自己的任务集上复现趋势。如果趋势没出现先检查任务是否太简单、奖励函数是否太粗、judge 是否看到了不该看的信息。4.3 本地运行脚本骨架下面脚本只做骨架Key 和 Base URL 从环境变量读命令由你在本地执行。import os import json import random import hashlib from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlos.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api), ) def run_agent(agent_id, task): resp client.chat.completions.create( modelagent_id, messages[{role: user, content: task}], temperature0.2, ) return resp.choices[0].message.content def blind_judge(task, left, right): seed int(hashlib.md5(task.encode()).hexdigest(), 16) % 10000 rng random.Random(seed) order [A, B] rng.shuffle(order) mapping {A: left, B: right} if order [A, B] else {A: right, B: left} prompt f任务{task}\n回复A{mapping[A]}\n回复B{mapping[B]}\n只返回JSONwinner, reward_a, reward_b, reason resp client.chat.completions.create( modelos.environ.get(TAOTOKEN_JUDGE_MODEL, YOUR_JUDGE_MODEL), messages[{role: user, content: prompt}], temperature0, response_format{type: json_object}, ) return order, resp.choices[0].message.content实际跑的时候把每条记录的input_tokens和output_tokens从响应 usage 里取出来。如果 SDK 不返回 usage就在网关日志或控制台账单里对账。不要把 Token 估算只写成字符数除以四那只能做初筛不能进成本表。5. 本地运行排障401/404/429/JSON 截断与 Token 成本核算双盲复评最常见的故障不是模型能力而是接入层。下面这张排障表建议贴在本地 REPL 旁边。现象优先检查处理401 UnauthorizedKey 是否设置、是否多空格重新导出TAOTOKEN_API_KEY不要写进仓库404 Not FoundBase URL 是否误填官网 UTM 链接工具配置统一填https://taotoken.net/api429 Too Many Requests并发数、RPM、TPM降低并发指数退避记录 retry_after400 Bad Request模型名、消息格式、response_format先用最小 messages 跑通JSON 解析失败输出被截断、max_tokens 太小增大 max_tokens要求只输出 JSON上下文超限transcript 太长截断历史保留任务与最终回复成本异常judge 重复调用、重试无上限每任务设预算上限记录 usage结果不可复现温度、种子、A/B 顺序未固定固定 seed保存 blind_orderToken 成本核算建议用统一公式est_cost input_tokens / 1_000_000 * input_price_per_million output_tokens / 1_000_000 * output_price_per_millioninput_price_per_million和output_price_per_million不要硬编码到评测脚本。把单价放到环境变量或本地配置文件价格口径以 TaoToken 控制台和账单页为准。TaoToken 官网可作为入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_llm_judge_cost 。如果要跑相近能力配对建议给每个 pair 设三个成本字段成本字段来源agent_cost被评智能体调用user_sim_cost模拟用户调用judge_costjudge 与复评调用total_cost三者相加cost_per_successtotal_cost / 成功任务数很多团队只看 agent_cost忽略 user_sim 和 judge最后发现复评成本比被评成本还高。双盲复评本来就要多轮成本表必须一开始就设计进去否则跑到一半会不敢复评。6. 可复现产出配对评价表、Token 成本表与结论模板你最终要交付的不是一段聊天记录而是可复现文件。建议本地目录如下gauge_replay/ tasks.jsonl agents/ agent_x.jsonl agent_y.jsonl pairs/ pair_results.jsonl reports/ pairwise_table.md token_cost.md conclusion.md6.1 相近能力配对评测表| pair_id | task_id | agent_left | agent_right | blind_order | judge_choice | reward_left | reward_right | selected_reward | lower_reward_selected | task_success | user_sat | total_tokens | est_cost | |---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| | p001 | t013 | agent_x | agent_y | Aleft | A | 0.82 | 0.79 | 0.82 | false | true | true | 18342 | COST_001 | | p002 | t014 | agent_y | agent_x | Aright | B | 0.71 | 0.88 | 0.88 | false | true | false | 22109 | COST_002 | | p003 | t015 | agent_x | agent_y | Aleft | B | 0.90 | 0.86 | 0.86 | true | false | true | 19776 | COST_003 |表里最重要的是lower_reward_selected和task_success。满意度列只做辅助不能替代成功判定。est_cost可以写实际金额也可以写成本 ID再在token_cost.md里展开。6.2 Token 成本表| 阶段 | 模型角色 | 调用次数 | input_tokens | output_tokens | 单价口径 | 估算成本 | |---|---|---:|---:|---:|---|---:| | 被评智能体 | agent | 96 | 512340 | 188220 | 本地配置 | COST_A | | 模拟用户 | user_sim | 96 | 201450 | 96200 | 本地配置 | COST_U | | LLM judge | judge | 192 | 388760 | 51240 | 本地配置 | COST_J | | 合计 | - | 384 | 1102550 | 335660 | - | COST_TOTAL |单价口径要写清楚是输入/输出分别计价还是按模型统一计价是否包含重试是否包含失败请求。TaoToken 控制台的账单页更适合做最终对账本地表用于趋势和预算控制。6.3 结论模板## 复评结论 - 任务集30-50 个任务型样本覆盖检索、多步、工具、约束、澄清、拒答。 - 双盲协议A/B 匿名、顺序随机、judge 不看模型名、温度固定。 - 相近能力配对judge 选中奖励更低方的比例是否显著高于强弱配对。 - 满意度错位user_sat 高但 task_successfalse 的样本有哪些。 - 成本每个成功任务的平均 Token 成本judge 成本占比。 - 建议是否换 judge、是否增加复评轮次、是否收紧奖励函数、是否拆分模拟用户与 judge。如果结论里只有“A 比 B 好”没有配对表、成本表和失败样本就还没有达到可复现标准。7. 从模型对话到 Coding Plan把 TaoToken 接入复评工作流双盲复评不是一次性实验。你至少要把它变成可重复的三步第一步在 TaoToken 模型对话里先确认目标模型可用做最小请求避免把模型名问题带进评测脚本。入口https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_chat_deep 。第二步如果评测脚本、Claude Code、Codex 需要长期跑考虑 Coding Plan把并发、成本和模型选择放到固定计划里。入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_plan_deep 。第三步创建或管理 API Keys给 judge、user_sim、agent 分别打标签方便账单对账。入口https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_keys_deep 。如果你还要把评测环境接到 Claude Code参考 Claude Code 文档重点核对ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。入口https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentgauge_claude_code_deep 。最后记住本文的最短路径在双盲复评调用 LLM judge 前到 TaoToken 官网获取 KeyBase URL 填https://taotoken.net/api用 Claude Code 的settings.json/ANTHROPIC_*、Codex 的config.toml、CC Switch 三件套分别配好然后跑相近能力配对评测表把lower_reward_selected、task_success、user_sat、est_cost四列一次拉齐。这样你得到的才不是一句“哪个智能体更好”而是一张能复跑、能对账、能解释为什么相近能力智能体难分的评测底稿。