जो मैंने कहा वही कहो: बिना AI rewrite वाला डिक्टेशन
AI डिक्टेशन कही बात बदलता है: शर्तें छूटती हैं, अर्थ पलटता है। LLM polish आपको paraphrase क्यों करती है, और Keebye शब्दशः क्यों रहता है।
AI से सँवारे गए डिक्टेशन के बारे में एक शिकायत है जो तब तक विरोधाभासी लगती है जब तक आपने उसे जिया न हो: ट्रांसक्रिप्शन तो ठीक था — जो ट्रांसक्रिप्शन के बाद हुआ, उसी ने सब बिगाड़ा। आपने एक बात कही, और टूल ने एक सँवरी हुई, आत्मविश्वास से भरी, थोड़ी-सी अलग बात पहुँचा दी। कोई शर्त चुपचाप गिरा दी गई। कोई हिचक हटा दी गई। कोई वाक्य ऐसी शक्ल में गढ़ दिया गया जो आप कभी न कहते। और इस पैटर्न के सबसे बुरे रूप में — वही जो लोगों से मौक़े पर ही टूल छुड़वा देता है — अर्थ ही पलट जाता है। “मत deploy करो जब तक tests पास न हो जाएँ” दूसरे सिरे से deploy करने के निर्देश की तरह निकलता है, मत के बिना।
कभी-कभार के डिक्टेशन के लिए यह झुँझलाहट है। पर मैं डिक्टेशन जिस तरह इस्तेमाल करता हूँ — Claude Code को prompts खिलाते हुए, वही workflow जो अपनी आवाज़ से Claude Code चलाना में है — उसके लिए यह ज़हर है। कोई coding agent आपके शब्दों को specification की तरह लेता है। उसे नहीं पता कि आपके डिक्टेशन टूल ने आपको paraphrase कर दिया। अगर वह शर्त, जिसने उस निर्देश को सुरक्षित बनाया था, आपके मुँह और terminal के बीच कहीं चिकनी करके हटा दी गई, तो agent ख़ुशी-ख़ुशी उसी चिकने रूप को चला देगा। किसी prompt का पूरा मक़सद सटीकता है, और AI rewrite की परत एक ऐसी मशीन है जो सटीकता हटाते हुए नतीजे को और ज़्यादा सोचा-समझा दिखाती है।
AI डिक्टेशन टूल्स आपकी कही बात दोबारा क्यों लिखते हैं?
Category-स्तर का जवाब यह नहीं है कि किसी ने speech बिगाड़ने का इरादा किया था। बात यह है कि “इस ट्रांसक्रिप्शन को साफ़ कर दो” सचमुच एक लुभावना फ़ीचर है, और उसे बनाने का ज़ाहिर तरीक़ा यही है कि कच्चे transcript को किसी language model से गुज़ार दिया जाए।
कच्ची speech गंदी होती है — filler, अधूरी शुरुआतें, दोहराए हुए शब्द, ग़ायब punctuation। किसी LLM से यह सब सँवारने को कहें तो output बहुत सुंदर निकलता है। दिक़्क़त यह है कि language model एडिट नहीं करता, जिस तरह “um” हटाता कोई इंसानी copyeditor एडिट करता है। वह दोबारा गढ़ता है। Output एक नया text है जिसे मॉडल आपके input का एक अच्छा रूप मानता है, और “अच्छा” वहीं है जहाँ से आपका इरादा रिसकर बाहर निकल जाता है। मददगारी और प्रवाह की तरफ़ प्रशिक्षित मॉडलों की अपनी राय होती है: हिचकें शोर लगती हैं, शर्तें बेतरतीबी लगती हैं, कोई अटपटी-पर-सटीक बनावट सुधारने लायक़ चीज़ लगती है। ज़्यादातर बार यह rewrite बेज़रर होता है। पर वह संभावनाओं पर चलता है, और output देखकर आप यह नहीं बता सकते कि कौन-से वाक्य transcribe हुए और कौन-से रचे गए। चमक हर जगह एक-सी है; वफ़ादारी नहीं।
LLM-polish pipelines की गहरी समस्या यही है: वे चुपचाप और आत्मविश्वास से नाकाम होती हैं। आपको ग़लत सुनने वाला speech recognizer आम तौर पर कुछ ऐसा बनाता है जो दिखने में ही ग़लत है। धोखा देने वाली rewrite परत कुछ ऐसा बनाती है जो दिखने में सही है — व्याकरण-सम्मत, भरोसे लायक़, आपकी ही आवाज़ पहने हुए — और ठीक इसीलिए उलटा हुआ “मत deploy करो” पकड़े जाने के बजाय भेज दिया जाता है।
डिफ़ॉल्ट रूप से शब्दशः
Keebye का रुख़ सीधा है: speech-to-text मॉडल ने जो सुना, वही आपके cursor पर उतरता है। डिफ़ॉल्ट रूप से ट्रांसक्रिप्शन और आपके terminal के बीच कोई language model बैठकर आपका बेहतर संस्करण नहीं रचता — डिफ़ॉल्ट polish चरण नियमों की एक छोटी, निश्चित सूची है, बस इतना ही।
यह एक सोचा-समझा दाँव है, और वह vibecoding वाले इस्तेमाल से आता है। जब आपका डिक्टेशन coding agents के लिए control channel है, तो टूल का काम ढुलाई है, लेखन नहीं। लेखक आप हैं; agent श्रोता है; डिक्टेशन की परत की कोई राय नहीं होनी चाहिए। वह workflow — पूरे prompts टाइप करने के बजाय बोलना — AI prompts के लिए वॉइस डिक्टेशन में रखा गया है।
Keebye में एक LLM polish है — उस तक पहुँचता हूँ — पर वह जान-बूझकर चुनने पर ही चलता है, पूरी तरह आपकी मशीन पर चलता है, और एक ऐसे पहरे के नीचे काम करता है जो बहकाव, बेक़ाबू फैलाव और दोहराव के आम रूपों को ख़ारिज करने के लिए बनाया गया है। अगर output वह जाँच नहीं पास करता, तो Keebye नियमों पर लौट आता है। डिफ़ॉल्ट नियम ही रहते हैं।
तो cleanup असल में करता क्या है?
शब्दशः होने का मतलब कच्चा होना ज़रूरी नहीं। Keebye एक वैकल्पिक cleanup चरण देता है — enhancement, जो डिफ़ॉल्ट रूप से चालू है और हर ऐप के लिए अलग से बदला जा सकता है — पर वह rule-based है, कोई मॉडल नहीं, और वह क्या-क्या करता है उसकी पूरी सूची एक पैराग्राफ़ में आ जाती है:
यह अलग-थलग खड़े filler शब्द हटाता है (um, uh, erm, you know)। यह तुरंत दोहराए गए शब्दों को समेट देता है — "the the" बनकर "the" रह जाता है। यह whitespace समेटता है। यह पहला अक्षर बड़ा करता है, और अगर आपने अंत में विराम नहीं लगाया तो एक विराम जोड़ देता है। बस यही पूरी सूची है। ये नियम निश्चित हैं और बहुत सँकरे दायरे के; ये जान-बूझकर उपवाक्यों का क्रम नहीं बदलते, नकार नहीं हटाते, और पर्यायवाची नहीं रखते।
Cleanup चलने से पहले आपकी डिक्शनरी की जगहें लागू होती हैं — jargon और उन संज्ञाओं के लिए ख़ुद तय किए गए विकल्प जिन्हें speech मॉडल बिगाड़ देते हैं, ताकि “pnpm” और आपके module के नाम वैसे ही लिखे हुए पहुँचें जैसे आपका codebase उन्हें लिखता है।
और अगर rule-based चरण भी आपकी चाहत से ज़्यादा दख़ल है, तो enhancement बंद कर दें और Keebye speech मॉडल का कच्चा transcript डाल देता है: filler, दोहराव, सब कुछ समेत। कुछ संदर्भों के लिए — किसी को उद्धृत करते हुए, या ऐसे field में डिक्टेट करते हुए जहाँ अंत का विराम चीज़ें तोड़ देता है — कच्चा transcript ही बेहतर चुनाव है, और हर ऐप के लिए अलग सेटिंग आपको वही चुनने देती है।
जान-बूझकर चुना जाने वाला polish, और उसके इर्द-गिर्द का fidelity पहरा
अब वह LLM, जिस तक पहुँचने का वादा किया था। जो लोग सचमुच ज़्यादा समझदार cleanup चाहते हैं, उनके लिए Keebye एक वैकल्पिक polish mode देता है (polish_mode को local_llm पर सेट करके): llama.cpp के ज़रिए on-device चलता एक छोटा Qwen3 मॉडल, Metal से तेज़ किया हुआ, कहीं कुछ भेजे बिना। इसके निर्देश polish का सँकरा रूप हैं — punctuation और capitalization ठीक करो, filler हटाओ, user के ठीक वही शब्द, वही भाषा और वही अर्थ रखो, code और filenames ज्यों के त्यों बचाओ। Generation निश्चित है (greedy sampling, एक ही input → एक ही output) और उसकी सीमा बँधी है; अगर मॉडल दो सेकंड की समयसीमा से आगे अटक जाए, तो उसका output छोड़ दिया जाता है।
पर निर्देश उम्मीदें हैं, और यह लेख इसीलिए मौजूद है कि उम्मीदें गारंटियाँ नहीं होतीं। इसलिए LLM से सँवारा हर नतीजा आपके cursor तक पहुँचने से पहले एक fidelity पहरे से गुज़रता है। Output में मूल ट्रांसक्रिप्शन के कम से कम 50% tokens बचे रहने चाहिए। उसे फूलना नहीं चाहिए — मोटे तौर पर मूल लंबाई के दोगुने (और चार tokens) से आगे कुछ भी नाकाम माना जाता है। बेक़ाबू दोहराव पकड़ा जाता है। अगर सँवारा हुआ नतीजा इनमें से कोई जाँच नहीं पास करता, तो Keebye उसे फेंक देता है और इसके बजाय rule-based cleanup पर लौट आता है।
वह पहरा गंभीर token loss, बेक़ाबू फैलाव और दोहराव को तब पकड़ लेता है जब तक मॉडल का output नियमों से साफ़ किए गए transcript की जगह नहीं ले पाता। यह एक heuristic है, कोई अर्थ का प्रमाण नहीं: कोई छोटी rewrite या बदला हुआ नकार अब भी उसकी सीमाओं से निकल सकता है। अगर कोई शर्त बहक नहीं सकती, तो AI polish बंद रखें और भेजने से पहले डाला गया text जाँच लें।
ईमानदार सीमाएँ
शब्दशः का मतलब शब्दशः। अगर आप बहकते हैं, तो आपका बहकना ही उतरता है — जान-बूझकर चुना जाने वाला polish भी cleanup की तरफ़ निर्देशित और पहरेदार है, रचना की तरफ़ नहीं, इसलिए Keebye किसी भटकते ख़याल को चुस्त निर्देश में नहीं बदलेगा। जो कहना है वही कहने का अनुशासन आपके ही पास रहता है।
Rule-based cleanup जान-बूझकर बुद्धू है। वह “um” हटाता है; वह आपका व्याकरण ठीक नहीं करेगा, किसी लंबे बहते वाक्य को दोबारा नहीं गढ़ेगा, और यह भी नहीं भाँपेगा कि आपने ख़ुद अपनी बात काट दी। इससे ज़्यादा समझदार कुछ भी वही फ़ैसले वापस ले आएगा जिनसे बचने के लिए यह design मौजूद है।
और fidelity rewrite से बचाती है, ग़लत पहचान से नहीं। अगर speech मॉडल “cache” को “cash” सुन ले, तो वह ग़लती वफ़ादारी से बचा ली जाती है — पहरे को कुछ पता नहीं कि आप कहना क्या चाहते थे, सिर्फ़ यह पता है कि transcribe क्या हुआ। शब्दशः डिक्टेशन भरोसे की सरहद STT मॉडल तक सरका देता है; उसे मिटाता नहीं। (इससे जुड़ी बात: अगर आपकी समस्या यह है कि मॉडल पूरी तरह ग़लत भाषा में transcribe कर रहा है, तो वह अलग नाकामी है जिसका इलाज भी अलग है — अपनी डिक्टेशन भाषा pin करें।)
आख़िर में, category के स्तर पर बात: AI polish कोई धोखा नहीं है, और बहुत से users सचमुच ऐसा output पसंद करते हैं जो उनके बोलने से ज़्यादा चिकना पढ़ा जाए। अगर वह आप हैं, तो दूसरे टूल्स इसमें अच्छे से झुकते हैं, और हमारी तुलनाएँ यह ईमानदारी से कहती हैं — Keebye vs Wispr Flow और Keebye vs Superwhisper, दोनों में एक असली “दूसरा टूल कब बेहतर बैठता है” वाला हिस्सा है।
ढुलाई, लेखन नहीं
Keebye जो सौदा देता है वह जान-बूझकर सँकरा है: आप बोलते हैं, और हल्का-सा साफ़ किया हुआ transcript वहाँ उतरता है जहाँ आपका cursor है। जब वे शब्द किसी ऐसे agent के लिए prompts हों जो उन पर शब्दशः अमल करेगा, तब सँकरा होना ही फ़ीचर है। किसी developer के साथ कोई डिक्टेशन टूल जो सबसे महँगी चीज़ कर सकता है वह कोई typo नहीं है। वह एक बहता हुआ वाक्य है जो आपने कभी कहा ही नहीं।
Keebye macOS के लिए अर्ली ऐक्सेस में है। नीचे अपना फ़्री ट्रायल शुरू करें, “मत deploy करो जब तक tests पास न हो जाएँ” डिक्टेट करें, और जाँचें कि वह ठीक-ठीक शर्त cleanup से बचकर निकलती है या नहीं। वही टेस्ट पूरा प्रोडक्ट है।
वह निर्देश टेस्ट करें जो बहक नहीं सकता
अपना फ़्री ट्रायल शुरू करें और कोई ऐसा prompt डिक्टेट करें जिसमें कोई निर्णायक शर्त हो—ख़ासकर कोई ‘मत’—फिर देखें कि पहुँचता क्या है।
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.
आगे पढ़ें
पैरलल agents को prompts डिक्टेट करना, lane दर lane
दो-तीन coding agents एक साथ चलाते ही prompting अड़चन बन जाती है। जिस lane में हैं उसे छोड़े बिना बाकी lanes को खिलाने का एक वॉइस workflow।
अपनी आवाज़ से Claude Code चलाना: पैरलल-lane वाली बिल्डिंग
AI coding agents ने टाइपिंग को अड़चन बना दिया। macOS पर पैरलल agent lanes के आर-पार prompts, reviews और redirects डिक्टेट करने का एक व्यावहारिक workflow।
ऐसा डिक्टेशन जो terminal में टिक जाए
Terminals, SSH, tmux और non-QWERTY layouts में डिक्टेशन paste चुपचाप नाकाम होता है। Clipboard insertion क्यों टूटता है, और typing mode क्या करता है।