Μετάβαση στο περιεχόμενο
cd /blog

Αναδρομική Αυτο-βελτίωση Γλωσσών: Βελτιώνοντας Αδιάκοπα την Ευφυΐα Κώδικα σε ~280 Γλώσσες

[Αρχιτεκτονική][Γλώσσες][Πράκτορες]

> Υποστηρίζουμε ευφυΐα κώδικα για ~280 γλώσσες. Κανένας άνθρωπος δεν μπορεί να ελέγξει χειροκίνητα κάτι τέτοιο. Έτσι φτιάξαμε έναν βρόχο αναδρομικής αυτο-βελτίωσης γλωσσών — δειγματοληπτικός έλεγχος, LLM ως κριτής, διόρθωση ενός πράγματος τη φορά, επανεπικύρωση — και τον τρέχουμε με έναν στόλο απομονωμένων πρακτόρων μέχρι η εξαγωγή να είναι πράγματι σωστή, όχι απλώς πράσινη.

Οι αριθμοί σε αυτή την ανάρτηση αντικατοπτρίζουν το σύστημα κατά τη δημοσίευση (Μάιος 2026). Δείτε τη σελίδα ομάδας μας για τα τρέχοντα στοιχεία.

Το Maguyva εξάγει σύμβολα, αναφορές και έναν γράφο εξαρτήσεων από πηγαίο κώδικα σε περίπου 280 γλώσσες. Κάθε γλώσσα είναι ένας προσαρμοσμένος χειριστής tree-sitter — ερωτήματα, ευρετικοί κανόνες, οριακές περιπτώσεις — και κάθε χειριστής μπορεί να είναι λεπτά λανθασμένος με τον δικό του τρόπο. Μια κλήση μεθόδου που καταγράφεται ως ανάγνωση. Μια συνάρτηση που αποδίδεται στο λάθος περιβάλλον εμβέλειας. Μια σχέση που απλώς δεν υπάρχει.

Αυτό δεν μπορείτε να το ελέγξετε χειροκίνητα. Καμία ομάδα δεν μπορεί να διαβάσει έξοδο εξαγωγής σε 280 γραμματικές και να εντοπίσει τις κακές ακμές. Οπότε το ενδιαφέρον ερώτημα δεν είναι «είναι σωστή η εξαγωγή μας» — είναι «πώς ανακαλύπτεις ότι είναι λάθος, σε αυτό το εύρος, χωρίς άνθρωπο σε κάθε βρόχο». Η απάντησή μας είναι η αναδρομική αυτο-βελτίωση γλωσσών: ένας βρόχος ποιότητας που κινείται από πράκτορες γλωσσών, ένα LLM που δρα ως κριτής, και έναν κανόνα που συνεχώς ξαναμαθαίνουμε: το πράσινο δεν είναι το ίδιο με το σωστό.

Το πράσινο δεν είναι σωστό

Κάθε γλώσσα έχει μια σουίτα fixtures, και μια πύλη έκδοσης τη βαθμολογεί σε πέντε διαστάσεις — ακρίβεια, δομική ακεραιότητα, πληρότητα, ποιότητα και απόδοση. Μια γλώσσα γίνεται ΠΡΑΣΙΝΗ μόνο όταν, στα fixtures της, η ακρίβεια ≥ 0,95, η ανάκληση ≥ 0,99, και το F1 ≥ 0,97, με τουλάχιστον 20 αναμενόμενες ακμές για στατιστική εμπιστοσύνη. Κάτω από αυτό είναι ΚΙΤΡΙΝΗ ή ΚΟΚΚΙΝΗ, και δεν κυκλοφορεί.

