Przejdź do głównej zawartości

Routing modeli oparty na dowodach, nie na marce

Routing modeli to wersjonowana reguła, która przypisuje każdą klasę pracy agenta (eksplorację, implementację, review, masowe edycje) do modelu i poziomu rozumowania (effort) wybranych przez ewaluacje na własnym repozytorium. Zacznij od domyślnego modelu narzędzia, dostrój poziom rozumowania przed zmianą modelu i zmieniaj trasę tylko wtedy, gdy jakość zaakceptowanych zadań utrzymuje się przy niższym koszcie lub opóźnieniu.

Trzech programistów w twoim zespole używa trzech różnych modeli i nikt nie potrafi powiedzieć, który z nich wyprodukował zeszłotygodniową wadliwą migrację. Jedna osoba po jednej imponującej sesji przełączyła się na najdroższy model do wszystkiego. Inna pracuje na najtańszym i po cichu powtarza nieudane zadania po trzy razy. Ta strona jest dla programisty, który buduje tabelę routingu, oraz dla tech leada, który jest jej właścicielem i zatwierdza każdą zmianę.

Scorecard Q3 · Plan: Jak dobierasz model i środowisko wykonawcze do każdego zadania?

Odpowiedź za maksimum (3 punkty): „Routuję klasy zadań na podstawie wersjonowanych ewaluacji jakości, opóźnienia, błędów i kosztu ukończonej pracy”.

  • Datowaną tabelę routingu w docs/ai/model-routing.md, która dla każdej klasy zadań wskazuje jeden model, poziom rozumowania i fallback.
  • Te same trasy wpisane w konfigurację Claude Code, Codeksa i Cursora, dzięki czemu nikt nie kopiuje nazwy modelu do promptu.
  • Ewaluację przed i po, która uzasadnia każdą trasę odsetkiem zaliczonych zadań, liczbą ponowień, opóźnieniem i kosztem na zaakceptowane zadanie.
  • Cztery prompty do skopiowania: klasyfikacja pracy, uruchomienie kandydata, porównanie wyników i przygotowanie zmiany routingu.
  • Ścieżkę naprawczą na dzień, w którym model zostanie wycofany, przemianowany albo zacznie odmawiać danej klasy zadań.

Aktualne nazwy modeli, ceny i okna kontekstu są w jednym miejscu: w porównaniu modeli AI. Ta strona wymienia modele tylko w datowanym przykładzie, a po liczby odsyła tam.

Dlaczego zacząć od domyślnego modelu i najpierw stroić poziom rozumowania?

Dział zatytułowany „Dlaczego zacząć od domyślnego modelu i najpierw stroić poziom rozumowania?”

Reguła, której trzyma się ten serwis: zacznij od domyślnego modelu narzędzia, dostrój poziom rozumowania przed zmianą modelu i zmieniaj model tylko wtedy, gdy twoje ewaluacje tak mówią. Model domyślny to ten, od którego każdy dostawca każe zaczynać, a poziom rozumowania jest tańszą i odwracalną dźwignią niż zmiana modelu.

Stan na 2026-09-26:

NarzędzieModel domyślnyDomyślny poziom rozumowaniaZastrzeżenie
Claude CodeClaude Opus 5.5mediumOd v2.1.280 w kanale wydań latest. Kanał stable (v2.1.274 na 2026-09-26) nadal startuje na starszych modelach, a sesje w Microsoft Foundry domyślnie używają Claude Sonnet 4.5.
CodexGPT-6 AstralowDomyślny w paczce od CLI 0.153.4 (2026-09-04). Serwer może to nadpisać dla zalogowanych kont.
CursorNiezweryfikowaneNiezweryfikowaneStrona cursor.com była niedostępna 2026-09-26. Sprawdź wybór modelu na własnym koncie i zapisz, co widzisz.

Wynikają z tego dwie rzeczy. Po pierwsze, podnieś poziom rozumowania na modelu domyślnym (w Claude Code z medium na high lub xhigh, w Codeksie z low na medium lub high), zanim zaczniesz oceniać droższy model. Po drugie, zanim porównasz wyniki dwóch osób, sprawdź kanał wydań i dostawcę, bo to samo polecenie może wystartować na różnych modelach.

