Penambahbaikan Kendiri Rekursif Bahasa: Menggilap Kecerdasan Kod Merentasi ~280 Bahasa
> Kami menyokong kecerdasan kod untuk ~280 bahasa. Tiada manusia yang mampu mengaudit itu secara manual. Jadi kami membina gelung penambahbaikan kendiri rekursif bahasa — semak sampel, LLM-sebagai-penilai, baiki satu perkara, sahkan semula — dan menjalankannya dengan sepasukan ejen terasing sehingga pengekstrakan benar-benar betul, bukan sekadar hijau.
Angka dalam penulisan ini mencerminkan sistem pada masa penerbitan (Mei 2026). Lihat halaman pasukan kami untuk angka terkini.
Maguyva mengekstrak simbol, rujukan, dan graf kebergantungan daripada kod sumber dalam lebih kurang 280 bahasa. Setiap bahasa adalah handler tree-sitter tersuai — query, heuristik, kes pinggir — dan setiap handler boleh salah secara halus dengan caranya sendiri. Panggilan method dipancarkan sebagai bacaan. Fungsi diatributkan kepada skop pelingkung yang salah. Hubungan yang sebenarnya tidak wujud.
Anda tidak boleh mengauditnya secara manual. Tiada pasukan yang mampu membaca output pengekstrakan merentasi 280 grammar dan mengesan edge yang buruk. Jadi soalan yang menarik bukanlah “adakah pengekstrakan kami betul” — tetapi “bagaimana anda ketahui ia salah, pada skala seluas ini, tanpa manusia dalam setiap gelung.” Jawapan kami ialah penambahbaikan kendiri rekursif bahasa: gelung kualiti yang dipacu oleh ejen bahasa, LLM yang bertindak sebagai hakim, dan satu peraturan yang kami terus pelajari semula: hijau tidak sama dengan betul.
Hijau bukan bermakna betul
Setiap bahasa mempunyai suite fixture, dan gate pelepasan menilainya merentasi lima dimensi — ketepatan, integriti struktur, kelengkapan, kualiti, dan prestasi. Sesuatu bahasa menjadi GREEN hanya apabila, pada fixture-nya, precision ≥ 0.95, recall ≥ 0.99, dan F1 ≥ 0.97, dengan sekurang-kurangnya 20 edge yang dijangka untuk keyakinan statistik. Di bawah itu ia menjadi YELLOW atau RED, dan tidak dikeluarkan.
Gate itu perlu tetapi tidak mencukupi. Fixture mengesahkan terhadap fixture yang kami tulis sendiri. Ia mengekod kes-kes yang sudah kami fikirkan. Sesuatu handler boleh sempurna pada fixture-nya tetapi masih mengacau-balaukan corak yang hanya muncul dalam kod sebenar — satu idiom macro, method dengan kekangan pada jenis generik, satu ciri bahasa yang tiada siapa menulis fixture untuknya. GREEN bermaksud fixture lulus. Ia tidak bermaksud repositori sebenar diekstrak dengan bersih. Jadi gelung itu perlu meninggalkan fixture dan meneliti kod dalam penggunaan sebenar.
Gelung dalaman: semak sampel, nilai, baiki, buktikan
Gelung teras berjalan satu bahasa pada satu masa:
┌──────────────────────────────────────────────────────────┐
│ │
▼ │
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) ──┘
Beberapa perkara menjadikan ini berfungsi berbanding sekadar bergelut tanpa hala tuju.
Hakimnya adalah ejen itu sendiri, bukan panggilan API. Apabila kami berkata “LLM-sebagai-hakim,” maksud kami ejen bahasa itu sendiri membaca setiap edge yang disampel berbanding sumber sebenar dan mengklasifikasikannya dengan rubrik lima kategori yang tetap: adakah edge ini betul, positif palsu, hubungan yang betul dengan jenis yang salah, terikat pada skop yang salah, atau membawa metadata yang salah? Rubrik itulah asas penilaian ini — “kadar ralat 23%” tidak bermakna sehingga anda tahu sama ada itu kecacatan sebenar atau hakim tersalah kira.
Baiki satu perkara, kemudian buktikan. Setiap iterasi menukar tepat satu aset yang boleh disunting, kemudian menjalankan semula terhadap harness tetap dan mengekalkan perubahan itu hanya jika F1 bertambah baik dan pengklasifikasian semula kelihatan lebih baik. Jika tidak, ia dikembalikan. Tiada kelompok suntingan spekulatif, tiada “sepatutnya lebih baik.” Sesuatu perubahan mesti membuktikan haknya atau ia dibuang. Dan apabila sesuatu pembaikan kekal, ia dinaikkan taraf ke dalam suite fixture — supaya bug yang dibaikinya tidak dapat kembali secara senyap. Langkah kenaikan taraf itulah yang menjadikan gelung ini rekursif dan bukan sekadar berulang: setiap pusingan mengukuhkan rujukan pengesahan yang digunakan oleh pusingan seterusnya.
Pengajaran yang kami terus pelajari semula: metrik melebih-lebihkan laporan
Inilah perangkapnya, dan kami terus terjerumus ke dalamnya. Metrik korpus sekunder — kekerapan sasaran yang diekstrak tidak mempunyai simbol yang boleh diselesaikan, berapa banyak simbol kelihatan “yatim,” dan sebagainya — secara besar-besaran melebih-lebihkan masalah. Kebanyakannya adalah artifak paradigma, bukan bug.
Contoh paling jelas: llvm pernah menunjukkan kadar “sumber-tanpa-simbol” sebanyak 73% dan dicap sebagai bencana. Kami menyelidik lebih dalam. Ketepatan sebenar ialah 98.5%. “Simbol yang hilang” itu hampir kesemuanya rujukan luaran yang sah — panggilan ke pustaka piawai, ke framework, ke kod yang berada di luar repositori. Metrik itu mengukur sifat bahasa, bukan kecacatan dalam handler. Bahasa seperti Zig, COBOL, dan Odin menunjukkan kadar “yatim” sebanyak 65–70% dan sepenuhnya betul; COBOL tidak mempunyai sebarang ralat sebenar.
Jika kami membiarkan angka-angka itu memacu kerja ini, kami pasti menghabiskan berminggu-minggu “membaiki” handler yang sudah pun betul dan mengabaikan bahasa yang mempunyai bug sebenar yang senyap. Kesimpulannya tegas: metrik agregat sebaik-baiknya hanyalah isyarat triage yang kasar. Isyarat kualiti sebenar ialah semakan sampel dengan pengklasifikasian edge — melihat edge sebenar dalam repositori sebenar dan menilainya satu demi satu. Data mengatasi gerak hati, tetapi hanya sebaik sahaja anda tahu data mana yang bercakap benar.
Gelung luar: satu pasukan, bukan maraton
Satu bahasa pada satu masa akan mengambil masa yang tidak berkesudahan merentasi kesemua 280 bahasa itu, jadi gelung dalaman dibalut dalam satu gelung luar yang menjalankan banyak secara selari.
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
Setiap ejen bekerja dalam worktree pakai buang supaya mereka tidak dapat mengganggu satu sama lain. Orchestrator mengintegrasikan pembaikan mereka satu demi satu, setiap satu di sebalik semakan regresi manifest-penuh: perubahan yang membantu bahasanya sendiri tetapi secara senyap merosakkan tiga yang lain tidak akan digabungkan. Integrasi mesti lulus semakan dan disahkan sebelum sebarang perubahan dihantar ke repositori jauh — gate regresi menentukan apa yang selamat, manusia masih menentukan apa yang dikeluarkan. Kemudian kumpulan itu berputar ke set bahasa seterusnya dan keseluruhan proses berjalan semula.
Apa yang masih tidak sempurna
Hakim boleh tersilap, dan kesilapan itu mempunyai arah: ejen yang berjalan dengan konteks yang terlalu sedikit melebih-lebihkan laporan. Dalam satu kelompok, lapan bahasa ditandai pada ralat 5–20%; selepas pemeriksaan hanya satu bahasa yang mempunyai bug sebenar khusus bahasa — selebihnya adalah kesilapan hakim akibat terlepas pandang semantik bahasa itu sendiri (satu baris sumber secara sah memancarkan beberapa edge, ikatan parameter dimodelkan sebagai assignment, bahasa rujukan-per-pengecam). Itulah sebabnya kami mengambil sampel dengan dua seed dan menyilang semak, dan mengapa percanggahan antara hakim dan fixture dianggap sebagai isyarat yang paling menarik, bukan keputusan muktamad — kadangkala fixture itulah yang salah.
Kami juga jujur tentang sasaran itu. Matlamatnya ialah sifar ralat sebenar, tanpa kompromi — tetapi “sifar” adalah hala tuju yang kami usahakan secara berterusan, bahasa demi bahasa, bukan kotak yang ditanda. Sentiasa ada repositori lain dengan idiom lain.
Diperoleh, Bukan Didakwa
Segala yang Maguyva lakukan untuk seorang ejen — mencari simbol, menjejaki kebergantungan, menjawab soalan dengan rujukan kepada kod — bergantung pada ketepatan pengekstrakan yang mendasarinya. Merentasi 280 bahasa, “betul” tidak boleh didakwa sahaja; ia perlu diperoleh secara berterusan berbanding kod sebenar. Gelung ini adalah cara kami memperolehnya: kitaran semak-sampel-dan-baiki yang autonomi yang mencurigai metriknya sendiri, membuktikan setiap perubahan, dan mengubah setiap pembaikan menjadi pengawal terhadap regresi seterusnya. Ia tidak glamour. Ia adalah kerja yang membolehkan kami berkata “kami menyokong bahasa anda” dan memaksudkannya dengan sungguh-sungguh. Hijau itu mudah. Betul itu diperoleh.
Bacaan berkaitan
Lagi daripada log pembinaan Maguyva
Mengapa Kami Menaik Taraf Carian Kod kepada voyage-4-large_
Kami mengalihkan embeddings kod kami kepada voyage-4-large — kini berada di puncak leaderboard pengambilan kod RTEB awam. Versi jujurnya: kompromi yang kami pilih, apa yang benar-benar kami indeks, dan mengapa kami membayar untuk embeddings premium.
Carian Fusion Pelbagai-Modal: Memilih Retriever Yang Tepat Untuk Setiap Pertanyaan_
Pertanyaan seperti 'di mana parseConfig ditakrifkan' mahukan carian yang berbeza daripada 'bagaimana auth berfungsi'. Maguyva mengklasifikasikan niat, memberi pemberat kepada empat modaliti pengambilan mengikutnya, dan menggabungkan hasil dengan Reciprocal Rank Fusion berpemberat.
Progressive Disclosure: Tetingkap CLI ke Dalam Sistem Ejen_
Sistem ejen bersifat legap secara lalai. Progressive disclosure memberi operator paparan CLI berlapis daripada semakan status pantas kepada bahagian dalaman ejen penuh dan jejak keputusan.