Spune ce am spus: dictare fără rescrierea făcută de AI
Dictarea cu AI rescrie ce spui: pierde nuanțe, inversează sensul. De ce șlefuirea cu LLM te parafrazează și de ce Keebye rămâne literal.
Există o plângere despre dictarea îmbunătățită de AI care sună paradoxal până când o trăiești: transcrierea a fost în regulă — ce s-a întâmplat după transcriere a stricat totul. Ai spus un lucru, iar instrumentul a livrat un lucru șlefuit, sigur pe sine și ușor diferit. O nuanță scăpată discret. O ezitare eliminată. O propoziție restructurată în ceva ce n-ai spune niciodată. Iar în cea mai rea versiune a tiparului — cea care îi face pe oameni să renunțe pe loc la un instrument — sensul se inversează. „Nu face deploy până nu trec testele" iese la celălalt capăt ca o instrucțiune despre deploy, fără nu-ul din față.
Pentru dictarea ocazională, asta e o enervare. Pentru felul în care folosesc eu dictarea — hrănind cu prompturi Claude Code, fluxul de lucru din Cum conduci Claude Code cu vocea — e otravă. Un agent de programare îți ia cuvintele drept specificație. Nu știe că instrumentul tău de dictare te-a parafrazat. Dacă nuanța care făcea instrucțiunea sigură a fost netezită undeva între gura ta și terminal, agentul va executa voios versiunea netezită. Precizia e tot rostul unui prompt, iar un strat de rescriere AI e o mașinărie de eliminat precizia făcând rezultatul să pară mai deliberat.
De ce rescriu instrumentele de dictare AI ce ai spus?
Răspunsul la nivel de categorie nu e că cineva și-a propus să distorsioneze vorbirea. E că „curăță transcrierea asta" e o funcție cu adevărat atrăgătoare, iar modul evident de a o construi e să treci transcrierea brută printr-un model de limbaj.
Vorbirea brută e dezordonată — umpluturi, începuturi false, cuvinte repetate, punctuație lipsă. Un LLM căruia i se cere să facă ordine produce un rezultat frumos. Necazul e că un model de limbaj nu editează, în felul în care editează un corector uman care scoate un „ăăă". El regenerează. Rezultatul e un text nou, pe care modelul îl consideră o versiune bună a inputului tău, iar „bună" e locul pe unde se scurge intenția ta. Modelele antrenate spre utilitate și fluență au opinii: ezitările arată ca zgomot, nuanțele arată ca dezordine, o formulare stângace-dar-precisă arată ca ceva de îmbunătățit. De cele mai multe ori rescrierea e inofensivă. Dar e probabilistă și nu poți spune din rezultat ce propoziții au fost transcrise și care au fost compuse. Șlefuirea e uniformă; fidelitatea, nu.
Asta e problema profundă a pipeline-urilor de șlefuire cu LLM: eșuează în tăcere și cu încredere. Un recunoscător vocal care te aude greșit produce de obicei ceva vizibil greșit. Un strat de rescriere care te trădează produce ceva vizibil corect — gramatical, plauzibil, purtându-ți vocea — exact de aceea „nu face deploy" inversat ajunge trimis, nu prins.
Literal, implicit
Poziția lui Keebye e simplă: ce a auzit modelul de speech-to-text e ce ajunge la cursorul tău. Implicit, niciun model de limbaj nu stă între transcriere și terminalul tău compunând o versiune mai bună a ta — etapa implicită de șlefuire e o listă scurtă de reguli deterministe, și atât.
Ăsta e un pariu deliberat și vine din cazul de utilizare vibecoding. Când dictarea ta e canalul de control pentru agenți de programare, treaba instrumentului e transportul, nu autoratul. Tu ești autorul; agentul e publicul; stratul de dictare nu ar trebui să aibă opinii. Fluxul acela de lucru — rostirea de prompturi întregi în loc să le tastezi — e descris în dictare vocală pentru prompturi AI.
Există o șlefuire prin LLM în Keebye — ajung și la ea — dar e opt-in, rulează complet pe mașina ta și operează sub o gardă proiectată să respingă forme comune de deviație, expansiune scăpată de sub control și repetiție. Dacă rezultatul pică verificarea aceea, Keebye revine la reguli. Implicitul rămân regulile.
Deci ce face de fapt curățarea?
Literal nu trebuie să însemne brut. Keebye vine cu o etapă opțională de curățare — îmbunătățirea, activă implicit și suprascriabilă per aplicație — dar e pe bază de reguli, nu un model, iar lista completă a ce face încape într-un paragraf:
Elimină cuvintele de umplutură de sine stătătoare (um, uh, erm, you know). Comprimă repetările imediate de cuvinte — „the the" devine „the". Comprimă spațiile albe. Scrie cu majusculă prima literă și adaugă un punct final dacă nu ai terminat cu unul. Asta e toată lista. Regulile sunt deterministe și îngust delimitate; ele nu reordonează deliberat propoziții, nu elimină negații și nu substituie sinonime.
Înainte să ruleze curățarea, se aplică substituțiile din dicționarul tău — înlocuiri definite de utilizator pentru jargonul și numele proprii pe care modelele de speech le mutilează, astfel încât „pnpm" și numele modulelor tale să ajungă scrise așa cum le scrie codebase-ul tău.
Iar dacă până și etapa pe bază de reguli e mai multă intervenție decât vrei, dezactivează îmbunătățirea, iar Keebye inserează transcrierea brută a modelului de speech: umpluturi, repetări și tot. Pentru unele contexte — când citezi pe cineva, când dictezi într-un câmp unde punctul final strică lucrurile — transcrierea brută e alegerea mai bună, iar suprascrierea per aplicație te lasă să o alegi.
Șlefuirea opt-in și garda de fidelitate din jurul ei
Acum, LLM-ul la care am promis că ajung. Pentru cei care chiar vor o curățare mai deșteaptă, Keebye oferă un mod opțional de șlefuire (polish_mode setat pe local_llm): un model Qwen3 mic, rulând on-device prin llama.cpp, accelerat cu Metal, fără să se trimită nimic nicăieri. Instrucțiunile lui sunt versiunea îngustă a șlefuirii — repară punctuația și majusculele, elimină umpluturile, păstrează cuvintele exacte, limba și sensul utilizatorului, păstrează codul și numele de fișiere verbatim. Generarea e deterministă (greedy sampling, același input → același output) și plafonată; dacă modelul se blochează peste un termen de două secunde, rezultatul lui e abandonat.
Dar instrucțiunile sunt speranțe, iar articolul ăsta există pentru că speranțele nu sunt garanții. Așa că fiecare rezultat șlefuit de LLM trece printr-o gardă de fidelitate înainte să poată atinge cursorul tău. Rezultatul trebuie să păstreze cel puțin 50% din tokenii transcrierii originale. Nu trebuie să se umfle — orice trece de aproximativ dublul lungimii originale (plus patru tokeni) pică. Repetiția scăpată de sub control e detectată. Dacă rezultatul șlefuit pică una dintre verificările acelea, Keebye îl aruncă și revine în schimb la curățarea pe bază de reguli.
Garda aceea prinde pierderea severă de tokeni, expansiunea scăpată de sub control și repetiția, înainte ca rezultatul modelului să poată înlocui transcrierea curățată prin reguli. Este o euristică, nu o demonstrație semantică: o rescriere scurtă sau o negație schimbată i-ar putea trece totuși pragurile. Dacă o nuanță nu-și permite să devieze, ține șlefuirea AI oprită și revizuiește textul inserat înainte să-l trimiți.
Limitele sincere
Literal înseamnă literal. Dacă divaghezi, divagația ta ajunge la destinație — până și șlefuirea opt-in e instruită și păzită înspre curățare, nu compoziție, așa că Keebye nu va transforma un gând șerpuit într-o instrucțiune tăioasă. Disciplina de a spune ce vrei să spui rămâne la tine.
Curățarea pe bază de reguli e intenționat proastă. Elimină „um"; nu-ți va repara gramatica, nu va restructura o frază-fluviu și nu va observa că te-ai contrazis. Orice mai deștept ar reintroduce exact judecățile de valoare pentru evitarea cărora există designul ăsta.
Iar fidelitatea protejează împotriva rescrierii, nu a recunoașterii greșite. Dacă modelul de speech aude „cache" drept „cash", eroarea aceea e păstrată fidel — garda nu are nicio idee ce ai vrut să spui, doar ce a fost transcris. Dictarea literală mută granița de încredere la modelul STT; nu o elimină. (Înrudit: dacă problema ta e că modelul transcrie complet în limba greșită, ăla e alt eșec, cu altă soluție — fixează-ți limba de dictare.)
În fine, încadrarea la nivel de categorie: șlefuirea AI nu e o țeapă, iar destui utilizatori chiar preferă un rezultat care se citește mai neted decât vorbesc ei. Dacă tu ești acela, alte instrumente merg bine pe direcția asta, iar comparațiile noastre o spun sincer — Keebye vs Wispr Flow și Keebye vs Superwhisper includ amândouă o secțiune reală de „când ți se potrivește mai bine celălalt instrument".
Transport, nu autorat
Înțelegerea pe care o oferă Keebye e îngustă intenționat: vorbești, iar o transcriere curățată ușor ajunge acolo unde e cursorul tău. Când cuvintele acelea sunt prompturi către un agent care va acționa literal pe baza lor, îngust e o calitate. Cel mai scump lucru pe care i-l poate face un instrument de dictare unui dezvoltator nu e o greșeală de scriere. E o propoziție fluentă pe care nu ai rostit-o niciodată.
Keebye este în acces anticipat pentru macOS. Începe proba gratuită mai jos, dictează „Nu face deploy până nu trec testele" și verifică dacă exact constrângerea aceea supraviețuiește curățării. Testul acela este întregul produs.
Testează instrucțiunea care nu-și permite să devieze
Începe proba gratuită și dictează un prompt cu o nuanță critică — mai ales un „nu" — apoi inspectează ce ajunge acolo.
Start free trialEarly access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.
Citește mai departe
Dictarea prompturilor către agenți paraleli, lane cu lane
Rularea a doi sau trei agenți de programare simultan face din prompt gâtuirea. Un flux vocal pentru a hrăni lane-uri paralele fără să pleci din cel curent.
Claude Code cu vocea: lucru pe lane-uri paralele
Agenții AI au făcut din tastare un blocaj. Un flux practic pentru dictarea de prompturi, review-uri și schimbări de direcție pe lane-uri paralele în macOS.
Dictarea care supraviețuiește terminalului
Paste-ul dictării eșuează în terminale, SSH, tmux și layout-uri non-QWERTY, fără avertisment. De ce se rupe inserarea prin clipboard și cum ajută tastarea.