Routuj według klasy zadania, a nie według osoby czy nastroju. Klasa zasługuje na osobną trasę, gdy jej kryterium sukcesu różni się od pozostałych. Większości repozytoriów wystarczy od czterech do sześciu klas. Poniższy przykład to hipoteza startowa oparta na tym, jak dostawcy pozycjonowali swoje modele 2026-09-26, a nie wynik. Zastąp każdą komórkę tym, co pokażą twoje ewaluacje.

Klasa zadańCo decyduje o trasiePrzykładowa trasa startowa (2026-09-26)FallbackPomiar
Eksploracja repozytoriumZnalezione właściwe pliki, szybkośćSubagent tylko do odczytu na Claude Haiku 4.5 lub GPT-6 LunaModel domyślny sesjiTrafione pliki względem znanej listy, opóźnienie
ImplementacjaDiff zaakceptowany po bramkachModel domyślny z domyślnym poziomem rozumowania: Claude Opus 5.5 lub GPT-6 AstraTen sam model, poziom rozumowania o stopień wyżejOdsetek przejść przez bramki, ponowienia, koszt na zaakceptowane zadanie
Długi horyzont, najtrudniejsze rozumowanieZadanie ukończone bez ratunku człowiekaClaude Fable 5.1 wybrany ręcznie albo GPT-6 Astra na maxPodziel zadanie i uruchom ponownie na modelu domyślnymUkończenie bez interwencji, koszt na zadanie
ReviewPrawdziwe defekty, mało fałszywych alarmówOsobna sesja, a inny model tam, gdzie ewaluacje pokazują, że znajduje więcejSpecjalista-człowiekZaakceptowane uwagi, odsetek fałszywych alarmów
Masowe edycje mechanicznePoprawne edycje w dużej liczbieClaude Sonnet 5, GPT-6 Sol lub GPT-6 LunaModel domyślny tylko na plikach, które nie przeszłyOdsetek przejść na plik, koszt na plik
Dane regulowaneZatwierdzony dostawca, region, retencjaWyłącznie trasa zatwierdzona przez politykęŚcieżka wyłącznie ludzkaNaruszenia polityki (cel: zero)

Tabelę trzymają w ryzach dwie zasady. Próg jakości musi zostać spełniony, zanim koszt lub szybkość rozstrzygną między kandydatami. A model flagowy bywa tańszy na zaakceptowane zadanie niż mały, jeśli unika ponowień, więc porównuj koszt na zaakceptowane zadanie, nigdy cenę za token.

Rób to dla jednej klasy zadań naraz. Zaplanuj co najmniej trzy przebiegi na zadanie dla każdego kandydata: zestaw 10 zadań z baseline’em i jednym kandydatem to 60 przebiegów. Jeśli nie masz jeszcze zestawu ewaluacyjnego, najpierw zbuduj go ze scalonych pull requestów.

  1. Zamroź harness. Zapisz wersję CLI, commit CLAUDE.md lub AGENTS.md, skille i serwery MCP. Trasa porównana na dwóch wersjach harnessu nic nie mówi o modelu.

  2. Wybierz od 10 do 20 zadań z danej klasy. Każde zadanie potrzebuje commita bazowego i skryptu oceniającego, który kończy się kodem 0 przy sukcesie: testy niewidoczne dla agenta, type checker, linter i kontrola zakresu zmienionych plików.

  3. Uruchom baseline i każdego kandydata po trzy razy na zadanie, w jednorazowym worktree. Dla każdego przebiegu używaj tego samego promptu. Jeden przebieg na zadanie ukrywa wariancję, przez którą tani model wygląda dobrze.

  4. Oceń kodem, a potem wypełnij arkusz poniżej. Najpierw odsetek zaliczeń. Do porównania kosztu i opóźnienia przechodzą tylko kandydaci mieszczący się w progu jakości względem baseline’u.

  5. Otwórz pull request, który zmienia jednocześnie docs/ai/model-routing.md i konfigurację narzędzia. Dołącz arkusz wyników. Tech lead przegląda liczby, nie prozę, i scala zmianę.

Żeby uruchomić macierz kandydatów z jednej konfiguracji zamiast pętli w shellu, użyj promptfoo (npm promptfoo, 0.123.1 na 2026-09-26), które obsługuje Claude Code i Codeksa jako dostawców: uruchom npx promptfoo@latest init, a potem promptfoo eval i promptfoo view.

Polecenia różnią się między narzędziami. Każdy przebieg poniżej działa bez interakcji, zostaje w repozytorium i zapisuje wynik czytelny dla maszyny.

