Building Vaani (वाणी) - Минимална, приватна, универзална апликација за десктоп за говор до текст
Пред неколку дена, религиозно го гледав најновото видео од Андреј Карпатија каде што го претстави Vibe Coding.
Јас сум се користи АИ код асистенти за некое време, но се уште сум многу вклучени во процесот на кодирање. АИ е главно дејствува како паметен авто-завршување, преземање на досадни бојлер плоча работи, пишување docstrings, или понекогаш објаснување на кодот што го напишав вчера и удобно заборавени. Vibe кодирање звучеше повеќе како дипломирање од авто-завршување на вистински ко-креирање - промена од АИ како асистент на АИ како вистински кодирање партнер.
Интригиран од оваа потенцијална промена на парадигмата, одлучив да го доживеам од прва рака. Во истото видео, Андреј сподели дека го користи гласот како примарно внесување околу 50% од времето, бидејќи е интуитивно и поефикасно. Тој предложи некои опции за Mac кои дејствуваат како универзални алатки за говор до текст кои работат низ повеќе апликации. Јас првенствено работам на Windows за интеракција со апликации и Linux преку командната линија.Voice Accessшто е супер бавно), одлучив да изградам еден за себе.Имав неколку други потенцијални идеи, но се прилагодив на ова како што сакав да изградам
- тоа во програмски јазик што добро го знам - Python Ѕидот
- нешто што јас сум концептуално непознат со - аудио фаќање и обработка, native UI Ѕидот
- алатка што навистина би ја користел, а не само играчка Ѕидот
- нешто корисно за заедницата што можам да го отворам со извор Ѕидот
- Научете нешто ново на патот Ѕидот
Целта -Изградете минимална, приватна, универзална апликација за говор до текст за десктоп
- Ѕидот
- Минимално - прави една работа навистина добро - говор до текст Ѕидот
- Приватен - Ништо не ја напушта мојата машина, сè офлајн Ѕидот
- Универзална - треба да работи со било која апликација за Windows Ѕидот
- Cross Platform - Добро да се има Ѕидот
Јас го викамВани (वाणी), што значи "говорот" или "гласот" воСанскрит. на
ВаниСанскрит
GitHub
https://github.com/webstruck/vaani-speech-to-text
Инсталација
pip install vaani-speech-to-text
Демо
Оваа статија го хронизира патувањето на зградатаVaaniТоа е практично истражување на тоа како навистина се чувствува кодирањето на вибрациите – возбудливата брзина, неочекуваните пречки, моментите на вистински увид и лекциите научени кога интензивно соработувате со АИ.Клод Соннет 3.7, најдобриот (повторно, врз основа на општата вибрација) достапен асистент за кодирање во тоа време.Следна Статија Google Gemini 2.5 Proбеше пуштен и решив да го користам како прегледувач на код.
BTW, овој напис е во голема мера диктиран со користење наVaani😊
Ајде да вибаме.
Поставувањето
AI DeveloperКлод Соннет 3.7
AI Code ReviewerПретходна Вест Gemini 2.5 Pro Preview
AI Developer и AI Code Reviewer секогаш имале комплетен код како контекст за секој повик. Иницирав нов разговор откако ќе се постигне одредена цел, на пример, грешка е поправена или функција е имплементирана и работи успешно. го направив ова за да го управувам контекстниот прозорец и да обезбедам најдобри перформанси на AI. Не користев агентски IDEs (на пример, Cursor, Windsurf, итн.) и наместо тоа се потпирав наЏорџ ДесктопиGoogle AI студиоИсто така, избегнав какви било менувања на рачниот код со намера да го пуштам кодот со отворен код за проучување на заедницата.
The Initial Spark: From Zero to Scaffolding во секунди
Значи, од каде да почнеме? Традиционално, ова вклучува темелно планирање. На пример, нацртање на компоненти, дизајнирање на интерфејси, избор на библиотеки и поставување на структурата на проектот.
ЅидотСакам да изградам лесна апликација за говор до текст во Python за корисниците на Windows. Идејата е да им помогне на корисниците на Windows брзо да пишуваат работи користејќи го гласот во која било апликација, на пример, зборот, PowerPoint, прелистувачот итн Апликацијата треба да работи локално без интернет за приватност.
Ѕидот
I want to build a lightweight speech to text app in Python for Windows users. The idea is to help Windows users write things quickly using voice in any application e.g. word, powerpoint, browser etc. The app should work locally without the internet for privacy. Should activate using hot key or hot word.
Искрено за својата репутација,Клод Соннет 3.7Тоа генерираше сеопфатна апликациска структура речиси веднаш, комплетна со:
- Ѕидот
- Интеграција на системската трака со користење на Tkinter Ѕидот
- Глобална детекција на точни клучеви со помош на тастатура Ѕидот
- Визуелен индикатор за повратна информација Ѕидот
- Постојаност на UI Ѕидот
- Говор на текст со користење на воск Ѕидот
- Основен аудио менаџер Ѕидот
- Главна влезна точка Ѕидот
- Пакување со користење на pyinstaller Ѕидот
Почетната фаза совршено ја фати атракцијата на вибе кодирање: заобиколување на часови на дизајн и основно кодирање, се движи директно од идејата до опиплив (иако бугги) апликациски скелет.
Возење на брановите: Основната итерација лупа
Со основните компоненти на место, вистинскиот развој започна со поставување во посебен ритам – јадрото на AI-асистираниот vibe кодирање:
- Ѕидот
- Функција Забавка / Извештај за грешки: Би ја опишал посакуваната функција ("Да додадеме детекција на жешки зборови") или да пријавам проблем ("Резултатите од транскрипцијата не се појавуваат!"). Ѕидот
- АИ генерација на код: АИ ќе го обработува барањето и ќе генерира кодови, понекогаш менувајќи постоечки функции, а понекогаш и додавање на сосема нови модули. Ѕидот
- Интеграција и тестирање: Ќе го интегрирам кодот на АИ во апликацијата и рачно ќе ја тестирам функционалноста. Ѕидот
- Ако не (што беше често!), Јас ќе се вратам на чекор 1, обезбедување на повеќе специфични детали за грешка или опишување на несаканото однесување. Ѕидот
Овој круг беше неверојатно брз, но исто така тешкоРеактивноНие не го следиме големиот дизајн; ние се движиме по видот, само ги поправуваме проблемите.ПоНабрзо се појавија клучните предизвици:
- Ѕидот
- Првичните обиди за поврзување на различни делови на апликацијата (како што е аудио влезот во транскрипциониот мотор) едноставно не успеале да комуницираат правилно. Ѕидот
- Комплексноста на конкуренцијата: Интегрирањето на позадинските задачи (како што е континуираната аудио обработка) со интерфејсот на корисникот доведе до „класични“ проблеми со истовремена работа – несреќи или закачувања поврзани со пристапот до споделени ресурси или ажурирање на интерфејсот на корисникот од погрешна нишка. Ѕидот
- Постојаност на состојбата на корисникот: Добивањето на прозорецот со поставки за безбедно да ги зачувате и вчитате корисничките преференции се покажа изненадувачки тешко. Ѕидот
- Континуирана обработка на говорот: Кога беше побарано да се изгради систем за континуирана обработка на говорот, вештачката интелигенција излезе со претежно софистицирано решение кое вклучуваше континуирано фаќање, сегментирање, паралелно обработка, наредено вметнување, контекстуална свест и така натаму. Ѕидот
Оваа фаза ја истакна силната моќ на вештачката интелигенција за итерација, но исто така и потенцијалниот хаос на дебугирање на кодот генериран од друго суштество, потпирајќи се на вештачката интелигенција за да ги поправи сопствените грешки врз основа на вашите набљудувања.
"Чекај, зошто го правиме ова?" - Пивоти и неопходни проверки на реалноста
додекаКлодДемонстрирани импресивни кодирање способности, добивање на повеќето работи во право на првиот чекор, тоа не беше непогрешлив.Клодна предлози.Клодсе чинеше желни да ги над-инженерираат решенијата што го прават исклучително сложен во обид да го направат генерализиран.Клодпредложил софистицирана класа на буфер за податоци. Работеше, но се чувствуваше премногу комплексно. Откако ја поставив прашањето за потребата за оваа комплексност, се согласи и се свртивме кон многу поедноставна директна имплементација со откривање на природни паузи. Ова е кога сфатив дека интуицијата на програмерите за едноставност и прагматизам е вредна компензација за потенцијалниот премногу ентузијазам за АИ.
Друг пример беше кога имплементиравме аудио калибрација и продолживме (потоа што Близнаците со право го истакнаа проблемот со ефикасноста) во поставките. Подоцна, се појави практична мисла: "Дали оваа калибрација не е специфична за микрофонот што се користи?".КлодПрво се препорачува складирање на поставувањата за калибрацијапо уред, но обврзани со поедноставно решение: само повторно калибрирајте ако уредот за влез се менува.Повторно, земајќи го предвид практичниот контекст на употреба (повеќето корисници веројатно нема да ги менуваат уредите за влез често), изборот да се продолжи со аудио калибрирање за само 1 уред имал смисла.
Овие моменти нагласуваат дека ефективното кодирање на вибрациите не е пасивно прифаќање; тоа е активен дијалог каде што програмерот води, поставува прашања, а понекогаш ја коригира траекторијата на АИ.Ѕидот
Овие моменти нагласуваат дека ефективното кодирање на вибрациите не е пасивно прифаќање; тоа е активен дијалог каде што програмерот води, поставува прашања, а понекогаш ја коригира траекторијата на АИ.
Овие моменти нагласуваат дека ефективното кодирање на вибрациите не е пасивно прифаќање; тоа е активен дијалог каде што програмерот води, поставува прашања, а понекогаш ја коригира траекторијата на АИ.
Defining the "Vibe": How Vaani Embodied This Approach
Размислувајќи заVaaniПатот на развојот, тој ги покажа главните карактеристики често поврзани со vibe кодирање:
- Ѕидот
- Минимална спецификација однапред: Започнете со цел, а не детален план. Ѕидот
- АИ како примарен имплементатор: АИ го напиша огромното мнозинство од почетниот код и последователните карактеристики / поправки. Ѕидот
- Усовршувања насочени кон интуиција: Промените често биле водени од субјективни тестирања ("квалитетот се чувствува лошо", "елементот на корисничкиот интерфејс треба да биде подвижен") наместо формални барања. Ѕидот
- Emergent design: The application's architecture and feature set evolved organically and reactively. For example, simplifying the core audio pipeline, and adding concurrency controls later or replacing Tkinter with PySide6 for (threading) simplification and a modern look. Ѕидот
- Дебагирање делегација: Мојата улога во поправање на грешките често беше да се пријават симптомите прецизно, така што вештачката интелигенција може да генерира лек. Ѕидот
Ова е во согласност со тековната дискусија за дефинирање на vibe кодирањето по неговата брзина, зависност од природен јазик, а понекогаш и помал степен на контрола од страна на програмерите.СпектраленДодекаVaaniПроектот, кој започнал во близина на крајот на „чистата вибрација“, природно се префрлил кон поголема структура (барање за модуларизација и ревизија на кодот) како што созревал и се приближил до издавањето.
Покрај хипот: Романовите увид од Trenches
Работејќи толку тесно со вештачката интелигенција на комплетен проект, добивме некои увид кој оди подалеку од типичната приказна „вештачката интелигенција е брза, но прави грешки“.
- Ѕидот
- Вештачката интелигенција има тенденција кон премногу инженеринг: Повторно, првото решение на вештачката интелигенција беше покомплексно отколку што е потребно (на пример, почетна архитектура, буфер на текст, ракување со конфигурации). Ѕидот
- Програмерот како суштински филтер и валидатор: Ова не беше само пасивно кодирање. Мојата улога се разви во онаа на критичен валидатор, проверка на реалноста и филтер за комплексност. Прашување на АИ зошто оваа архитектура беше толку важна како и барањето нови карактеристики. Ѕидот
- Неизбежната промена кон структурата: чистата кодирање вибрација го направи проектот надвор од земјата неверојатно брзо. Сепак, за да се направи Vaani одржлив и подготвен за издавање (особено за отворен код) потребен е свесен пресврт. експлицитно барање модуларизација, анализа на квалитетот на кодот и рефакторирање станаа клучни во подоцнежните фази. Vibe кодирање може да биде чекор еден, но традиционалните инженерски принципи се уште се потребни за силен одржлив софтвер. Ѕидот
- Имплицитно учење против длабоко разбирање: Научив многу со дебугирање на кодот на АИ. Сепак, бидејќи АИ често обезбедува директни поправки, не морав секогаш да го постигнам најдлабокото ниво на разбирање за тоа зошто се случиле одредени сложени проблеми (како суптилни услови на трката или специфични чудни карактеристики на рамката на корисничкиот интерфејс). Ѕидот
Двојно остриот меч: Вежбање на предностите и недостатоците
Pros:
- Ѕидот
- Блезинг Брзина: Прототипирање и иницијална имплементација на карактеристики се неверојатно побрзи. Ѕидот
- AI може брзо да генерира код за комплексни задачи (интегрирање на библиотеки, ракување со concurrency), намалувајќи ја бариерата за влез. Ѕидот
- Boilerplate Buster: Тедните поставки и повторувачкиот код се обработуваат автоматски. Ѕидот
- Присилно учење (преку дебугирање): Поправување на грешките на вештачката интелигенција често ги принудува да го разберат доменот на проблемот, индиректно поттикнување на учењето. Ѕидот
Cons:
- Ѕидот
- Висок ризик од суптилни грешки: Брзото генерирање и реактивното дебугирање лесно може да ги пропушти случаите на ранг, условите на трката или подлабоките логички недостатоци. Ѕидот
- Потенцијалот за слаба архитектура: Првичните избор на дизајн на вештачката интелигенција може да бидат субоптимални или премногу сложени ако не се критички оценети од страна на програмерот. Ѕидот
- Тешки дебугирачки циклуси: Поправување на код што не сте го напишале, особено кога вештачката интелигенција се бори со основниот проблем (како што е комплексна состојба или истовремена состојба), може да биде фрустрирачки и потребно време. Ѕидот
- Загриженост за одржливоста: Органично одгледуван, AI-генериран код може да стане збунет и тешко да се разбере без намерно рефакторирање и структурирање. Ѕидот
- Потенцијалот за ерозија на вештините: Претераната зависност може да го попречи развојот на фундаменталниот дизајн, дебагирањето, архитектонските вештини и, што е најважно, човечката интуиција. Ѕидот
- Нефункционални барања Занемарување: Безбедноста, перформансите, управувањето со ресурсите и сеопфатното управување со грешки лесно може да се игнорираат во брзањето за функционалност. Ѕидот
Тамирање на вибрацијата: препораки за ефикасна соработка
Vibe кодирањето е несомнено моќна алатка, но бара вештина за ефикасно користење.Ако сте искусен програмер и размислувате за овој пристап, тука се моите општи препораки врз основа на моето искуство во градењетоVaani. на
- Ѕидот
- Валидирајте, не само прифатете: третирајте го кодот на АИ како нацрт. Прашајте ги неговите архитектонски избори ("Зошто овој модел? Ѕидот
- Дејствува како филтер за комплексност: Ако решението за вештачка интелигенција изгледа премногу комплексно или користи нејасни модели без добра причина, потиснете назад. Ѕидот
- Планирање на структурата: Признајте дека на почетниот прототип кодиран со vibe најверојатно ќе му треба рафинирање. буџетско време за рефакторирање – подобрување на модуларноста, додавање на јасна документација (коментари, READMEs) и подобрување на квалитетот на кодот пред да се разгледа проектот стабилен или подготвен за пуштање. Ѕидот
- Фокусирајте се на разбирање: Не само копирајте го кодот на АИ. Користете го АИ како тутор. Кога обезбедува поправка или сложен дел од кодот, побарајте од него да го објасни размислувањето зад него. Ѕидот
- Користење на воспоставените алатки и практики: Како што вештачката интелигенција ја забрзува итерацијата, одржувањето на квалитетот на софтверот станува уште покритично. Прифатете го автоматизираното тестирање рано – единиците и тестовите за интеграција обезбедуваат суштински безбедносни мрежи против регресии. Парете го ова со алатки за квалитет на кодот и статички анализи (како што се лантери и анализатори) за да ги фатите грешките, проблемите со стилот и анти-моделите кои може да ги заобиколат луѓето и вештачката интелигенција. Ѕидот
Заклучок: Vibe кодирање - моќен партнер, а не замена
Мојата патничка зградаVaaniТаа фундаментално го менува работниот тек на развојот, нудејќи невидена брзина во преведувањето на идеи во функционален код. Тоа ми овозможи, еден развивач, да изградам прилично сложена апликација во дел од времето (~ 15 часа) што традиционално би можело да биде потребно.
Vaani
Сепак, тоа не е магија. Тоа е соработка која бара комуникација, критичко размислување и надзор. АИ делува како неверојатно брз, знаечки, но понекогаш премногу ентузијастичен асистент. Тоа може да генерира сложена логика во секунди, но може да го пропушти наједноставно решение или да ги игнорира реалните ограничувања или практичност.
Вистинската моќ се појавува кога програмерот активно се ангажира – насочувајќи ја вештачката интелигенција, поставувајќи ги во прашање нејзините претпоставки, валидирајќи го нејзиниот излез и применувајќи ги основните принципи на софтверското инженерство. Vibe кодирањето не ги заменува вештините на програмерите, туку го менува кон архитектура, валидација, ефикасно поттикнување и критичка интеграција.