
Γιατί η μεταγραφή με AI παρακούει τους τεχνικούς όρους (και πώς το διορθώσαμε)
Μια live συνεδρία άκουσε το "what is the pointer in C++" ως "what is the point in life". Ιδού το ίχνος από εκείνο το transcript μέχρι το GeekBye v2.0.11 — keyterm biasing, μια κούρσα χρονισμού που έριχνε τη σύνδεση, και η μέρα που το ίδιο μας το fix γύρισε μπούμερανγκ.
Στις 2 Ιουλίου τρέξαμε μια δοκιμαστική συνεδρία και κάναμε στο GeekBye μια απλή ερώτηση φωναχτά: "What is the pointer in C++?" (στα ελληνικά: «τι είναι ο pointer στη C++;»)
Το live transcript απάντησε με ποίηση:
[23:16:37] You: Tell me, what is the point in life? [23:16:52] You: Handy Plus. [23:17:02] You: What the pointer in Plus Plus? [23:17:09] You: C.
Ίδια συνεδρία — τα health metrics είπαν τα υπόλοιπα: 3 πεσμένες συνδέσεις μεταγραφής σε 163 δευτερόλεπτα και μια τρύπα 51 δευτερολέπτων στο transcript. Και ένα ακόμη στοιχείο που αποδείχθηκε το πιο σημαντικό: το πέρασμα ανάκτησης μετά τη συνεδρία — που ξαναμεταγράφει τον τοπικά αποθηκευμένο ήχο για να γεμίσει τα κενά — πέτυχε την πρόταση σχεδόν σωστά: "a pointer in plus, plus? What the pointer in plus, plus C++."
Ο ήχος ήταν μια χαρά. Το live μοντέλο απλώς δεν είχε κανέναν λόγο να περιμένει C++.
Αυτή είναι η ιστορία του GeekBye v2.0.11, ειπωμένη μέσα από τα πραγματικά transcripts και τα production logs.
Γιατί τα μοντέλα ομιλίας παρακούν το λεξιλόγιό σου
Η αναγνώριση ομιλίας είναι πρόβλημα πρόβλεψης. Μπροστά σε διφορούμενο ήχο, το μοντέλο διαλέγει τις πιθανότερες λέξεις — και για ένα μοντέλο γενικής χρήσης, το "point in life" (δηλαδή «το νόημα της ζωής») είναι πολύ πιθανότερη φράση από το "pointer in C++" («ο pointer στη C++»). Κάθε μηχανικός που έχει δει ένα transcript σύσκεψης να αποδίδει το Kubernetes ως "cube and eddies" έχει συναντήσει αυτή την αποτυχία.
Η λύση δεν είναι ένα καλύτερο μικρόφωνο. Είναι το keyterm biasing: να πεις στο μοντέλο, πριν ξεκινήσει η συνεδρία, ποιες απίθανες λέξεις είναι πιθανές για σένα. Ο provider ομιλίας μας υποστηρίζει έως 50 όρους biasing ανά συνεδρία. Και τώρα το ντροπιαστικό κομμάτι: η υποδομή για αυτούς τους όρους υπήρχε από άκρη σε άκρη στο stack μας — client, backend, provider — και τίποτα δεν την είχε τροφοδοτήσει ποτέ. Κάθε συνεδρία έτρεχε με μηδενική βοήθεια τομέα.
Fix 1: το προφίλ σου γίνεται το λεξιλόγιο του μοντέλου
Το GeekBye ξέρει ήδη τον τομέα σου — βρίσκεται στο ενεργό σου προφίλ. Το v2.0.11 παράγει keyterms biasing από το όνομα και την περιγραφή του προφίλ: όρους με σύμβολα (C++, Node.js), ακρωνύμια (SQL, AWS), ονόματα camel-case (TypeScript, PostgreSQL) και κύρια ονόματα. Ένα προφίλ που αναφέρει το stack σου κάνει πλέον αυτό το stack αναμενόμενο αντί για εξωτικό.
Η μέρα που το fix τα έκανε όλα χειρότερα
Η πρώτη μας έκδοση αντιμετώπιζε κάθε λέξη με κεφαλαίο ως κύριο όνομα. Σε ένα εσωτερικό test build (αυτό δεν έφτασε ποτέ σε πελάτες), ένα προφίλ γραμμένο σε πεζό λόγο έστειλε στο μοντέλο αυτή τη λίστα biasing:
Senior, Writing, Direct, For, Includes, Write, Role, Intent…
Το να καθοδηγείς ένα μοντέλο ομιλίας προς τη λέξη "For" είναι χειρότερο από το να μην το καθοδηγείς καθόλου. Στην αμέσως επόμενη δοκιμαστική συνεδρία, η λέξη "speak" — ειπωμένη καθαρά, πολλές φορές — επέστρεψε ως "Clicky", "Hey, Vicky" και "Peter Paderty". Το μάθημα μάς κόστισε ένα απόγευμα: κάνε biasing μόνο με διακριτούς όρους. Οι λέξεις με κεφαλαίο μετράνε πλέον μόνο όταν εμφανίζονται στη μέση πρότασης (γνήσιο σήμα κύριου ονόματος)· οι επικεφαλίδες markdown, όπου κάθε λέξη γράφεται με κεφαλαίο, δεν συνεισφέρουν ποτέ. Το ίδιο προφίλ παράγει τώρα ακριβώς LinkedIn, AI, CEO, MCP — και η συνεδρία επικύρωσης μετέγραψε σωστά πολύγλωσσο ήχο με γρήγορες εναλλαγές για 199 συνεχόμενα δευτερόλεπτα, 189 τμήματα transcript, μηδέν σφάλματα.
Fix 2: η κούρσα που έριχνε τις συνδέσεις
Τα keyterms εξήγησαν τις παρακουσμένες λέξεις. Δεν εξήγησαν τις τρεις πεσμένες συνδέσεις.
Εκείνο το ίχνος οδήγησε κάπου πιο λεπτό. Ο provider μας κάνει commit (οριστικοποιεί) τη μεταγραφή με βάση τη δική του ανίχνευση φωνητικής δραστηριότητας, περίπου ένα δευτερόλεπτο μέσα στη σιωπή. Ο client μας στέλνει επίσης ένα commit ασφαλείας 250 χιλιοστά του δευτερολέπτου μέσα στη σιωπή, για να αδειάσει όποια μισή πρόταση έχει μείνει να κρέμεται. Η επιβεβαίωση του provider ότι έχει ήδη κάνει commit χρειάζεται ένα έως τρία δευτερόλεπτα για να γυρίσει πίσω. Κάνε τα μαθηματικά με αυτούς τους τρεις αριθμούς: όποτε ο provider έκανε commit πρώτος, το commit ασφαλείας μας πυροδοτούνταν πάνω σε έναν σχεδόν άδειο buffer — και η απάντηση του provider σε αυτό δεν ήταν απλώς μια ευγενική απόρριψη. Έριχνε τη σύνδεση. Κάθε παύση στην ομιλία ήταν κορώνα-γράμματα.
Το v2.0.11 φέρνει δύο στρώματα προστασίας:
- Στην εφαρμογή: όταν φτάνει ένα commit-αρισμένο transcript, ο client ξέρει πλέον ότι ο buffer του provider μόλις άδειασε και παραλείπει το περιττό commit ασφαλείας.
- Στο backend μας, την ίδια μέρα: ο proxy που κάθεται ανάμεσα στην εφαρμογή και τον provider καθρεφτίζει ακριβώς τη λογιστική ήχου του provider — βλέπει κάθε audio frame και κάθε επιβεβαίωση commit με μηδενική καθυστέρηση — και απλώς αρνείται να προωθήσει οποιοδήποτε commit ο provider θα απέρριπτε. Αυτό προστατεύει όλες τις εκδόσεις client ταυτόχρονα, συμπεριλαμβανομένων των χρηστών που δεν έχουν ενημερώσει.
Το είδαμε να δουλεύει στην παραγωγή μέσα σε μία ώρα. Το guard αναχαίτισε καταδικασμένα commits που κουβαλούσαν 178ms και 256ms buffered ήχου — καθένα από αυτά, πριν από εκείνη τη μέρα, μια εγγυημένα πεσμένη σύνδεση και ένα κενό στις σημειώσεις της σύσκεψης κάποιου. Μια συνεχόμενη συνεδρία 60 λεπτών εκείνο το απόγευμα κατέγραψε πέντε αναχαιτίσεις και μηδέν πτώσεις. Πριν από το fix, ένας πραγματικός χρήστης το ίδιο πρωί είχε επανεκκινήσει την ηχογράφησή του πέντε φορές μέσα σε έξι λεπτά παλεύοντας ακριβώς με αυτό το bug.
Δύο μικρότερα fixes που έρχονται μαζί
Τα AI insights περιμένουν πλέον ουσία. Εκείνα τα αλλοιωμένα πρώιμα αποσπάσματα τροφοδοτούσαν τα live chips προτάσεων του GeekBye, τα οποία παρήγαγαν με αυτοπεποίθηση θέματα όπως "Defining Life's Ultimate Purpose" από μια παρακουσμένη ερώτηση για C++. Οι προτάσεις περιμένουν τώρα μέχρι η συνεδρία να αποκτήσει πραγματικό συνομιλητικό όγκο.
Το ανακτημένο κείμενο παίρνει τον σωστό ομιλητή. Το πέρασμα ανάκτησης που μετέγραψε σωστά την ερώτησή μας για C++ την είχε αποδώσει στο "Them". Το τοπικά αποθηκευμένο χρονολόγιο ήχου καταγράφει πλέον ποιος μιλούσε, ώστε τα ανακτημένα τμήματα να αποδίδονται σωστά σε You ή Them.
Ο πίνακας αποτελεσμάτων
| Μετρική (μετρημένη, όχι εκτιμώμενη) | Πριν | Μετά το v2.0.11 + backend guard |
|---|---|---|
| Πτώσεις σύνδεσης στη δοκιμαστική συνεδρία | 3 σε 163s | 0 |
| Μεγαλύτερη τρύπα στο transcript | 51s | χειρότερο κενό ~6s στην επικύρωση |
| "pointer in C++" | "point in life" | σωστό, με biased λεξιλόγιο |
| Καταδικασμένα commits που έφταναν στον provider | όλα | 0 (αναχαιτίζονται στο backend) |
Αν χτίζεις πάνω σε realtime speech APIs
Τρία μεταφέρσιμα μαθήματα από αυτή την έκδοση:
- Τροφοδότησε τη λειτουργία biasing. Αν ο STT provider σου υποστηρίζει keyterms/phrase hints, το να τη γεμίσεις με ένα μικρό, διακριτό λεξιλόγιο είναι το φθηνότερο διαθέσιμο κέρδος ακρίβειας — και το να τη γεμίσεις με κοινές λέξεις είναι απώλεια ακρίβειας.
- Μην τρέχεις ποτέ κόντρα στη state machine του provider από τη λάθος πλευρά ενός network round-trip. Ο client μας δεν μπορούσε να κερδίσει μια κούρσα πληροφορίας 250ms έναντι 3s. Το guard ανήκει εκεί όπου συγκλίνουν και τα δύο σήματα — για εμάς, στον backend proxy.
- Επικύρωσε σε live build πριν δημοσιεύσεις. Η παλινδρόμηση των keyterms πιάστηκε επειδή κάθε έκδοση του GeekBye δοκιμάζεται ως υπογεγραμμένο, notarized build απέναντι στην παραγωγή πριν κυκλοφορήσει. Η κακή έκδοση υπήρξε για λίγες ώρες σε ένα εσωτερικό μηχάνημα, όχι στο Mac σου.
Το GeekBye v2.0.11 είναι ήδη live — αν είσαι στο v2, το έχεις ήδη μέσω auto-update. Για τα θεμέλια αξιοπιστίας πάνω στα οποία χτίζει αυτή η έκδοση, δες γιατί ο AI notetaker σου σταματά σε κακό Wi-Fi και τι άλλαξε στο GeekBye v2. Για το πώς δουλεύει η live μεταγραφή στην καθημερινότητα, ξεκίνα με τη μεταγραφή σε πραγματικό χρόνο στο GeekBye.


