Aru Ai-дың құрылу тарихы
Бастама
Өзім үшін жаңа көкжиектер ашып, әзірлеу мен нағыз бағдарламалық өнімдер архитектурасы әлеміне енуді ұйғарғаныма міне бір жыл болды. Бұрын код жазбадым немесе өзім мен команда үшін қандай да бір утилиталар жасамадым деп айта алмаймын, бірақ мен бүкіл әлемнің қайда бара жатқанына қарап, python-ды үйрене бастадым. Айдың соңында мен aiogram көмегімен боттар жасадым, ал наурыз айында дәйексөздер мен оқиғалары бар ойын-сауық боттарын жасауға арналған админ панелі бар жоба жасадым, айтпақшы, ол үлкен ақшаға болмаса да, Еуропаның бір жеріне сәтті ұшып кетті, бірақ бұл маған жақсы мотивация берді.
2025 жылдың наурызы, Алматыға көшу және Reddit арқылы тапсырыспен жасалған көптеген боттар. Бұл өте қызық болды, әсіресе Үндістаннан келген студенттер бірге оқу үшін тестілеу боттарына тапсырыс берген кезде.
Наурыз және сәуір айларында әртүрлі боттар жасай жүріп, мен Қазақстанда жарияланатын бос жұмыс орындарына назар аудара бастадым. Мессенджерлердегі боттар арқылы автоматтандырумен байланысты жұмыстар өте көп болды.
Мен бұл мәселені зерттей бастадым және Еуропа мен АҚШ-та WhatsAPP отбасы мен достар үшін, ал Telegram жұмыс пен бизнес үшін деген жазылмаған бөлініс болса, Қазақстанда (және басқа да кейбір елдерде) бәрі керісінше екенін түсіндім.
Неліктен бұлай? Жауап өте қарапайым болып шықты - қызметкерлер тіпті код жазбайтын, бірақ бот логикасын жасау және ЖИ қосу үшін блок-схемалар түріндегі түйін (node) редакторларын пайдаланатын компаниялардың үлкен ұсынысы. Бот жасаушылардың өздері аудиторияны түсінбегендіктен, бизнес Telegram мен Whatsapp-тағы аудиторияның артықшылықтары немесе айырмашылықтары туралы тіпті білмейді.
Неліктен мен бұл мақалада боттар мен мессенджерлерге соншалықты көп уақыт бөлемін де, бірден Aru Ai-ға көшпеймін?
Мен адамдарға Telegram артықшылықтарын нақты көрсететін және сонымен бірге оны баптауды барынша оңайлататын, ең дұрысы - тек мәтіндік сипаттамалардан тұратын құрал беру керек екенін түсіндім. Promptly жобасы осылай дүниеге келді. Осы жазбаны жасау кезінде жобалар бөлімінде ол туралы ақпарат бар, бірақ сіз кірген кезде ол толық емес болуы мүмкін, өйткені мен жобаны басқа стекке толығымен қайта жасап жатырмын және фронтендте тұрып қалдым.
Әзірлеу барысында мен бот ақылды ғана емес, сонымен қатар қаншалықты оғаш көрінсе де, әңгіме контекстін түсінуі керек деген қорытындыға келдім. Сонымен қатар, ол тауарларды көрсету бұйрықтарын тануы немесе чаттың өзінде инлайн түймелерді салуы керек. Шешім? Семантикалық модельдер.
Менің жобамның бірінші нұсқасы шыққан кезде, ол бірден дерлік жұмыс істеп кетті. Мен тапсырыспен бірнеше бот жасадым, қазір менің бастапқы жобам Үндістан, Еуропа және АҚШ серверлерінің бір жерінде айналып жатыр. Содан кейін Алматыдағы жұмыс берушілер бұған назар аударып, маған Myna жобасын жасауды ұсынды (ол туралы да жобалар парақшасында ақпарат бар).
Бірақ бір 'бірақ' болды...
Семантикаға арналған сынақ полигоны
Жоба ми ретінде Gemini-ді пайдаланып жұмыс істеді, таңдау айқын болды - орауыштарды (wrapper) оңай жасау және ең бастысы ТЕГІН ТИР (FREE TIER) :)
Семантикамен бәрі күрделі болды, нақты есімде жоқ, бірақ екі апта бойы мен косинустық ұқсастықты орындау үшін семантикалық модельдердің құрылымына терең бойлап, әртүрлі алгоритмдерді қолданып көрдім. Бір кезде жобада тесттер жасау ыңғайсыз болды, сондықтан мен жеке чат-бот түрінде шағын сынақ стендін жинауды ұйғардым.
Өкінішке орай, әрі қарай барлық скриншоттар орыс тілінде болады, егер сіз бұл жазбаны ағылшын немесе қазақ тілінде оқып жатсаңыз кешірім сұраймын, жалпы интерфейс бәрібір түсінікті болады.