Okno terminala
# Terminal, inside a throwaway worktree for one task
claude -p "$(cat evals/implementation/task-07/prompt.md)" \
--model claude-opus-5-5 --effort high \
--permission-mode acceptEdits \
--allowedTools "Bash(npm test *)" "Bash(npx tsc *)" "Bash(npm run lint *)" \
--max-budget-usd 5 \
--output-format json > runs/task-07-opus55-high-run1.json
./evals/implementation/task-07/check.sh "$PWD"; echo "exit=$?"

Wynik JSON zawiera total_cost_usd i rozbicie kosztu na modele. Oba są szacunkami po stronie klienta, więc raz w miesiącu uzgadniaj je z panelem zużycia. Dla każdego kandydata zmień --model i --effort.

evals/results/2026-09-26-implementation.yaml
date: 2026-09-26
task_class: implementation
harness: { claude_code: 2.1.283, codex: 0.157.1, agents_md_commit: 4f1c2e9 }
tasks: 12
runs_per_task: 3
candidates:
- route: claude-opus-5-5 @ medium # baseline: the default
pass_rate: 0.83
median_retries: 0
median_latency_s: 410
cost_per_accepted_task_usd: 1.90
- route: claude-opus-5-5 @ high
pass_rate: 0.92
median_retries: 0
median_latency_s: 520
cost_per_accepted_task_usd: 2.30
decision: promote "@ high" for implementation; quality gain beats the cost rise
signed_off_by: tech lead, 2026-09-26

Liczby powyżej to wypełniacze pokazujące kształt arkusza; twoje pochodzą z twoich przebiegów.

Trasa, która istnieje tylko w dokumencie, rozjeżdża się z rzeczywistością. Zapisz ją tam, gdzie czyta ją narzędzie, i trzymaj tam pełne identyfikatory modeli zamiast aliasów. Aliasy takie jak opus i sonnet wskazują różne modele u różnych dostawców i przesuwają się, gdy wychodzi nowy model.

Model sesji ustaw w .claude/settings.json ("model": "claude-opus-5-5") albo zostaw pusty, żeby podążać za domyślnym. Klasy zadań routuj przez subagentów: każdy plik subagenta przyjmuje pola model i effort. Eksplorację przypisz do osobnego subagenta projektu na tańszym modelu, a potem wywołuj go po nazwie albo wskaż go w CLAUDE.md:

---
name: explore-cheap
description: Read-only codebase search. Use before any edit to find files, call sites, and tests.
tools: Read, Grep, Glob
model: claude-haiku-4-5
---
Return file paths with one line each on why they matter. Never edit files.

Claude Haiku 4.5 ma zobowiązanie, że nie zostanie wycofany przed 2026-10-15 (bez ogłoszenia wycofania na 2026-09-26); gdy pojawi się następca, uruchom ponownie ewaluację eksploracji.

Inne dźwignie: opusplan używa Opusa w trybie planowania, a Sonneta przy wykonaniu; fallbackModel w ustawieniach (albo --fallback-model) przyjmuje uporządkowaną listę modeli zapasowych, próbowanych po kolei, gdy model główny jest przeciążony lub niedostępny; administratorzy ograniczają wybór przez availableModels, a od v2.1.283 (kanał latest) także deniedModels. Uwaga: /model zapisuje wybór jako domyślny dla nowych sesji; w oknie wyboru modelu naciśnij s, żeby przełączyć model tylko w bieżącej sesji.

Skąd wiesz, że trasa jest dobra, bez czytania każdego diffa?

Dział zatytułowany „Skąd wiesz, że trasa jest dobra, bez czytania każdego diffa?”

Trasę oceniasz po dowodach, a nie po lekturze kodu, który wyprodukowała.

  • O zaliczeniu decydują skrypty oceniające. Każde zadanie ewaluacyjne ma check.sh z testami ukrytymi przed agentem, type checkerem, linterem i kontrolą zakresu. Trasa, która ich nie przechodzi, nie trafia do tabeli, niezależnie od kosztu.
  • Produkcja potwierdza ewaluację. Po zmianie trasy przez dwa tygodnie obserwuj odsetek akceptowanych pull requestów agenta i odsetek poprawek dla tej klasy, według definicji z metryk cyklu życia.
  • Każda zmiana automatycznie uruchamia ewaluacje ponownie. Zmiana modelu lub poziomu rozumowania w tabeli routingu uruchamia ciągłe ewaluacje, a premiera nowego modelu u dostawcy uruchamia plan oceny nowego modelu.
  • Pull request zapisuje trasę. Pakiet dowodów agenta podaje model i poziom rozumowania, które wytworzyły zmianę, więc regresję da się powiązać z trasą.
  • Zatwierdza jedna osoba. Tech lead jest właścicielem docs/ai/model-routing.md i evals/ przez CODEOWNERS i tylko on scala zmianę trasy. Programista, który ją proponuje, dołącza arkusz wyników.
