Säg det jag sa: diktering utan AI-omskrivning

AI-diktering skriver om dina ord: förbehåll försvinner, betydelsen vänds. Varför LLM-polering parafraserar dig och Keebye förblir bokstavlig.

Teodor Deleanu10 juli 20267 min läsning

Det finns ett klagomål om AI-förbättrad diktering som låter paradoxalt tills du har levt det: transkriptionen var bra — det var det som hände efter transkriptionen som förstörde den. Du sa en sak, och verktyget levererade en polerad, självsäker, aningen annan sak. Ett förbehåll tyst borttaget. En reservation struken. En mening ombyggd till något du aldrig skulle säga. Och i mönstrets värsta version — den som får folk att lämna ett verktyg på fläcken — kastas betydelsen om. ”Deploya inte förrän testerna går igenom” kommer ut i andra änden som en instruktion om att deploya, minus inte.

För tillfällig diktering är det här ett irritationsmoment. För hur jag faktiskt använder diktering — att mata prompter till Claude Code, arbetsflödet från att styra Claude Code med rösten — är det gift. En kodagent tar dina ord som en specifikation. Den vet inte att ditt dikteringsverktyg parafraserade dig. Om förbehållet som gjorde instruktionen säker slätades bort mellan din mun och terminalen kommer agenten glatt att köra den utslätade versionen. Precision är hela poängen med en prompt, och ett lager av AI-omskrivning är en maskin för att ta bort precision samtidigt som resultatet ser mer genomtänkt ut.

Varför skriver AI-dikteringsverktyg om det du sa?

Svaret på kategorinivå är inte att någon satte sig ner för att förvränga tal. Det är att ”städa upp den här transkriptionen” är en genuint tilltalande funktion, och det uppenbara sättet att bygga den är att köra råtranskriptionen genom en språkmodell.

Rått tal är rörigt — utfyllnadsord, felstarter, upprepade ord, saknad interpunktion. En LLM som ombeds snygga till det producerar vacker utdata. Problemet är att en språkmodell inte redigerar, på det sätt en mänsklig redaktör som stryker ”um” redigerar. Den genererar om. Utdatan är en ny text som modellen anser är en bra version av din indata, och ”bra” är där din intention läcker ut. Modeller tränade mot hjälpsamhet och flyt har åsikter: reservationer ser ut som brus, förbehåll ser ut som skräp, en klumpig-men-precis formulering ser ut som något att förbättra. För det mesta är omskrivningen ofarlig. Men den är sannolikhetsbaserad, och du kan inte se på utdatan vilka meningar som transkriberades och vilka som komponerades. Poleringen är jämn; troheten är det inte.

Det är det djupa problemet med LLM-poleringar: de fallerar tyst och självsäkert. En taligenkännare som hör fel producerar oftast något synligt fel. Ett omskrivningslager som sviker dig producerar något synligt rätt — grammatiskt, rimligt, iklätt din röst — vilket är exakt varför det omvända ”deploya inte” skickas i stället för att fångas.

Bokstavlig som standard

Keebyes hållning är enkel: det tal-till-text-modellen hörde är det som landar vid din markör. Som standard sitter ingen språkmodell mellan transkriptionen och din terminal och komponerar en bättre version av dig — standardsteget för polering är en kort lista deterministiska regler, och det är allt.

Det är en medveten satsning, och den kommer från vibecoding-användningen. När din diktering är styrkanalen för kodagenter är verktygets jobb transport, inte författarskap. Du är författaren; agenten är publiken; dikteringslagret ska inte ha några åsikter. Det arbetsflödet — att tala hela prompter i stället för att skriva dem — beskrivs i röstdiktering för AI-prompter.

Det finns en LLM-polering i Keebye — jag kommer till den — men den är ett tillval, den körs helt på din maskin, och den arbetar under en kontroll utformad för att avvisa vanliga former av glidning, skenande expansion och upprepning. Om utdatan underkänns i den kontrollen faller Keebye tillbaka på reglerna. Standard förblir regler.

Så vad gör uppstädningen egentligen?

Bokstavlig behöver inte betyda rå. Keebye levererar ett valfritt uppstädningssteg — förbättring, påslagen som standard och överstyrbar per app — men det är regelbaserat, inte en modell, och hela listan över vad det gör ryms i ett stycke.

Det tar bort fristående utfyllnadsord (um, uh, erm, you know). Det slår ihop omedelbara ordupprepningar — ”the the” blir ”the”. Det slår ihop blanksteg. Det versaliserar första bokstaven, och det lägger till en avslutande punkt om du inte satte någon. Det är hela listan. Reglerna är deterministiska och snävt avgränsade; de omordnar inte satser medvetet, tar inte bort negationer och byter inte ut synonymer.