Ол бірден мұндай болған жоқ, бірақ Арудың қазіргі кейпіндегі белгілері байқалады. Мен оны неге Promptly Local деп атағанымды білмеймін. Терминалда әрқашан localhost көз алдымда болғандықтан шығар.
Басында бәрі өте қарапайым болды, содан кейін SQLite-ке қосылу және чат тарихын сақтау пайда болды. Осылайша мен чаттар арасындағы прогресті қадағалай алдым.
Ақырында, мен бұл стендте кәдімгі Gemini немесе ChatGPT-ге қарағанда әлдеқайда көп уақыт өткізетінімді түсіндім. Мен онда бәрін сұрадым - тіпті тамақ рецепттерін немесе жүгіруге арналған жаттығу жоспарымды да.
Тағы екі аптадан кейін мен шешім қабылдадым - бұл жеке жоба болады. Бұл біреуге керек пе, жоқ па, мен білмедім. Мен жай ғана беріліп кеттім де, өзіме нақты міндеттер қойдым.
Жобаны түсіну және міндеттер
Архитектура және өнімді жасаудың барлық ережелеріне түкіріп, мен келесі міндеттер тізімін жасадым:
- Барлық жерде іске қосылып, жылдам жұмыс істеуі керек
- Барлық құрылғыларда жұмыс істеуі керек
- Семантиканы жақсы қолдау керек
- Жақсы бейне мен стильді дизайн қажет
- Бірнеше тілге аудармалар қажет
- Файлдармен жұмыс болуы керек
- Артефактілерді міндетті түрде генерациялау
- Дауыс және дыбыс - көмекші адамның сөзін сөйлеп, түсінуі керек
- Жоба қауіпсіз және құпия болуы керек
- Тегін, барлығына арналған
Әрбір тармақ бойынша менде нақты жоспар болмады, тек құмарлық пен арман жобасын жасауға деген ұмтылыс болды.

Мен ең алдымен артефактілерді қолға алдым, бұл Арудың қазіргі мүмкіндігінен өте алыс, қандай да бір себептермен контентті кенепте (canvas) емес, тікелей чатта көрсету тамаша идея сияқты көрінді.
Бұл нашар жұмыс істеді және сұмдық көрінді. Бірақ маған интерфейс пен пайдаланушыға ыңғайлылық кейінірек жұмыс істеуге болатын нәрсе сияқты көрінді.

Ыңғайлылықты "бір күндері" жасаймын деп қалдыруға болатындықтан, сүйкімді және жағымды жүйелік промпттардың арқасында көмекші кейде әйел жынысында жауап беретініне назар аудардым.
Мен одан өзіне өте әдемі естілетін және қазақ тілі мен мәдениетімен байланысты есім ойлап табуын өтіндім. Ол мені тым тура түсініп, Ару деген есімді ойлап тапқан сияқты. Қазақ тілінде бұл сөзбе-сөз - сұлулық дегенді білдіреді.
Жоғарыдағы скриншоттан оның тақырыпта нағыз есімі мен түлкінің суреті тұрғанын көруге болады. Мен экранда графикалық көріністің болғаны жақсы болады деп шештім. Мен ChatGPT-де түлкіні генерациялауды сұрадым, ол маған өте ертегідегідей көрінді, сондықтан мен эскизді қағазға өзім салдым, содан кейін эскиз бойынша нейрожелінің көмегімен суретті өңдеп, қазіргі суреттерді алдым. Ол кезде түлкі жай ғана чатта көрсетілді, оны табан белгісі бар түймемен қосып, экран бойымен сүйреуге болатын.