ObjawPrzyczynaNaprawa
Przypięty model znika albo zaczyna zawodzićDostawca go wycofał lub przemianował. Na przykład Claude Haiku 4.5 ma zobowiązanie, że nie zostanie wycofany przed 2026-10-15, bez ogłoszenia wycofania na 2026-09-26.Wskaż w wierszu następcę nazwanego przez dostawcę, uruchom ponownie zestaw ewaluacyjny tej klasy i opatrz zmianę datą. Nigdy nie zgaduj następcy z materiałów marketingowych.
Dwie osoby dostają różne wyniki z tego samego poleceniaRóżne kanały wydań, dostawcy albo zapisany wybór /model w którymkolwiek z narzędziPorównaj wynik /status w obu narzędziach. Przypnij model w ustawieniach projektu (.claude/settings.json albo .codex/config.toml w zaufanym projekcie) i zapisz wersję CLI w arkuszu.
Tania trasa wygląda dobrze, ale kosztuje więcejNie liczysz ponowień i ręcznych poprawekPrzelicz koszt na zaakceptowane zadanie z ponowieniami i czasem poprawek. Promuj trasę o niższej sumie.
Żądanie w Claude Code w trakcie zadania zmienia modelKlasyfikator bezpieczeństwa przeniósł oznaczone żądanie z obszaru cyberbezpieczeństwa lub biologii na model zapasowy albo przy awarii zadziałał fallbackModelPrzeczytaj komunikat w transkrypcie. Jeśli klasa często to wywołuje, świadomie przypisz ją do modelu zapasowego i oceń ją na nim.
Nie da się odtworzyć modelu użytego w przebieguModel nie był przypięty, więc wybrało go narzędzie lub ustawienie domyślne kontaZapisuj identyfikator modelu w arkuszu. Do CI i przebiegów podlegających audytowi przypnij oceniony model.
Fallback przekracza granicę danychDostawca zapasowy nie jest zatwierdzony dla tych danychZostaw zadanie u zatwierdzonego dostawcy albo użyj ścieżki wyłącznie ludzkiej. Dostępność nigdy nie wygrywa z polityką danych.
Wszyscy przesiadają się na największy modelJedna imponująca sesja, zero ewaluacjiPrzeprowadź ewaluację dla tej klasy. Jeśli flagowiec wygrywa kosztem na zaakceptowane zadanie, promuj go tym samym pull requestem co każdą inną zmianę.
  • Każda ważna klasa zadań ma próg jakości, bieżącą trasę i fallback.
  • Nazwy modeli występują w jednej datowanej tabeli routingu i w konfiguracji narzędzi, a nie w promptach.
  • Każda trasa linkuje do arkusza wyników z tej samej wersji harnessu.
  • Poziom rozumowania dostrojono na modelu domyślnym, zanim wypróbowano inny model.
  • Przynajmniej jeden fallback przeszedł ten sam zestaw ewaluacyjny.
  • Koszt na zaakceptowane zadanie obejmuje ponowienia i ręczne poprawki.
  • Uprawnienia, sandbox i granice danych są takie same dla każdego kandydata.
  • Tech lead jest właścicielem tabeli przez CODEOWNERS i przegląda ją co najmniej raz na kwartał.

Przed tą stroną wybierz główny harness do inżynierii z AI (Q1) i dobierz plan do zmierzonego obciążenia (Q2) oraz poznaj ekosystem skilli, serwerów MCP i pluginów. Potem przenieś trasy do cyklu wytwarzania AI-native i porównaj harnessy w mapie narzędzi. Następny krok na ścieżce programisty: frameworki agentowe.

Oficjalne źródła: Claude Code, konfiguracja modeli i subagenci; Codex, schemat konfiguracji; pakiet @cursor/sdk.