Αυτή η πύλη είναι αναγκαία αλλά όχι επαρκής. Τα fixtures επικυρώνονται έναντι fixtures που εμείς γράψαμε. Κωδικοποιούν τις περιπτώσεις που ήδη είχαμε σκεφτεί. Ένας χειριστής μπορεί να είναι άψογος στα fixtures του και παρόλα αυτά να παραμορφώνει ένα μοτίβο που εμφανίζεται μόνο σε πραγματικό κώδικα — έναν ιδιωματισμό μακροεντολής, μια μέθοδο με γενικό όριο, ένα χαρακτηριστικό γλώσσας για το οποίο κανείς δεν έγραψε fixture. ΠΡΑΣΙΝΟ σημαίνει ότι περνούν τα fixtures. Δεν σημαίνει ότι ένα πραγματικό αποθετήριο εξάγεται καθαρά. Οπότε ο βρόχος πρέπει να αφήσει πίσω τα fixtures και να κοιτάξει την άγρια φύση.

Ο εσωτερικός βρόχος: δειγματοληπτικός έλεγχος, κρίση, διόρθωση, απόδειξη

Ο πυρήνας του βρόχου τρέχει μία γλώσσα τη φορά:

        ┌──────────────────────────────────────────────────────────┐
        │                                                          │
        ▼                                                          │
  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) ──┘

Μερικά πράγματα κάνουν αυτό να λειτουργεί αντί να στροβιλίζεται χωρίς αποτέλεσμα.

Ο κριτής είναι ο πράκτορας, όχι μια κλήση API. Όταν λέμε «LLM ως κριτής», εννοούμε ότι ο ίδιος ο πράκτορας γλώσσας διαβάζει κάθε δειγματισμένη ακμή έναντι της πραγματικής πηγής και την ταξινομεί με μια σταθερή κλίμακα πέντε κατηγοριών: είναι αυτή η ακμή σωστή, ένα ψευδώς θετικό, η σωστή σχέση με λάθος τύπο, συνδεδεμένη στη λάθος εμβέλεια, ή φέρει λάθος μεταδεδομένα; Αυτή η κλίμακα είναι όλο το παιχνίδι — το «23% ποσοστό σφάλματος» δεν σημαίνει τίποτα μέχρι να ξέρετε αν πρόκειται για πραγματικά ελαττώματα ή για λάθος μέτρημα του κριτή.

Διόρθωσε ένα πράγμα, μετά απόδειξέ το. Κάθε επανάληψη αλλάζει ακριβώς ένα επεξεργάσιμο στοιχείο, μετά ξανατρέχει έναντι ενός σταθερού εργαλείου επικύρωσης και κρατά την αλλαγή μόνο αν το F1 βελτιώνεται και η επανα-ταξινόμηση φαίνεται καλύτερη. Αν όχι, επανέρχεται. Καμία παρτίδα κερδοσκοπικών αλλαγών, κανένα «θα έπρεπε να είναι καλύτερο». Μια αλλαγή κερδίζει τη θέση της ή χάνεται. Και όταν μια διόρθωση κολλάει, προάγεται στη σουίτα fixtures — έτσι ώστε το σφάλμα που διόρθωσε να μην μπορεί ποτέ να επιστρέψει σιωπηλά. Αυτό το βήμα προαγωγής είναι αυτό που κάνει τον βρόχο αναδρομικό και όχι απλώς επαναληπτικό: κάθε πέρασμα σκληραίνει το μαντείο έναντι του οποίου επικυρώνει το επόμενο πέρασμα.

Το μάθημα που συνεχώς ξαναμαθαίνουμε: οι μετρικές υπερ-αναφέρουν

Να η παγίδα, και πέσαμε κατευθείαν μέσα της. Οι δευτερεύουσες μετρικές του σώματος κειμένων — πόσο συχνά ένας εξαγόμενος στόχος δεν έχει επιλύσιμο σύμβολο, πόσα σύμβολα φαίνονται «ορφανά», και ούτω καθεξής — υπερ-αναφέρουν μαζικά προβλήματα. Είναι κυρίως τεχνουργήματα παραδείγματος, όχι σφάλματα.