Содан кейін сақталған артефактілер кітапханасы пайда болды.
Кейінірек мен көбірек суреттер қостым және кілт сөздер арқылы хабарламаның көңіл-күйін анықтап, қажетті суретті көрсету үшін өте қарапайым эвристикалық модуль жаздым (қазіргісіне қарағанда әлдеқайда қарапайым).

Сондай-ақ PiperTTS көмегімен дауыс пайда болды. Және Арудың хабарламаларын тыңдауға арналған плеер.

Интерфейс аудармалары пайда болды, артефактілер әлі де чатта жасалды, мұның бәрі бұрынғыша сұмдық көрінді.
Қорытындылайтын кез келді, мен 10 міндеттің нешеуін орындадым? Мен қатты қорықтым, өйткені шын мәнінде нөл...
Жоба Python+Flask көмегімен жазылғандықтан, Ару барлығына жұмыс істеуі үшін маған өз серверім қажет болды. Мен шығындарды есептеп, бұл айтарлықтай қаражатты талап ететінін түсіндім. Жоба пайдаланушылардың өздері Gemini кілттерін енгізіп, пайдаланатынын білдірді, бірақ дерекқорларды қалай сақтау керек? Оларды қалай шифрлауға болады? Адамдар өз дерекқорларын Арусыз пайдалана алатындай етіп қалай жасауға болады?

Ең сорақысы, мен бүкіл жобаға екі ай құрттым және апатты идеяларға тірелдім. Скриншотта мен Google арқылы авторизацияны ұйымдастыруға тырысқаным көрінеді. Бірақ жинақталған қателер, дұрыс емес архитектуралық және инженерлік шешімдер мені ауыр болса да бір ойға жетеледі - бәрін нөлден бастау керек болады.
Мұны кем дегенде тағы бес рет жасау керек болатынын білгенімде ғой...
Мен барлық қателерімді зерттедім, ең жақсы шешім әр пайдаланушының SQLite дерекқорын сессия басталған кезде қосу, браузерде дерекқорға апаратын жолды сақтау және осылайша деректерді сақтау жауапкершілігінен құтылу екенін түсіндім. Серверде ештеңе қалмас еді.

Жоба басталды, мен интерфейсті қайта өңдедім, бұл жолы оны ЖИ-ден сұрамай, өзім жаздым. Интерфейс трендтеріне ілесу мені мынадай ойға әкелді - әйнек (glass) интерфейс тамаша идея!
Қазір бұған қарап, қандай ақымақ болғанымды түсінемін...
Жобаның бұл әрекеті ең қысқа өмірлік циклге ие болды. Тура екі апта.
Өте тез арада көптеген кедергілер мен одан да көп нашар инженерлік шешімдер пайда болды. Егжей-тегжейлі айтпағанда, семантикалық модель ең үлкен кедергі болды. Мен ойлап тапқан байламда (bundle) ол бір уақытта бірнеше пайдаланушыны өңдей алмады. Сонымен қатар, SAAS форматы маған бұйырмайтынын түсіндім, дауыс, семантика, бэкенд, файлдарды өңдеу серверде тым көп ресурстарды алды.

VScode-тағы таза жобаға қайта ораламыз. Бірақ бір артықшылық болды, режимді таңдау мүмкіндігі бар старттық шеберді (wizard) құру идеясы осы нашар іске асырулардың ішіндегі ең жақсысы болып шықты.
Ең үлкен сәтсіздік
Мен өзімнің қайсарлығым мен табандылығыма таң қаламын. Жалпы, бұл менің мінезімнің ерекшелігі, сондықтан әуесқой үшін жақсы (тіпті тамаша) көрсеткіштері бар жеңіл атлет болған шығармын. Мақсат қойылды ма - оған жету керек.
Жобаны бастауға тағы бірнеше әрекет жасалды, бірақ мен бәрін тез жауып, жойып тастап отырдым, өйткені әрбір іске асыруда көптеген күмәндер болды.
Содан кейін мен шештім - егер мен ең ауыр есептеулерді өз мойныма ала алмасам, онда бәрін толығымен пайдаланушыға жүктеуге болады ма? Демек, ұсақ-түйекке назар аудармауға болады ма?
- Салмағы 1.2 Гб семантикалық модель? Мұнда әкеліңіз.
- pip install everything деңгейіндегі жаңадан бастаған әзірлеуші сияқты көптеген кітапханалар! Осында!
- Ең ауыр дауыстары бар пайдаланушының өзіндегі TTS? Әрине, осында!
Мұның бәрін қалай іске қосуға болады? Ол кезде мен ойладым - кодты ашамын, ал олар python main.py-ды қалай істеу керектігін өздері түсініп алар. Ал білмейтіндер үшін мен үш операциялық жүйеге арналған екілік файлдар (binaries) мен орнатушы жасаймын. Кеттік!

