 A/B 測(cè)試:用 Comparator Agents 驗(yàn)證你的技能是否過期)
1. 技能為什么會(huì)悄悄過期從 Landing Page 技能說起你手里可能已經(jīng)攢了十幾個(gè) Skill寫的時(shí)候都挺好用但最近總覺得輸出質(zhì)量在往下掉。問題往往不在模型而在技能本身已經(jīng)過期了。Claude Skills 2.0 引入的技能基準(zhǔn) A/B 測(cè)試就是專門用來(lái)發(fā)現(xiàn)這種悄悄失效的機(jī)制。它通過 Comparator Agents 同時(shí)跑兩個(gè)版本讓評(píng)判代理在不知道哪個(gè)是哪個(gè)的前提下給出結(jié)論從而消除確認(rèn)偏見。這套方法適合已經(jīng)積累多個(gè) Skill、并且經(jīng)歷過至少一次模型大版本更新的開發(fā)者。我拿一個(gè)真實(shí)場(chǎng)景舉例。三個(gè)月前你寫了一個(gè)幫 Claude 寫 Landing Page 的技能里面詳細(xì)規(guī)定了標(biāo)題層級(jí)、CTA 按鈕位置、配色對(duì)比度檢查步驟。當(dāng)時(shí)模型確實(shí)不擅長(zhǎng)這些你的技能讓它表現(xiàn)明顯變好。然后 Anthropic 發(fā)布了一個(gè)新模型這個(gè)新模型本身對(duì) Landing Page 的結(jié)構(gòu)理解已經(jīng)很強(qiáng)甚至不加載技能時(shí)輸出的排版比你的技能指導(dǎo)下的還要干凈。但你的舊技能還在那兒固執(zhí)地告訴 Claude按我說的步驟來(lái)結(jié)果就是模型被你的技能拖累而不是被幫助。這種情況最麻煩的地方在于技能沒有報(bào)錯(cuò)沒有崩潰它只是讓你的輸出變差了。你打開對(duì)話看到結(jié)果好像還行但跟三個(gè)月前比細(xì)節(jié)質(zhì)量在下降。這就是 AI 時(shí)代的技術(shù)債務(wù)——技能也會(huì)過期而且你往往后知后覺。要理解技能為什么會(huì)過期得先分清兩種類型。第一種是 Capability uplift能力提升型這類技能教 AI 做它本來(lái)做不好的事。隨著模型能力變強(qiáng)這些技能可能變得多余。關(guān)鍵信號(hào)是如果基礎(chǔ)模型不加載技能就能通過你的 eval 測(cè)試說明模型的默認(rèn)能力已經(jīng)吸收了你的技能技巧這時(shí)候技能不是壞了而是可以退休了。第二種是 Encoded preference偏好編碼型這類技能記錄的是流程——模型已經(jīng)會(huì)做每一步但需要按你團(tuán)隊(duì)的方式串聯(lián)起來(lái)。這類技能更持久但也有風(fēng)險(xiǎn)流程變了技能沒跟上也等于失效。無(wú)論是哪種類型核心問題都是你需要一個(gè)機(jī)制來(lái)發(fā)現(xiàn)技能何時(shí)失效。憑感覺運(yùn)行一次有改善就開心沒改善就困惑這種做法有致命問題人類有確認(rèn)偏見我們傾向于看到我們想看到的結(jié)果。Comparator Agents 的做法完全不同它同時(shí)運(yùn)行技能 A 和技能 B或者技能加載和不加載兩個(gè)版本評(píng)判代理不知道哪個(gè)版本是哪個(gè)所以不存在先入為主最后輸出一個(gè)清晰結(jié)論哪個(gè)版本更好好多少。這就像在產(chǎn)品經(jīng)理的世界里做 A/B 測(cè)試數(shù)據(jù)說話消除偏見。2. TaoToken 前置把 Comparator Agents 跑起來(lái)需要什么Comparator Agents 本身是 Claude Skills 2.0 里的評(píng)測(cè)機(jī)制但它需要調(diào)用模型來(lái)生成兩個(gè)版本的輸出再讓評(píng)判代理做對(duì)比。這意味著你需要一個(gè)穩(wěn)定的 API 入口來(lái)承載這些請(qǐng)求。TaoToken 在這里的角色是提供統(tǒng)一的模型調(diào)用通道讓你在跑技能基準(zhǔn) A/B 測(cè)試時(shí)不用來(lái)回切換多個(gè)平臺(tái)的 Key。先明確你要準(zhǔn)備的三件套Base URL、API Key、Model ID。Base URL 用https://taotoken.net/api注意這個(gè)地址不帶任何查詢參數(shù)。API Key 在控制臺(tái)的 API Keys 頁(yè)面創(chuàng)建建議單獨(dú)建一個(gè)用于評(píng)測(cè)的 Key方便后續(xù)按項(xiàng)目統(tǒng)計(jì)用量。Model ID 根據(jù)你當(dāng)前技能面向的模型來(lái)選比如你測(cè)的是 Claude 系列技能就填對(duì)應(yīng)的模型標(biāo)識(shí)。如果你用的是 Claude Code 或者 Cline 這類工具來(lái)跑評(píng)測(cè)腳本配置方式略有不同。Claude Code 走的是 Anthropic 兼容接口需要在 settings 里指定 Base URL 和 Key。Cline 的 MCP 配置則是通過 JSON 文件注入環(huán)境變量。Codex 的 auth.json 也是類似思路把 Base URL 和 Key 寫進(jìn)認(rèn)證配置。不管哪種方式核心都是讓評(píng)測(cè)腳本能通過 TaoToken 的 API 地址發(fā)請(qǐng)求。這里有個(gè)容易踩的坑很多人把 Base URL 寫成帶/v1或者帶 UTM 參數(shù)的地址結(jié)果請(qǐng)求直接 404。TaoToken 的 API 地址就是https://taotoken.net/api不要自己加后綴。另外評(píng)測(cè)腳本里通常會(huì)并發(fā)發(fā)多個(gè)請(qǐng)求建議在 TaoToken 控制臺(tái)看一下當(dāng)前 Key 的速率限制避免因?yàn)椴l(fā)過高觸發(fā)限流導(dǎo)致評(píng)測(cè)結(jié)果不完整。如果你還沒有自己的 Skill或者想先拿一個(gè)現(xiàn)成的技能來(lái)練手可以先用 Skill Creator 生成一個(gè)基準(zhǔn)技能。Skill Creator 的 benchmark 模式能批量運(yùn)行所有 eval生成一份完整的技能健康報(bào)告。但前提是你要有一個(gè)可調(diào)用的模型入口TaoToken 就是干這個(gè)的。配置好之后你的評(píng)測(cè)腳本、Comparator Agents 的評(píng)判請(qǐng)求、以及 Skill Creator 的批量運(yùn)行都走同一個(gè) API 地址省去反復(fù)切換的麻煩。3. 可復(fù)制配置Comparator Agents 對(duì)比配置與 Skill Creator 基準(zhǔn)用例模板這一節(jié)直接給可復(fù)制的配置片段。先看 Comparator Agents 的對(duì)比配置。假設(shè)你用 Claude Code 來(lái)跑評(píng)測(cè)settings 文件路徑是~/.claude/settings.json內(nèi)容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-taotoken-key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [Bash, Read, Write] } }如果你用的是 Cline 的 MCP 配置路徑在~/.cline/mcp_settings.json寫法是{ mcpServers: { skill-benchmark: { command: npx, args: [-y, anthropic/skill-benchmark-mcp], env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-taotoken-key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } } } }Codex 的 auth.json 路徑在~/.codex/auth.json內(nèi)容如下{ base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key, model: claude-sonnet-4-20250514 }三件套的核心就是 Base URL、Key、Model ID 三處保持一致。Base URL 統(tǒng)一用https://taotoken.net/apiKey 用你在控制臺(tái)創(chuàng)建的那個(gè)Model ID 根據(jù)你實(shí)際要測(cè)的模型填。接下來(lái)是 Skill Creator 的基準(zhǔn)用例模板。Skill Creator 的 benchmark 模式需要一個(gè) eval 文件通常放在技能目錄下的evals/文件夾里。模板結(jié)構(gòu)如下name: landing-page-skill-benchmark version: 1.0.0 skill_path: ./skills/landing-page model: claude-sonnet-4-20250514 comparator: enabled: true judge_model: claude-sonnet-4-20250514 blind: true cases: - id: hero-section input: 為一個(gè) SaaS 產(chǎn)品寫 Landing Page 的 Hero 區(qū)域產(chǎn)品是團(tuán)隊(duì)協(xié)作工具 assertions: - 標(biāo)題包含價(jià)值主張 - 副標(biāo)題說明目標(biāo)用戶 - CTA 按鈕文案明確 - id: feature-grid input: 寫 Landing Page 的功能展示區(qū)三個(gè)核心功能 assertions: - 每個(gè)功能有圖標(biāo)占位說明 - 功能描述不超過兩行 - 有統(tǒng)一的視覺層級(jí) - id: pricing-table input: 寫 Landing Page 的定價(jià)區(qū)三檔價(jià)格 assertions: - 推薦檔位有視覺強(qiáng)調(diào) - 價(jià)格數(shù)字清晰 - 每檔有功能對(duì)比這個(gè)模板里comparator.enabled設(shè)為 true 就會(huì)啟用 Comparator Agentsblind設(shè)為 true 表示評(píng)判代理不知道哪個(gè)版本是技能加載版。cases下面是具體的測(cè)試用例每個(gè)用例有 input 和 assertions。assertions 是評(píng)判代理用來(lái)判斷輸出質(zhì)量的依據(jù)。跑的時(shí)候用 Skill Creator 的命令行skill-creator benchmark --config ./evals/landing-page-benchmark.yaml --output ./reports/運(yùn)行完成后會(huì)在./reports/下生成一份 JSON 報(bào)告里面包含每個(gè)用例的 A/B 對(duì)比結(jié)果、評(píng)判代理的結(jié)論、以及通過率變化趨勢(shì)。報(bào)告里會(huì)明確標(biāo)出哪個(gè)版本更好好多少以及哪些用例出現(xiàn)了技能拖累模型的情況。4. 驗(yàn)證請(qǐng)求與成功結(jié)果跑一次完整的 A/B 對(duì)比配置好之后先做一次最小驗(yàn)證確認(rèn) API 通道是通的。用 curl 發(fā)一個(gè)最簡(jiǎn)單的請(qǐng)求curl -X POST https://taotoken.net/api/v1/messages \ -H Content-Type: application/json \ -H x-api-key: sk-your-taotoken-key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-20250514, max_tokens: 128, messages: [ {role: user, content: 回復(fù) OK 兩個(gè)字母} ] }如果返回的 JSON 里content字段有OK說明 Base URL 和 Key 都正確。如果返回 401檢查 Key 是否復(fù)制完整如果返回 404檢查 Base URL 是否多加了路徑。通道驗(yàn)證通過后跑一次完整的技能基準(zhǔn) A/B 測(cè)試。假設(shè)你的技能目錄是./skills/landing-pageeval 文件是上一節(jié)那個(gè)模板執(zhí)行skill-creator benchmark \ --config ./evals/landing-page-benchmark.yaml \ --output ./reports/ \ --verbose運(yùn)行過程中你會(huì)看到每個(gè)用例依次執(zhí)行兩次一次加載技能一次不加載技能。然后評(píng)判代理對(duì)兩個(gè)輸出做盲評(píng)。整個(gè)過程大概需要幾分鐘取決于用例數(shù)量和模型響應(yīng)速度。成功的結(jié)果長(zhǎng)這樣{ summary: { total_cases: 3, skill_win: 1, baseline_win: 1, tie: 1, skill_avg_score: 7.2, baseline_avg_score: 7.8 }, cases: [ { id: hero-section, winner: baseline, score_diff: -0.8, judge_reason: Baseline 輸出的標(biāo)題更簡(jiǎn)潔CTA 文案更直接技能版引入了不必要的步驟說明 }, { id: feature-grid, winner: skill, score_diff: 1.2, judge_reason: 技能版的功能描述層級(jí)更清晰圖標(biāo)占位說明更完整 }, { id: pricing-table, winner: tie, score_diff: 0.0, judge_reason: 兩個(gè)版本在價(jià)格展示和推薦檔位強(qiáng)調(diào)上表現(xiàn)一致 } ] }這份報(bào)告告訴你hero-section 這個(gè)用例上基礎(chǔ)模型已經(jīng)比你的技能做得更好說明你的技能在這個(gè)環(huán)節(jié)已經(jīng)過期了。feature-grid 上技能仍然有優(yōu)勢(shì)可以保留。pricing-table 打平說明技能沒有拖累也沒有增益可以考慮簡(jiǎn)化。關(guān)注趨勢(shì)比單次分?jǐn)?shù)更重要。如果你連續(xù)幾次模型更新后跑基準(zhǔn)發(fā)現(xiàn) baseline_win 的用例在增加skill_avg_score 在下降那就是技能整體過期的信號(hào)。這時(shí)候需要逐個(gè)用例看 judge_reason定位是哪些步驟在拖累模型。5. 本篇常見錯(cuò)排查401、local proxy failed、reading choices、OAuth跑 Comparator Agents 和 Skill Creator 的過程中最常見的報(bào)錯(cuò)有這幾類。第一類是 401 Unauthorized返回體里通常寫著invalid api key或者authentication failed。原因一般是 Key 復(fù)制時(shí)帶了空格或者用了控制臺(tái)里已經(jīng)刪除的舊 Key。解決方法是重新在 TaoToken 控制臺(tái)創(chuàng)建一個(gè)新 Key粘貼時(shí)注意不要帶首尾空格。如果你用的是 Claude Code檢查~/.claude/settings.json里的ANTHROPIC_API_KEY字段如果是 Cline檢查mcp_settings.json里的env.ANTHROPIC_API_KEY。第二類是local proxy failed或者connection refused。這個(gè)報(bào)錯(cuò)通常出現(xiàn)在你本地配了代理工具但代理沒有啟動(dòng)或者端口不對(duì)。Comparator Agents 的請(qǐng)求走的是你配置的 Base URL如果本地有代理攔截了taotoken.net的請(qǐng)求就會(huì)報(bào)這個(gè)錯(cuò)。解決方法是檢查本地代理設(shè)置確保taotoken.net的請(qǐng)求不被攔截。如果你不確定可以先用 curl 直接測(cè)一下 API 地址是否可達(dá)。第三類是reading choices相關(guān)的報(bào)錯(cuò)通常出現(xiàn)在解析模型返回時(shí)。Comparator Agents 期望模型返回結(jié)構(gòu)化的 JSON但有時(shí)候模型會(huì)返回帶 markdown 代碼塊的 JSON導(dǎo)致解析失敗。解決方法是在 eval 配置里加上response_format: json參數(shù)或者在評(píng)判代理的 prompt 里明確要求只返回 JSON不要包裹代碼塊。如果你用的是 Skill Creator檢查comparator.judge_model是否支持結(jié)構(gòu)化輸出。第四類是 OAuth 相關(guān)的報(bào)錯(cuò)比如oauth token expired或者invalid_grant。這類報(bào)錯(cuò)通常出現(xiàn)在你用 Claude Code 的 OAuth 登錄方式而不是 API Key 方式時(shí)。Comparator Agents 的批量請(qǐng)求建議用 API Key 而不是 OAuth因?yàn)?OAuth token 有有效期批量跑評(píng)測(cè)時(shí)容易中途過期。解決方法是在 Claude Code 里切換到 API Key 模式把ANTHROPIC_API_KEY填成 TaoToken 的 Key而不是依賴 OAuth 登錄。還有一個(gè)容易忽略的坑Model ID 寫錯(cuò)。比如你填了claude-sonnet-4但實(shí)際模型標(biāo)識(shí)是claude-sonnet-4-20250514請(qǐng)求會(huì)返回model not found。解決方法是去 TaoToken 的模型列表頁(yè)面確認(rèn)當(dāng)前可用的 Model ID直接復(fù)制粘貼不要手寫。6. 把技能體檢變成固定動(dòng)作從單次測(cè)試到持續(xù)回歸跑通一次 A/B 測(cè)試之后真正有價(jià)值的是把它變成固定動(dòng)作。建議每次模型大版本更新后跑一次全量技能基準(zhǔn)記錄技能加載和不加載的對(duì)比結(jié)果。判定規(guī)則可以這樣定基礎(chǔ)模型勝出的用例考慮退役對(duì)應(yīng)技能技能險(xiǎn)勝的用例繼續(xù)保留但持續(xù)監(jiān)控技能大比分勝出的用例保持并持續(xù)優(yōu)化。關(guān)注通過率變化趨勢(shì)比單次分?jǐn)?shù)更重要如果連續(xù)兩次更新后技能勝率都在下降那就是整體過期的信號(hào)。工具選擇上Skill Creator 的 benchmark 模式可以批量運(yùn)行所有 eval生成一份完整的技能健康報(bào)告。你可以把這個(gè)命令寫進(jìn) CI 流程每次模型更新后自動(dòng)跑一遍報(bào)告直接發(fā)到團(tuán)隊(duì)頻道。Comparator Agents 的盲評(píng)機(jī)制保證了結(jié)論的客觀性你不需要自己盯著輸出判斷哪個(gè)更好。如果你還沒有自己的 Skill或者想先拿一個(gè)現(xiàn)成的技能來(lái)練手可以先用 Skill Creator 生成一個(gè)基準(zhǔn)技能再跑一次 A/B 測(cè)試感受一下流程。配置過程中如果遇到 API 通道的問題可以直接用 TaoToken 的模型對(duì)話頁(yè)面快速驗(yàn)證 Key 是否可用確認(rèn)通道沒問題后再回到評(píng)測(cè)腳本。對(duì)于需要長(zhǎng)期跑評(píng)測(cè)和 Agent 任務(wù)的場(chǎng)景Coding Plan 提供了更穩(wěn)定的調(diào)用額度適合把技能體檢做成日常動(dòng)作。真正的問題從來(lái)不是能不能寫技能而是寫了之后怎么維護(hù)。你的 AI 工作流不是一次性的項(xiàng)目而是需要持續(xù)維護(hù)的數(shù)字資產(chǎn)。就像代碼需要重構(gòu)技能也需要定期體檢和升級(jí)。在這個(gè)模型能力快速迭代的階段會(huì)維護(hù)技能的人比會(huì)寫技能的人更有價(jià)值。