Το πιο καθαρό παράδειγμα: το llvm κάποτε έδειξε ποσοστό «πηγής χωρίς σύμβολο» 73% και χαρακτηρίστηκε καταστροφικό. Σκάψαμε βαθύτερα. Η πραγματική ακρίβεια ήταν 98,5%. Τα «λείποντα σύμβολα» ήταν σχεδόν όλα νόμιμες εξωτερικές αναφορές — κλήσεις προς την τυπική βιβλιοθήκη, προς πλαίσια εργασίας, προς κώδικα που ζει έξω από το αποθετήριο. Η μετρική μετρούσε μια ιδιότητα της γλώσσας, όχι ένα ελάττωμα στον χειριστή. Γλώσσες όπως η Zig, η COBOL και η Odin εμφανίζουν ποσοστά «ορφάνιας» 65–70% και είναι εντελώς σωστές· η COBOL είχε μηδέν πραγματικά σφάλματα.

Αν είχαμε αφήσει εκείνους τους αριθμούς να καθοδηγήσουν τη δουλειά, θα είχαμε ξοδέψει εβδομάδες «διορθώνοντας» χειριστές που ήταν ήδη σωστοί και αγνοώντας τις γλώσσες με σιωπηλά, πραγματικά σφάλματα. Το συμπέρασμα είναι απότομο: οι συγκεντρωτικές μετρικές είναι, στην καλύτερη περίπτωση, ένα χονδρικό σήμα διαλογής. Το πραγματικό σήμα ποιότητας είναι ο δειγματοληπτικός έλεγχος με ταξινόμηση ακμών — το να κοιτάς πραγματικές ακμές σε πραγματικά αποθετήρια και να τις κρίνεις μία-μία. Δεδομένα πάνω από διαίσθηση, αλλά μόνο όταν ξέρεις ποια δεδομένα λένε την αλήθεια.

Ο εξωτερικός βρόχος: ένας στόλος, όχι ένας μαραθώνιος

Μία γλώσσα τη φορά θα έπαιρνε αιώνες για 280 από αυτές, οπότε ο εσωτερικός βρόχος τυλίγεται σε έναν εξωτερικό που τρέχει πολλές παράλληλα.

   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

Κάθε πράκτορας δουλεύει σε ένα αναλώσιμο worktree ώστε να μην πατούν ο ένας τον άλλον. Ο ενορχηστρωτής ενσωματώνει τις διορθώσεις τους μία-μία, καθεμιά πίσω από έναν πλήρη έλεγχο οπισθοδρόμησης σε όλο το μανιφέστο: μια αλλαγή που βοηθά τη δική της γλώσσα αλλά σιωπηλά σπάει τρεις άλλες δεν προσγειώνεται. Η ενσωμάτωση περνά από πύλη και επιβεβαιώνεται πριν σπρωχτεί οτιδήποτε — η πύλη οπισθοδρόμησης αποφασίζει τι είναι ασφαλές, ένας άνθρωπος εξακολουθεί να αποφασίζει τι κυκλοφορεί. Έπειτα η δεξαμενή περιστρέφεται στο επόμενο σύνολο γλωσσών και όλη η διαδικασία τρέχει ξανά.

Τι εξακολουθεί να είναι ατελές

Ο κριτής μπορεί να κάνει λάθος, και το λάθος έχει κατεύθυνση: ένας πράκτορας που τρέχει με πολύ λίγο πλαίσιο υπερ-αναφέρει. Σε μία παρτίδα, οκτώ γλώσσες σημειώθηκαν με σφάλμα 5–20%· κατά την επιθεώρηση μόνο μία ήταν πραγματικό σφάλμα ανά γλώσσα — οι υπόλοιπες ήταν λάθη του κριτή από την παράβλεψη της δικής της σημασιολογίας της γλώσσας (μία γραμμή πηγής που νόμιμα εκπέμπει αρκετές ακμές, δεσμεύσεις παραμέτρων μοντελοποιημένες ως αναθέσεις, γλώσσες με αναφορά-ανά-αναγνωριστικό). Γι’ αυτό δειγματίζουμε με δύο σπόρους (seeds) και κάνουμε διασταύρωση, και γι’ αυτό μια διαφωνία ανάμεσα στον κριτή και τα fixtures αντιμετωπίζεται ως το πιο ενδιαφέρον σήμα, όχι ως τελεσίδικη ετυμηγορία — μερικές φορές το fixture είναι αυτό που είναι λάθος.