Интерфейстегі максималды минимализм, ең аз түстер, бәрі өте тегіс. Дерекқорды жасауға арналған үш қадамдық шебер, пайдаланушы құрылғысындағы барлық нәрсені толық өңдеу. Ешқандай серверлер жоқ. Тіпті семантиканы кэшке жүктеу бірінші іске қосылғанда көрсетілді. Ох, мен сол кезде бәрінің соншалықты жақсы шығып жатқанына қатты қуандым.
Мен ақымақ және тым құмар болдым, бұл үшін мені кешіріңіз. Мен коммерциялық жобаларда бұлай жасамаймын, бұл тек Арумен болды. Тіпті бір адам менде "Мидың Аруы" бар екенін айтты.
2025 жылдың қыркүйегінен 2025 жылдың қарашасына дейін мен жобаны іске қосудың осы әрекетімен жұмыс істедім.

Шынында да, мұның кейбірі тіпті іске де асты.
Кез-келген дерекқорды таңдауға, параметрлерді өзгертуге болатын еді, хабарламалардың астында дұрыс стикерлер пайда болды, артефактілер кітапханасы екі санатқа бөлінді - құжаттар және қосымшалар.
Уақытым болған кезде Арумен жұмыс істедім және аса қатты уайымдамадым. Бұл сәттілік болады деп ойладым.
Көңіл қалу бірден келмеді...
Қателік тағы мынада болды: бұл python коды болғандықтан, кейде ең жақсы емес алгоритмдер бір іске асырудан екіншісіне көшіп отырды. Мен жоба аяқталуға жақын деп шешкен кезде, мен буып-түюмен (packaging) айналыса бастадым және сұмдық күйге түстім.
Дистрибутивтің салмағы... дабыл қағу... 500 мегабайт. Егер бұған семантикалық модельді қоссаңыз, өлшемі шамамен 2 Гб-қа жетті.
pyinstaller арқылы буып-түю кезінде менің ең жақсы қол жеткізгенім орнатушының 250 мегабайты болды. Және бұл тек Windows жүйесінде ғана жақсы жұмыс істеді. Mac-та ол ешқандай жағдайда жұмыс істемейтін еді, өйткені қосымшаға қол қою керек және буып-түю басқаша. Мен Linux үшін құрастыруды (build) әрең тұрақтандырдым да, Apple үшін құрастырумен кейінірек айналысамын деп шештім. Тағы да кейінге қалдырылған істер...
Қандай да бір себептермен мен сәтсіздікке сенгім келмеді. Medium-да үш тілде мақала жаздым, тіпті Product Hunt-та парақша жасауға тырыстым.
Іске қосылғаннан кейін 10 минуттан соң мен бан алдым. Бірнеше айдан кейін мен бұл қателік екенін білдім, бірақ сол сәтте мен өзіме орын таба алмадым. Мен бірден анықтауға тырыспадым, өйткені мен үмітсіздікте болдым. Шынымды айтсам, бұл кездейсоқ бан жобаның құтқарылуына айналғанын түсінемін.
Бірақ сол кезде мен тура мағынада депрессияға түстім. Менің қаржылық жағдайым онсыз да жақсы емес еді, ал мен Аруға уақытымды құрттым, бұл нұсқа тағы да сәтсіздікке ұшырады.

