
Proč AI přepis komolí technické termíny (a jak jsme to opravili)
Živá session slyšela "what is the pointer in C++" jako "what is the point in life". Tady je forenzní stopa od toho přepisu ke GeekBye v2.0.11 — keyterm biasing, časovací závod shazující spojení a den, kdy se nám vlastní oprava vymstila.
Dne 2. července jsme spustili testovací session a nahlas položili GeekBye jednoduchou otázku: "What is the pointer in C++?" (česky: „co je pointer v C++?")
Živý přepis odpověděl poezií:
[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.
Stejná session — zbytek dopověděly zdravotní metriky: 3 spadlá přepisová spojení za 163 sekund a 51sekundová díra v přepisu. A ještě jedna stopa, která se nakonec ukázala jako nejdůležitější: náš záchranný průchod po skončení session — který znovu přepisuje lokálně uložené audio, aby zaplnil mezery — trefil větu skoro správně: "a pointer in plus, plus? What the pointer in plus, plus C++."
Zvuk byl v pořádku. Živý model prostě neměl důvod čekat C++.
Tohle je příběh GeekBye v2.0.11, vyprávěný přímo ze skutečných přepisů a produkčních logů.
Proč řečové modely komolí vaši slovní zásobu
Rozpoznávání řeči je predikční úloha. U nejednoznačného zvuku model volí nejpravděpodobnější slova — a pro univerzální model je "point in life" (tedy „smysl života") mnohem pravděpodobnější fráze než "pointer in C++" („pointer v C++"). Každý inženýr, který viděl přepis meetingu vykreslit Kubernetes jako "cube and eddies", tenhle typ selhání zná.
Řešením není lepší mikrofon. Je jím keyterm biasing: říct modelu ještě před začátkem session, která nepravděpodobná slova jsou pravděpodobná u vás. Náš řečový provider podporuje až 50 biasing termínů na session. A teď ta trapná část: potrubí pro tyto termíny existovalo v našem stacku od jednoho konce k druhému — klient, backend, provider — a nikdy ho nic nenaplnilo. Každá session běžela s nulovou oborovou pomocí.
Oprava 1: váš profil se stane slovníkem modelu
GeekBye váš obor už zná — je ve vašem aktivním profilu. v2.0.11 odvozuje biasing keyterms z názvu a popisu profilu: termíny se symboly (C++, Node.js), zkratky (SQL, AWS), camel-case názvy (TypeScript, PostgreSQL) a vlastní jména. Profil zmiňující váš stack teď dělá z toho stacku něco očekávaného, ne exotického.
Den, kdy oprava všechno zhoršila
Naše první verze považovala každé slovo s velkým písmenem za vlastní jméno. Na interním testovacím buildu (tohle se k zákazníkům nikdy nedostalo) poslal profil psaný v próze modelu tento biasing seznam:
Senior, Writing, Direct, For, Includes, Write, Role, Intent…
Navádět řečový model ke slovu "For" je horší než ho nenavádět vůbec. Hned v další testovací session se slovo "speak" — vyslovené zřetelně, několikrát — vrátilo jako "Clicky", "Hey, Vicky" a "Peter Paderty". Lekce nás stála jedno odpoledne: biasujte jen výraznými termíny. Slova s velkým písmenem se teď počítají, jen když se objeví uprostřed věty (skutečný signál vlastního jména); markdown nadpisy, kde má velké písmeno každé slovo, nepřispívají nikdy. Tentýž profil teď odvozuje přesně LinkedIn, AI, CEO, MCP — a validační session správně přepsala vícejazyčné, rychle se přepínající audio po 199 sekund v kuse, 189 segmentů přepisu, nula chyb.
Oprava 2: závod, který shazoval spojení
Keyterms vysvětlily zkomolená slova. Nevysvětlily ale tři spadlá spojení.
Ta stopa vedla k něčemu subtilnějšímu. Náš provider commituje (finalizuje) přepis podle vlastní detekce hlasové aktivity, zhruba sekundu po nástupu ticha. Náš klient také posílá pojistný commit 250 milisekund po nástupu ticha, aby vyprázdnil jakoukoli nedořečenou větu, která zůstala viset. Potvrzení providera, že už commitnul, cestuje zpátky jednu až tři sekundy. Spočítejte si to s těmito třemi čísly: kdykoli provider commitnul první, náš pojistný commit vystřelil proti skoro prázdnému bufferu — a odpověď providera na to nebyla jen zdvořilé odmítnutí. Shodila spojení. Každá pauza v řeči byla hod mincí.
v2.0.11 přináší dvě vrstvy obrany:
- V aplikaci: když dorazí commitnutý přepis, klient teď ví, že buffer providera byl právě vyprázdněn, a nadbytečný pojistný commit přeskočí.
- V našem backendu, tentýž den: proxy sedící mezi aplikací a providerem přesně zrcadlí audio účetnictví providera — vidí každý audio frame a každé potvrzení commitu s nulovou latencí — a prostě odmítne přeposlat jakýkoli commit, který by provider zamítl. Tahle vrstva chrání všechny verze klienta najednou, včetně uživatelů, kteří neaktualizovali.
Do hodiny jsme to viděli fungovat v produkci. Pojistka zachytila odsouzené commity nesoucí 178 ms a 256 ms bufferovaného audia — každý z nich byl do toho dne zaručeně spadlé spojení a díra v něčích poznámkách z meetingu. 60minutová nepřetržitá session to odpoledne zaznamenala pět zachycení a nula výpadků. Před opravou si reálný uživatel to samé ráno restartoval nahrávání pětkrát za šest minut v boji přesně s tímhle bugem.
Dvě menší opravy, které jedou s sebou
AI postřehy teď čekají na podstatu. Ty zkomolené rané útržky dřív krmily živé čipy s návrhy v GeekBye, které z přeslechnuté otázky na C++ sebevědomě vyráběly témata jako "Defining Life's Ultimate Purpose". Návrhy teď čekají, dokud session nemá skutečnou konverzační hmotu.
Obnovený text dostane správného mluvčího. Záchranný průchod, který naši otázku na C++ přepsal správně, ji připsal mluvčímu "Them". Lokálně ukládaná audio časová osa teď zaznamenává, kdo mluvil, takže obnovené segmenty se správně přiřadí k You nebo Them.
Výsledková tabule
| Metrika (změřená, ne odhadnutá) | Před | Po v2.0.11 + backendové pojistce |
|---|---|---|
| Výpadky spojení v testovací session | 3 za 163 s | 0 |
| Nejdelší díra v přepisu | 51 s | nejhorší mezera ~6 s při validaci |
| "pointer in C++" | "point in life" | správně, s biasovaným slovníkem |
| Odsouzené commity, které dorazily k providerovi | všechny | 0 (zachyceny na backendu) |
Pokud stavíte na realtime speech API
Tři přenositelné lekce z tohoto vydání:
- Nakrmte biasing funkci. Pokud váš STT provider podporuje keyterms/phrase hints, naplnit je malým, výrazným slovníkem je nejlevnější dostupný zisk přesnosti — a naplnit je běžnými slovy je ztráta přesnosti.
- Nikdy nezávoďte se stavovým automatem providera ze špatné strany síťového round-tripu. Náš klient nemohl vyhrát informační závod 250 ms vs. 3 s. Pojistka patří tam, kde se oba signály sbíhají — u nás na backendovou proxy.
- Validujte na živém buildu před publikací. Regrese s keyterms se chytila proto, že každé vydání GeekBye se před expedicí testuje jako podepsaný, notarizovaný build proti produkci. Špatná verze existovala pár hodin na jednom interním stroji, ne na vašem Macu.
GeekBye v2.0.11 je už venku — pokud jste na v2, máte ho přes auto-update. Pro spolehlivostní základy, na kterých tohle vydání staví, viz proč se váš AI notetaker zastaví na špatné Wi-Fi a co se změnilo v GeekBye v2. Jak funguje živý přepis v každodenním provozu — začněte u přepisu v reálném čase v GeekBye.