Είμαστε επίσης ειλικρινείς για τον στόχο. Ο στόχος είναι μηδέν πραγματικά σφάλματα, τελεία — όμως το «μηδέν» είναι μια κατεύθυνση προς την οποία αλέθουμε, γλώσσα προς γλώσσα, όχι ένα κουτάκι που τσεκάρεται. Πάντα υπάρχει ένα ακόμη αποθετήριο με ακόμη έναν ιδιωματισμό.

Κερδισμένο, Όχι Διακηρυγμένο

Ό,τι κάνει το Maguyva για έναν πράκτορα — η εύρεση ενός συμβόλου, η ανίχνευση μιας εξάρτησης, η απάντηση σε μια ερώτηση με παραπομπές σε κώδικα — στηρίζεται στο να είναι σωστή η εξαγωγή από κάτω. Σε 280 γλώσσες, το «σωστό» δεν μπορεί απλώς να διακηρυχθεί· πρέπει να κερδίζεται συνεχώς έναντι πραγματικού κώδικα. Ο βρόχος είναι το πώς το κερδίζουμε: ένας αυτόνομος κύκλος δειγματοληπτικού ελέγχου-και-διόρθωσης που αντιμετωπίζει τις δικές του μετρικές με καχυποψία, αποδεικνύει κάθε αλλαγή και μετατρέπει κάθε διόρθωση σε φρουρό ενάντια στην επόμενη οπισθοδρόμηση. Δεν είναι εντυπωσιακό. Είναι η δουλειά που μας επιτρέπει να λέμε «υποστηρίζουμε τη γλώσσα σας» και να το εννοούμε. Το πράσινο είναι εύκολο. Το σωστό κερδίζεται.

Σχετική ανάγνωση

Περισσότερα από το ημερολόγιο κατασκευής του Maguyva

Γιατί Αναβαθμίσαμε την Αναζήτηση Κώδικα σε voyage-4-large_

Μεταφέραμε τα ενσωματώματα κώδικά μας στο voyage-4-large — προς το παρόν στην κορυφή του δημόσιου πίνακα κατάταξης ανάκτησης κώδικα RTEB. Η ειλικρινής εκδοχή: το ανταλλάγμα που κάνουμε, τι πραγματικά ευρετηριάζουμε και γιατί πληρώνουμε για ενσωματώματα πρέμιουμ.

[Ενσωματώσεις][Αναζήτηση][Αρχιτεκτονική]

Πολυτροπική Συγχωνευμένη Αναζήτηση: Επιλέγοντας τον Σωστό Ανακτητή για Κάθε Ερώτημα_

Ένα ερώτημα όπως «πού ορίζεται το parseConfig» θέλει διαφορετική αναζήτηση από το «πώς λειτουργεί η ταυτοποίηση». Το Maguyva ταξινομεί την πρόθεση, σταθμίζει ανάλογα τέσσερις τρόπους ανάκτησης και συγχωνεύει τα αποτελέσματα με σταθμισμένη Reciprocal Rank Fusion.

[Αναζήτηση][Αρχιτεκτονική]

Παρατηρησιμότητα Πρακτόρων: Hooks, Alloy και Grafana_

Συνδέσαμε το Claude Code και το Codex σε μία ενιαία στοίβα Grafana με OpenTelemetry και Alloy, και έπειτα χρησιμοποιήσαμε ίχνη (traces) και αρχεία καταγραφής για να εντοπίσουμε και να διορθώσουμε προβλήματα συμπεριφοράς πρακτόρων στην πηγή τους.

[Παρατηρησιμότητα][Grafana][OpenTelemetry][Αρχιτεκτονική]