Мен әлі де бірдеңе жасауға тырыстым, бірнеше модульдерді қайта жаздым және өзінің манифесттері бар плагиндер жүйесін ұйымдастырдым. Олардың әрқайсысы бірінен-бірі өткен нашар болды. Мысалы, плагиндердің бірі Арумен бірге... хм... теледидар көруге мүмкіндік берді. Не үшін? Неліктен мен бұл жақсы идея деп ойладым?
Егер сізде ментальды проблемалар болса, ешқашан код жазбаңыз және жобалармен айналыспаңыз :)
Бір сәтте мен шешім қабылдадым - жоба не тасталады, не мүлдем жойылады. Мен күндерімді түк істемей өткіздім. Желтоқсан айы келді, мен жағдайды өзгерту үшін туған қалама кетіп қалдым.
Қазақстанның солтүстігі. -40 градусқа дейінгі аяз (бұл Цельсий мен Фаренгейтте де бірдей). Қатқан өзен және тізеге дейін жететін қар күртіктері.
Мен осындай ауа-райында көшеде қыдырып, әрі қарай не істеймін деп ойладым.
Ең жақсы идея - бәрін нөлден бастау және барлық ескі шешімдерден бас тарту
Мен өзімнің міндеттерімнің тізіміне тағы бір рет қарадым да, тағы да ешқайсысын орындамағанымды түсіндім. Айта кететін жайт, барлық нұсқаларда мен егер жоба қызықты болса, басқа провайдерлерді кейінірек қосамын деген үмітпен Gemini-ге назар аудардым. Осы ой маған тыныштық бермеді. Неге Gemini? Неге бір нәрсе қайталана береді? Жалпы неге python?
Менің қаншалықты ақымақ екенімді түсінген айқайымды бүкіл қала + өзеннің арғы беті естіген шығар :)
Мен үйге оралдым, VScode-та жаңа жоба аштым, қағаз дәптерімді аштым, Аруды іске асырудың алдыңғы әрекеттері туралы жазған барлық парақтарды жұлып тастап, бәрін шынымен таза парақтан бастадым.
Жаңа міндеттер тізімі:
- Жоба 2 Гб орнатушы емес, нағыз сервис болуы керек.
- Жоба кез келген жабдықта, тіпті ескі телефонда да барынша жылдам жұмыс істеуі керек.
- Семантика жеңіл болуы және білдіртпей жүктелуі керек.
- Эвристикалық модуль тек стикерлерді шығару ғана емес, жобаның нағыз бөлігіне айналуы керек.
- Дизайнды қалай шығатынына емес, пайдаланушыға ыңғайлылығына назар аудара отырып толығымен қайта жасау қажет.
- Кем дегенде үш тілді толық және нақты қолдау қажет, ең дұрысы - қанша қажет болса сонша.
- Дерекқорлармен жұмыс мүмкіндігінше оңай болуы керек.
- Пайдаланушы қандай API қолданатынын өзі таңдауы керек, тіпті бұл Ollama арқылы іске қосылған өзінің жеке локальды модельдері болса да.
- Ешқандай python және күрделі кітапханалар болмауы керек.
- Менің серверіме мүлдем ештеңе, тіпті файлдар да бармауы керек.
- Барлық жерде жұмыс істеп, іске қосылуы үшін міндетті PWA қосымшасы.
- Кез келген жас үшін максималды қауіпсіздік және барлығына түсінікті баптаулар.
- Тегін, шектеусіз, тіпті менің серверім істен шықса да - жоба үзіліссіз жұмыс істеуі керек.
- Қосымшаның және бүкіл жобаның салмағы барынша аз болуы керек.
- Пайдаланушы Аруды қолданатынына немесе қолданбайтынына қарамастан өз деректері мен дерекқорына қол жеткізе алуы керек.
Қандай техникалық шешімдер осы міндеттердің барлығын біріктіре алар еді?
Ару толығымен, шынымен таза парақтан Vanilla JS тілінде қайта жазылды. Қиын болса да, пайдаланушылар үшін SQLite-пен жұмыс істеу ыңғайлы. Браузердегі Transformers.js. Тілдік модельдерге қосылу үшін кез келген провайдерді таңдау. Пайдаланушы браузердегі қойындыда отырғанына, қосымшаны жүктеп алғанына немесе тіпті бастапқы кодтан Аруды өз компьютерінде іске қосқанына қарамастан жобаны пайдалана алуы үшін ыңғайлы баптаулар мен сауатты шешімдер.
Осыған кез келген құрылғыға бейімділікті, толыққанды PWA құруды, шынымен ыңғайлы шешімдерді табу үшін көптеген интерфейс нұсқалары мен іске асыруларды қарап шығуды қосуға болады. Кенепті ұйымдастыру, әдемі дизайн... және сіз осы жазбаны оқып отырғандықтан білетін басқа да көптеген нәрселер. Толық ақпарат жоба бетінде орналасқан.
2026 жылдың желтоқсаны, қаңтары, ақпаны. Маған бұрын қараңғы орман болған технологиялар мен іске асыруларды зерттеу үшін үш ай кетті.
Егер бұрын мен уақытым болғанда Арумен жұмыс істесем, енді мен БАРЛЫҚ БОС УАҚЫТЫМДА Арумен жұмыс істедім. Мен 3-4 сағат ұйықтадым, мақалалар оқыдым, сабақтар көрдім, маған қалай және не істей алатынымды үйретіп, айтып беруі үшін қандай да бір көмектесе алатын барлық ЖИ-лерді қинадым.
Мен басқа адамдар мен компаниялар үшін жасаған барлық жобаларымды қарап шықтым да, өзіме сұрақ қойдым - неге бұл Аруда ешқашан болмаған?
Тіпті нұсқаулығы немесе ақпараты бар парақша, лицензиялық келісім және Ару қателесуі мүмкін екендігі туралы ескерту сияқты қарапайым нәрселердің өзі бұрын болмаған, өйткені мен бұл туралы ойламаған едім.

