Learning
Všechny články
AI6. července 2026 5 min

Lepší model, horší dodržování cizího schématu

Proč nejnovější Claude modely komolí edit tool, který starší zvládaly

Silnější prior se dá i prohrát

Armin Ronacher si všiml něčeho, co jde proti intuici. Opus 4.8 a Sonnet 5 — modely, které v benchmarcích válcují své předchůdce — najednou hůř volají cizí nástroj. Do JSONu, který má obsahovat jen oldText a newText, přisypou requireUnique, matchCase, oldText2 a další klíče, které ve schématu nikdy nebyly. Starší modely to nedělaly. Lepší model, horší nástrojář.


Payload je správný, obal je vymyšlený

Důležitý detail: samotný obsah editu sedí. oldText a newText model trefí přesně. Selhává jen obal — kolem správných hodnot naroste, jak píše Armin, „celá zoo vymyšlených koncových klíčů": type, id, kind, unique, requireUnique, matchCase.

Nejde tedy o to, že by model úlohu neuměl. Umí ji. Jen ji ozdobí poli z úplně jiného schématu, než jaké dostal. A validace na to spadne.


Odkud se ta pole berou

Ronacherova hypotéza míří na post-training. Novější Claude modely se posilovaným učením trénovaly hlavně v harnessu Claude Code, jehož vestavěný edit tool má plochý tvar old_string, new_string, volitelně replace_all. Ten harness je navíc shovívavý: neznámé klíče tiše zahodí, typy dorovná.

A tady je ta past. Když RL běží v prostředí, které odpustí špatně tvarované volání, „lehce pokažené volání pořád splní úkol a dostane odměnu". Model se naučí, že přebytečná pole nic nestojí — a zároveň si vybuduje silný prior na to, jak edit tool vypadá. Cizí vnořené oldText/newText je pak mimo distribuci. Model sáhne po svém prioru a dovymýšlí zbytek. Armin to shrnuje ostře: „líp natrénované modely ti můžou klást větší odpor, protože jejich prior je silnější."


Schéma není neutrální

Z toho plyne nepříjemný závěr. Tvar schématu nástroje není kosmetika. Když se kryje s tím, co model viděl v tréninku, dostaneš poslušnost zadarmo. Když se rozchází, platíš komolením — a čím schopnější model, tím dráž. Schopnost a věrnost tvému API se rozjíždějí.

Řešení jsou dvě. Buď schéma přiblížíš tomu, co model zná. Nebo zapneš strict mode a necháš vynucení JSON schématu na serveru — v Ronacherových testech to selhání vymazalo úplně.


Co si z toho odnést

Když navrhuješ tool pro agenta, nepřemýšlej jen o tom, co je čitelné pro tebe. Přemýšlej o tom, co model viděl v tréninku. Prior na tvar old_string/new_string tam někdo aktivně posiloval, a ty proti němu jdeš každým vlastním klíčem navíc. Máš dvě cesty: srovnat schéma s tím, co model zná, nebo si validaci vynutit na serveru a nedůvěřovat výstupu. „Víc schopný" neznamená „poslušnější k tvému rozhraní".

Poslech místo čtení — 0 zdroje k načtení.