Innan uppstädningen körs tillämpas dina ordlisteersättningar — användardefinierade utbyten för den jargong och de egennamn som talmodeller manglar, så att ”pnpm” och dina modulnamn kommer fram stavade som din kodbas stavar dem.

Och om till och med det regelbaserade steget är mer ingrepp än du vill ha, stäng av förbättringen så matar Keebye in talmodellens råa transkription: utfyllnadsord, upprepningar och allt. För vissa sammanhang — att citera någon, att diktera in i ett fält där den avslutande punkten ställer till det — är råtranskriptionen det bättre valet, och överstyrningen per app låter dig välja den.

Poleringen du väljer till, och trohetskontrollen runt den

Nu till LLM:en jag lovade att komma till. För dem som faktiskt vill ha smartare uppstädning erbjuder Keebye ett valfritt poleringsläge (polish_mode satt till local_llm): en liten Qwen3-modell som körs på enheten via llama.cpp, Metal-accelererad, ingenting skickas någonstans. Dess instruktioner är den snäva versionen av polering — rätta interpunktion och versalisering, ta bort utfyllnadsord, behåll användarens exakta ord, språk och betydelse, bevara kod och filnamn ordagrant. Genereringen är deterministisk (girig sampling, samma indata → samma utdata) och begränsad; om modellen hakar upp sig förbi en tidsgräns på två sekunder överges dess utdata.

Men instruktioner är förhoppningar, och den här artikeln finns för att förhoppningar inte är garantier. Så varje LLM-polerat resultat passerar en trohetskontroll innan det får röra din markör. Utdatan måste behålla minst 50 % av den ursprungliga transkriptionens tokens. Den får inte svälla — allt förbi ungefär dubbla ursprungslängden (plus fyra tokens) underkänns. Skenande upprepning upptäcks. Om det polerade resultatet underkänns i någon av de kontrollerna kastar Keebye det och faller tillbaka på den regelbaserade uppstädningen i stället.

Den kontrollen fångar kraftig tokenförlust, skenande expansion och upprepning innan modellens utdata kan ersätta den regelstädade transkriptionen. Den är en heuristik, inte ett semantiskt bevis: en kort omskrivning eller en ändrad negation kan fortfarande passera dess trösklar. Om ett förbehåll inte har råd att glida, håll AI-poleringen avstängd och granska den inmatade texten innan du skickar den.

De ärliga gränserna

Bokstavlig betyder bokstavlig. Om du svamlar landar ditt svammel — även den valfria poleringen är instruerad och bevakad mot uppstädning, inte komposition, så Keebye förvandlar inte en irrande tanke till en skarp instruktion. Disciplinen att säga vad du menar stannar hos dig.

Den regelbaserade uppstädningen är avsiktligt dum. Den tar bort ”um”; den fixar inte din grammatik, bygger inte om en löpande mening och märker inte att du motsade dig själv. Något smartare skulle återinföra just de bedömningarna den här designen finns för att undvika.

Och trohet skyddar mot omskrivning, inte mot feltolkning. Om talmodellen hör ”cache” som ”cash” bevaras det felet troget — kontrollen har ingen aning om vad du menade att säga, bara om vad som transkriberades. Bokstavlig diktering flyttar tillitsgränsen till tal-till-text-modellen; den tar inte bort den. (Besläktat: om ditt problem är att modellen transkriberar på helt fel språk är det ett annat fel med en annan lösning — lås ditt dikteringsspråk.)

Slutligen inramningen på kategorinivå: AI-polering är ingen bluff, och gott om användare föredrar genuint utdata som läser sig jämnare än de talar. Om det är du lutar sig andra verktyg in i det väl, och våra jämförelser säger det ärligt — Keebye vs Wispr Flow och Keebye vs Superwhisper innehåller båda ett riktigt avsnitt om ”när det andra verktyget passar bättre”.

Transport, inte författarskap

Avtalet Keebye erbjuder är snävt med flit: du pratar, och en lätt städad transkription landar där din markör är. När de orden är prompter till en agent som kommer att agera bokstavligt på dem är snävt en funktion. Det dyraste ett dikteringsverktyg kan göra mot en utvecklare är inte ett stavfel. Det är en flytande mening du aldrig sa.

Keebye är i tidig åtkomst för macOS. Starta din kostnadsfria provperiod nedan, diktera ”Deploya inte förrän testerna går igenom”, och kontrollera om exakt det villkoret överlever uppstädningen. Det testet är hela produkten.

Testa instruktionen som inte har råd att glida

Starta din kostnadsfria provperiod och diktera en prompt med ett kritiskt förbehåll — särskilt ett ”inte” — och granska sedan vad som kommer fram.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Läs vidare