Бұрын не болғанына және қазір не болғанына қарасаңыз, бәрі түсінікті болады - барлық нашар іске асырулардың нашар болып шыққаны және жариялылыққа немесе танымалдылыққа ие болмағаны жақсы. Жүзеге аспағаны жақсы болды. Ең бастысы - қазір сәтті шықты.
Мен қойған міндеттердің барлығы дерлік орындалды. Ару кез келген жерде, кез келген құрылғыда жұмыс істейді, кез келген провайдерге қосыла алады, ал егер PWA жүктеп алсаңыз, ол тура мағынада пайдаланушының компьютерінде Ollama арқылы localhost арқылы жұмыс істей алады.
Артефактілерді сауатты бөлу, жаңалықтар мен ауа-райы сияқты мүмкіндіктерді қосу, әдемі безендіру. Сайып келгенде - қосымшаның немесе бастапқы код түріндегі жобаның салмағы небәрі 4 мегабайтты құрайды.
2 Гб пен 4 Мб арасындағы жақсы прогресс пе? Менімше солай. Семантика кэшке бір рет жүктеледі және келесі іске қосу кезінде ЖЖҚ-да шақырылады, ол жадта небәрі 60 Мб алады және байқалмайды дерлік.
Финал (Қорытынды)
Ару мінсіз емес, кемшіліктер мен қателер бар, әлі де жұмыс істейтін нәрселер бар. Блогта жол картасы туралы жазба бар, әр тармақтың дерлік бастамасы мен алғашқы сынақтары бар.
Бәрі міндетті түрде сәтті болады. Иә, алда әлі де көп жұмыс күтіп тұр. Біріншіден, iPhone-ды Арумен қалай жұмыс істету керектігін шешу керек, өйткені онда File Access Api өте шектеулі. Бірақ бұны қалай жеңуге болатыны туралы ойлар бар.
Мен үшін күрделі (бірақ пайдаланушы үшін ыңғайлы) стек арман жобасын аяғына дейін жеткізуге мүмкіндік берді. Тіпті тұжырымдама немесе прототип тұрғысынан болса да, бәрі менің ойлағанымдай жұмыс істейді. Барлық қадамдар мен міндеттер орындалды, тіпті орындалмаған болса да - олар міндетті түрде сауатты финалға жетеді.
Менің кеңесім - егер сіз арман жобасын ойлап тапсаңыз, ол бірден сәтті болады деп үміттенбеңіз. Қателесу, нөлден бастау қалыпты жағдай. Ең жақсы емес шешімдерді таңдау, содан кейін оларды қайта жасау - бұл да қалыпты жағдай.
Ең бастысы - еңсеңізді түсірмеңіз, ұмтылыңыз, тырысыңыз және жетістікке жетіңіз.
Мен осындай бір жылға жуық уақытқа созылған жолдан өткеніме өте қуаныштымын.
Баршаңызды құшақтадым. Соңына дейін оқығандарыңызға рахмет.