Jazykové rekurzivní sebezlepšování: brousíme code intelligence napříč ~280 jazyky
> Podporujeme code intelligence pro ~280 jazyků. Ručně to žádný člověk zaudituje. Postavili jsme proto jazykovou smyčku rekurzivního sebezlepšování — namátková kontrola, LLM jako rozhodčí, oprav jednu věc, znovu ověř — a necháme ji běžet na flotile izolovaných agentů, dokud extrakce není skutečně správná, ne jen zelená.
Čísla v tomto příspěvku odrážejí stav systému v době zveřejnění (květen 2026). Aktuální čísla najdete na naší stránce týmu.
Maguyva extrahuje symboly, reference a graf závislostí ze zdrojového kódu zhruba v 280 jazycích. Každý jazyk je vlastní tree-sitter handler — dotazy, heuristiky, hraniční případy — a každý handler může být po svém jemně špatně. Volání metody vyexportované jako čtení. Funkce přiřazená ke špatnému obklopujícímu scope. Vztah, který tam prostě není.
To se nedá ručně zaauditovat. Žádný tým nepřečte výstup extrakce napříč 280 gramatikami a nenajde ty špatné hrany. Zajímavá otázka tedy není „je naše extrakce správná“, ale „jak zjistíte, že je špatná, v této šíři, bez člověka v každé smyčce“. Naše odpověď je jazykové rekurzivní sebezlepšování: kvalitativní smyčka poháněná jazykovými agenty, LLM v roli rozhodčího a jedno pravidlo, které se pořád znovu učíme: zelená není totéž co správná.
Zelená není správná
Každý jazyk má sadu fixtures a release gate ho boduje napříč pěti dimenzemi — přesnost, strukturální integrita, úplnost, kvalita a výkon. Jazyk dostane ZELENOU jen tehdy, když na svých fixtures dosáhne precision ≥ 0,95, recall ≥ 0,99 a F1 ≥ 0,97, s alespoň 20 očekávanými hranami pro statistickou důvěru. Pod tím je ŽLUTÁ nebo ČERVENÁ, a nejde do provozu.
Tahle brána je nutná, ale ne dostatečná. Fixtures validují proti fixtures, které jsme sami napsali. Zakódovaly jsme do nich případy, na které jsme už mysleli. Handler může být na svých fixtures bezchybný a přesto zpackat vzorec, který se objeví jen ve skutečném kódu — makro idiom, generická metoda, jazyková vlastnost, pro kterou nikdo fixture nenapsal. ZELENÁ znamená, že fixtures projdou. Neznamená to, že se skutečný repozitář extrahuje čistě. Smyčka proto musí opustit fixtures a podívat se do divočiny.
Vnitřní smyčka: namátková kontrola, rozhodčí, oprava, důkaz
Jádro smyčky běží vždy pro jeden jazyk:
┌──────────────────────────────────────────────────────────┐
│ │
▼ │
1. corpus run ── clone real-world repos, extract relationships │
│ │
▼ │
2. spot-check 100 edges (seed 42, then seed 123 to cross-check) │
│ │
▼ │
3. LLM judge classifies every sampled edge: │
CORRECT · FALSE_POSITIVE · TYPE_ERROR · │
SCOPE_ERROR · METADATA_ERROR │
│ │
▼ │
4. fix ONE thing — handler .py, .scm query, or config │
│ │
▼ │
5. re-validate — F1 + re-classify + manifest diff (no regressions)│
│ │
better? ──no──► revert, try a different fix ────────────────────┤
│ yes │
▼ │
6. promote the fix into fixtures (a permanent regression guard) ──┘
Několik věcí zajišťuje, že tohle funguje, a ne jen mele naprázdno.
Rozhodčí je agent, ne API volání. Když říkáme „LLM jako rozhodčí“, myslíme tím, že samotný jazykový agent čte každou vzorkovanou hranu proti skutečnému zdroji a klasifikuje ji podle pevného pěti-kategoriového rubriku: je tahle hrana správná, false positive, správný vztah se špatným typem, připojená ke špatnému scope, nebo nese špatná metadata? Ten rubrik je celá hra — „23% chybovost“ nic neznamená, dokud nevíte, jestli jde o skutečné defekty, nebo o rozhodčího, který se spletl v počítání.
Oprav jednu věc, pak to dokaž. Každá iterace mění přesně jeden editovatelný asset, pak se znovu spustí proti pevnému harnessu a změnu si ponechá jen tehdy, pokud se zlepší F1 a překlasifikace vypadá lépe. Pokud ne, vrátí se zpět. Žádná dávka spekulativních úprav, žádné „mělo by být lepší“. Změna si své místo buď vydělá, nebo zmizí. A když se oprava chytí, povýší se do sady fixtures — takže chyba, kterou opravila, se už tiše nemůže vrátit. Tenhle krok povýšení je to, co dělá smyčku rekurzivní, a ne jen opakovanou: každý průchod zpevňuje orákulum, proti kterému validuje ten další.
Ponaučení, které se pořád znovu učíme: metriky nadhodnocují
Tady je past, do které jsme spadli po hlavě. Sekundární metriky korpusu — jak často má extrahovaný cíl nedořešitelný symbol, kolik symbolů vypadá „osiřele“ a tak dále — masivně nadhodnocují problémy. Jsou to většinou artefakty paradigmatu, ne bugy.
Nejčistší příklad: llvm jednou ukázal 73% míru „zdroj-bez-symbolu“ a byl označen za katastrofální. Ponořili jsme se do toho. Skutečná přesnost byla 98,5 %. „Chybějící symboly“ byly téměř všechny legitimní externí reference — volání do standardní knihovny, do frameworků, do kódu, který žije mimo repozitář. Metrika měřila vlastnost jazyka, ne defekt handleru. Jazyky jako Zig, COBOL a Odin ukazují 65–70% míru „osiřelosti“ a jsou přitom úplně v pořádku; COBOL neměl nulové skutečné chyby.
Kdybychom nechali tahle čísla řídit práci, strávili bychom týdny „opravováním“ handlerů, které už byly správné, a ignorovali bychom jazyky s tichými, skutečnými chybami. Závěr je nekompromisní: agregátní metriky jsou v nejlepším případě hrubý třídicí signál. Skutečný signál kvality je namátková kontrola s klasifikací hran — dívat se na skutečné hrany ve skutečných repozitářích a posuzovat je jednu po druhé. Data před intuicí, ale jen ve chvíli, kdy víte, která data mluví pravdu.
Vnější smyčka: flotila, ne maraton
Jeden jazyk po druhém by napříč 280 jazyky trvalo věčnost, takže je vnitřní smyčka zabalená do vnější, která běží mnoho jazyků paralelně.
pick a wave of near-GREEN / high-error languages
│
▼
fan out 10–15 agents, each ISOLATED in its own git worktree,
each grinding ONE language, committing to its own branch
│
▼
orchestrator integrates serially: file-scoped apply, then
`manifest diff` — any cross-language regression blocks the batch
│
▼
gated push (reviewed and confirmed) ──► rotate to the next wave
Každý agent pracuje v jednorázovém pracovním stromě, takže si nemůžou šlapat na paty. Orchestrátor integruje jejich opravy jednu po druhé, každou za kontrolou regrese na celém manifestu: změna, která pomůže svému vlastnímu jazyku, ale tiše rozbije tři další, neprojde. Integrace je hlídaná bránou a potvrzená ještě předtím, než se cokoli pushne — regresní brána rozhoduje, co je bezpečné, co se odešle, pořád rozhoduje člověk. Pak se fronta protočí na další sadu jazyků a celé se to opakuje.
Co je pořád nedokonalé
Rozhodčí se může mýlit a ta mýlka má směr: agent běžící s příliš malým kontextem nadhodnocuje. V jedné dávce bylo osm jazyků označeno chybovostí 5–20 %; po prozkoumání byla skutečná chyba specifická pro jazyk jen jedna — zbytek byly chyby rozhodčího z toho, že mu unikla vlastní sémantika daného jazyka (jeden zdrojový řádek legitimně produkuje několik hran, vazby parametrů modelované jako přiřazení, jazyky typu reference-per-identifier). Proto vzorkujeme se dvěma seedy a křížově kontrolujeme, a proto se neshoda mezi rozhodčím a fixtures bere jako nejzajímavější signál, ne jako uzavřený verdikt — někdy je to fixture, co je špatně.
Jsme také upřímní ohledně cíle. Cílem je nula skutečných chyb, tečka — ale „nula“ je směr, ke kterému se brousíme jazyk po jazyku, ne políčko, které jednou zaškrtnete. Vždycky existuje další repozitář s dalším idiomem.
Vydobyté, ne tvrzené
Všechno, co Maguyva pro agenta dělá — najít symbol, sledovat závislost, odpovědět na otázku s citovaným kódem — stojí na tom, že podkladová extrakce je správná. Napříč 280 jazyky se „správnost“ nedá jen tvrdit; musí se soustavně vydobýt proti skutečnému kódu. Smyčka je způsob, jak si ji vydobýváme: autonomní cyklus namátkové kontroly a opravy, který ke svým vlastním metrikám přistupuje s podezřením, každou změnu dokazuje a každou opravu mění na strážce proti příští regresi. Není to okázalé. Je to práce, díky které můžeme říct „podporujeme váš jazyk“ a myslet to vážně. Zelená je snadná. Správná se vydobývá.
Související čtení
Další ze stavebního deníku Maguyva
Proč jsme upgradovali vyhledávání v kódu na voyage-4-large_
Přesunuli jsme naše embeddingy kódu na voyage-4-large — aktuálně na špici veřejného žebříčku RTEB pro retrieval kódu. Upřímná verze: kompromis, který děláme, co skutečně indexujeme a proč platíme za prémiové embeddingy.
Multi-modální fúzní vyhledávání: pro každý dotaz ten správný retriever_
Dotaz jako „kde je definovaný parseConfig“ chce jiné vyhledávání než „jak funguje autentizace“. Maguyva klasifikuje záměr, podle toho zváží čtyři vyhledávací modality a výsledky sloučí pomocí vážené Reciprocal Rank Fusion.
Observabilita agentů: hooks, Alloy a Grafana_
Zapojili jsme Claude Code a Codex do jednoho Grafana stacku pomocí OpenTelemetry a Alloy a pak jsme pomocí trace a logů dohledávali a opravovali problémy v chování agentů přímo u zdroje.