Личное 55

История создания Aru Ai

#Aru #Aru Ai #Story
История создания Aru Ai

Начало

Вот уже год как я решил открыть для себя новые горизонты и начать погружаться в мир разработки и настоящей архитектуры программных продуктов. Нельзя сказать что раньше я не писал код или не делал какие-то утилиты для себя и команды, но я посмотрел куда движется весь мир и начал изучать python. Уже в конце месяца я с делал ботов с помощью aiogram, а в марте сделал проект с админкой для создания развлекательных ботов с цитатами и историями, он кстати успешно улетел куда-то в Европу, пусть и не за большие деньги, но меня это хорошо мотивировало. 

Март 2025, переезд в Алматы и куча ботов на заказ через Reddit. Было интересно, особенно когда студенты из Индии заказывали ботов для тестирования чтобы учиться всем вместе. 

Делая разных ботов в марте и апреле я начал обращать внимание на вакансии которые публикуют у нас в Казахстане. Очень много было связанно с автоматизацией через боты в мессенджерах. 

Я начал изучать этот вопрос и понял что если в Европе и США есть негласное разделение где WhatsAPP это для семьи и друзей, а Telegram для работы и бизнеса, то в Казахстане (и наверное в некоторых других странах) все ровно наоборот

Почему так? Ответ оказался достаточно прост - большое предложение от компаний где сотрудники даже не пишут код, но используют редакторы нодов в виде блок схем для создания логики бота и подключения ИИ. А раз сами создатели ботов не понимают аудиторию, то бизнес даже не знает о преимуществах или разницы между аудиторией в Telegram и Whatsapp.

Почему я так много времени уделяю ботам и мессенджерам в этой статье, а не перехожу к Aru Ai?

Я понял что  нужно дать людям инструмент который точно покажет преимущества Telegram и при этом сделать его максимально легким в настройке, в идеале - просто текстовые описания. Так родился проект Promptly. На момент создания этой записи в разделе проектов есть про него информация, но возможно когда вы зайдете она будет неполной потому что я полностью переделываю проект под другой стек и застрял на фронтенде. 

В ходе разработки я пришел к тому что бот должен быть не только умным, но еще и понимать контекст беседы, как бы это не звучало странно. К тому же нужно чтобы он распознавал команды на показ товаров или рисовал инлайн кнопки прямо в чате. Выход? Семантические модели. 

Когда вышла первая версия моего проекта, она заработала почти сразу, я сделал несколько ботов на заказ и сейчас где-то на серверах Индии, Европы и США крутится мой первоначальный проект. Далее на него обратили внимание работодатели из Алматы и предложили мне делать проект Myna (про него тоже есть информация на странице проектов).

Но было одно но...

Испытательный полигон для семантики

Проект работал используя Gemini в качестве мозгов, выбор был очевиден - легкое создание оберток и самое важное БЕСПЛАТНЫЙ ТИР :) 

Семантикой же было все сложно, я не помню точно, но недели две я вникал в устройство семантических моделей настолько глубоко чтобы выполнять косинусное сходство и пробовал различные алгоритмы. В какой-то момент делать тесты на проекте стало неудобно и я решил собрать небольшой тестовый стенд в виде отдельного чат бота. 

Далее все скриншоты к сожалению будут на русском языке, извиняюсь если вы читаете эту запись на английском или казахском, в целом по интерфейсу будет итак все понятно.

Он не был таким сразу, но уже читаются черты Ару в том виде в каком она сейчас. Не знаю почему я назвал его Promptly Local. Наверное потому что перед глазами всегда был localhost в терминале.

Сначала все было очень просто, потом появилось подключение к SQLite и хранение истории чата. Так я мог отслеживать прогресс между чатам.

В конечном итоге я понял что провожу времени в этом стенде гораздо больше чем в обычном Gemini или ChatGPT, я спрашивал там все - даже рецепты блюд или план тренировок для своего бега.

Еще через две недели я принял решение - это будет отдельный проект, нужен он будет кому-то или нет, я не знал. Я просто увлекся и поставил себе конкретные задачи.

Осознание проекта и задачи

Наплевав на все правила создания архитектуры и создания продуктов я составил следующий список задач:

  1. Должно запускаться везде и работать быстро
  2. Должно работать на всех устройствах
  3. Должна быть хорошая поддержка семантики
  4. Нужен хороший образ и стильное оформление
  5. Нужны переводы на несколько языков
  6. Должна быть работа с файлами
  7. Обязательная генерация артефактов
  8. Голос и звук - ассистент должен говорить и понимать речь человека
  9. Проект должен быть безопасным и приватным
  10. Бесплатно, для всех

По каждому из пунктов у меня не было четкого плана, был только азарт и желание сделать проект мечты.

Первое за что я взялся были артефакты, это очень далеко от того что умеет сейчас Ару, почему-то мне казалось отличной идеей отображать контент прямо в чате, а не на холсте. 

Это работало плохо и выглядело ужасно. Но мне казалось что интерфейс и пользовательское удобство это то над чем можно работать позже.

А раз можно отложить удобство на "когда-нибудь", я обратил внимание что из-за милых и приятных системных промптов иногда ассистент отвечал в женском роде. 

Я попросил придумать себе имя, что-то что будет звучать очень красиво и связанно с казахским языком и культурой. Похоже она поняла меня слишком прямо и придумала себе имя Ару. На казахском это буквально - красота.

На скриншоте выше видно что в шапке уже ее настоящее имя и есть лисичка. Я решил что будет хорошо иметь графическое представление прямо на экране. Я попросил сгенерировать лису в ChatGPT, мне она показалась очень сказочной поэтому я нарисовал набросок сам прямо на бумаге, затем по скетчу обработал изображение с помощью нейросети и получил почти текущие изображения. Тогда лисичка просто отображалась в чате, кнопкой с иконкой лапки можно было ее включить и таскать по экрану.

Затем появилась библиотека сохраненных артефактов.

Позже я добавил больше изображений и написал очень простой эвристический модуль (намного-намного проще чем текущий) чтобы по ключевым словам определять настроение сообщения и показывать нужную картинку.

Еще появился голос с помощью PiperTTS. И плеер чтобы слушать сообщения от Ару. 

Появились переводы интерфейса, артефакты создавались по прежнему прямо в чате, выглядело все это по прежнему ужасно. 

Настало время подводить итоги, сколько задач из 10 я выполнил? Я очень испугался потому что на самом деле ноль...

Проект был написан с использованием Python+Flask, а значит мне нужен был свой сервер чтобы Ару работала для всех, я посчитал расходы и понял что это встанет в серьезные деньги. Проект подразумевал то что пользователи сами вводят свои ключи Gemini и пользуются, но как хранить базы? как их шифровать? как делать так чтобы люди могли пользоваться своими базами без Ару?

Ужасно то что я убил на весь проект два месяца, и уперся в идеи которые были катастрофическими. На скриншоте понятно что я постарался организовать авторизацию через Google. Но накопительные ошибки, неверные архитектурные и инженерные решения навели меня на пусть и больную но все же мысль - начать придется с нуля. 

Знал бы я что это придется сделать еще как минимум пять раз...

Я изучил все свои ошибки, понял что лучшим решением будет подключать базу SQLite каждого пользователя во время начала сессии, хранить в браузере путь до базы и тем самым снять с ебя ответственность за хранение данных. На сервере не оставалось бы ничего. 

Проект начался, я переработал интерфейс, на этот раз писал его сам, а не просил ИИ. Погодя за трендами в интерфейсах навела меня на мысль - стеклянный интерфейс отличная идея! 

Теперь смотрю на это и понимаю каким дурачком я был...

Эта попытка проекта была с самым коротким жизненным циклом. Буквально две недели

Очень быстро появилось много подводных камней и еще больше плохих инженерных решений. Если не слишком сильно вдаваться в подробности, то самым серьезным камнем преткновения стала семантическая модель. В связке которую я придумал она просто не могла обрабатывать несколько пользователей одновременно. К тому же я понимал что формат SAAS скорее всего мне не светит, голос, семантика, бэкенд, обработка файлов отнимали слишком много ресурсов на сервере.

Снова откатываемся в чистый проект в VScode. Но был и плюс, идея создать стартовый визард с выбором режима оказалась самой отличной идеей из всех этих плохих реализаций.

Самая большая неудача

Я удивляюсь своей упертости и настойчивости. В целом это моя черта темперамента, поэтому возможно я стал легкоатлетом с хорошими (даже отличными) показателями для любителя. Раз поставил цель - нужно добиться.

Было еще несколько попыток начать проект, но я быстро все закрывал и удалял потому что было очень много сомнений по каждой реализации.

Тогда я решил - раз я не могу взять на себя самые тяжелые вычисления, значит можно переложить вообще все на пользователя? А значит можно не мелочится? 

  1. Семантическая модель весом в 1.2 Гб? Давайте сюда.
  2. Куча библиотек словно я начинающий разработчик уровня pip install everytsing! Сюда!
  3. TTS прямо у пользователя с самыми тяжелыми голосами? Конечно сюда!

А как все это запускать? Тогда я думал - открою код, а там уж разберутся как сделать python main.py. Для тех же кто не умеет, сделаю бинарники для трех операционных систем и инсталлятор. Поехали!

Максимальный минимализм в интерфейсе, минимум цветов, все очень плоское. Визард в три шага для создания базы, полная обработка всего на устройстве пользователя. Никаикх серверов. Даже загрузка семантики в кэш отображалась при первом запуске. Ох я тогда был рад насколько все хорошо получается.

Я был глуп и слишком азартен, простите меня за это. Я не поступаю так с коммерческими проектами, так было лишь с Ару. Один человек даже выразился что у меня "Ару головного мозга". 

С сентября 2025 по ноябрь 2025 года я работал над этой попыткой завести проект.

И на самом деле, что-то из этого даже получалось.

Можно было выбрать любую базу, поменять настройки, появились правильные стикеры под сообщениями, библиотека артефактов разделилась на две категории - документы и приложения.

Я работал над Ару тогда, когда у меня было время и не особо парился. Я думал это будет успех.

Разочарование пришло не сразу...

Ошибка была еще в и том что раз это код на python, иногда не самые лучшие алгоритмы буквально кочевали из одной реализации в другую. Когда я решил что проект подходит к финалу я начал заниматься у паковкой и ужаснулся.

Вес дистрибутива...барабанная дробь...500 мегабайт. Если добавить сюда семантическую модель то размер достигал почти 2гб.

При упаковке через pyinstaller лучшее чего я добивался это 250 мегабайт установщика. И это работало хорошо только на windows. На mac это не работало бы ни при каких условиях, потому что нужно подписывать приложение и упаковка отличается. Я еле как стабилизировал сборку под Linux и решил что буду заниматься сборкой для apple когда-нибудь потом. Снова отложенные дела...

Почему-то, я не хотел верить в провал. Написал статьи на трех языках на Medium и даже попробовал сделать страницу на Product Hunt.

Через 10 минут после запуска я получил бан. Через несколько месяцев я выяснил что это была ошибка, но в моменте я не находил себе места. Я не стал разбираться сразу, потому что был в отчаянии. И если честно я понимаю что этот случайный бан стал спасением проекта.

Но тогда я впал в депрессию, буквально. Мое финансовое положение итак было не в самом лучшем виде, а я тратил время на Ару, и эта версия снова оказалась провалом.

Я все еще пытался сделать хоть что-то, переписал несколько модулей и организовал систему плагинов со своими манифестами. Каждый из них был ужаснее другого. Например один из плагинов позволял...эээм...смотреть ТВ вместе с Ару. Зачем? Почему мне казалось это хорошей идеей?

Никогда не пишите код и не занимайтесь проектами если у вас ментальные проблемы :)

В какой-то момент я решил - проект будет или заброшен или удален совсем. Дни я проводил ничего не делая. Наступил декабрь, и я просто уехал в родной город чтобы сменить обстановку.

Север Казахстана. Мороз под -40 градусов (это одинаково и в цельсиях и в фаренгейтах). Замерзшая река и сугробы до колена. 

Я гулял по улицам в такую погоду и думал что делать дальше?

Лучшая идея - начинать с нуля полностью и отказаться от всех старых решений

Я еще раз посмотрел на список своих задач, осознал что я снова не выполнил ни одну. Следует еще отметить что во всех версиях я делал упор на Gemini в надежде что если проект будет интересен я добавлю другие провайдеры позже. И именно эта мысль не давала мне покоя. Почему Gemini? Почему одно и тоже? Почему вообще python?

Мой возглас осознания насколько я глуп возможно слышал весь город + по ту сторону реки :)

Я вернулся домой, открыл новый проект в VScode, открыл свой бумажный блокнот, вырвал все листы где я писал о предыдущих попытках реализовать Ару и начал все с чистого листа понастоящему.

Новый список задач:

  1. Проект должен быть настоящим сервисом, а не установщиком на 2 Гб.
  2. Проект должен работать максимально быстро на любом железе, даже старом телефоне.
  3. Семантика должна быть легкой и загружаться незаметко.
  4. Эвристический модуль должен стать настоящей частью проекта, а не только выводом стикеров.
  5. Дизайн нужно переделать полностью сделав упор на удобство пользователя, а не на то как получается.
  6. Нужна полная и настоящая поддержка как минимум трех языков, в идеале - сколько угодно.
  7. Работа с базами должна быть максимально легкой.
  8. Пользователь должен сам выбирать каике API ему использовать, даже если это его личные локальные модели запущенные через Ollama.
  9. Никакого python и сложных библиотек.
  10. Ничего не должно уходить на мой сервер вообще, даже файлы.
  11. Обязательно PWA приложение чтобы работало и запускалось везде.
  12. Максимальная безопасность для любого возраста и понятные настройки для всех.
  13. Бесплатно, без ограничений, даже если мой сервер ляжет - проект должен работать без перебоев.
  14. Вес приложения и всего проекта должен быть максимально небольшим.
  15. Пользователь должен иметь доступ к своим данным и базе не зависимо от того использует он Ару или нет

Какие технические решения смогли бы объединить все эти задачи? 

Ару полностью, по-настоящему с чистого листа была переписана на Vanilla JS. Пусть и сложная, но все таки удобная для пользователей работа с SQLite. Transformers.js прямо в браузере. Выбор любого провайдера для подключения к языковым моделям. Удобные настройки и грамотные решения для того чтобы пользователь мог пользоваться проектом независимого от того сидит он на вкладке в браузере, скачал приложение или вообще запустил Ару у себя на компьютере из исходников.

Сюда же можно добавить адаптивность под любые устройства, создание полноценного PWA, куча просмотренных вариантов интерфейсов и реализаций чтобы найти действительно удобные решения. Организация холста, красивое оформление....и еще много всего о чем вы скорее всего знаете раз читаете эту запись. Полная информация есть на странице проекта.

Декабрь, январь, февраль 2026 года. Три месяца у меня ушло на то чтобы изучать технологии и реализации которые раньше были для меня темным лесом.

Если раньше я работал над Ару когда у меня было время, то теперь я работал над Ару буквально ВСЕ ВРЕМЯ ЧТО У МЕНЯ БЫЛО. Я спал по 3-4 часа, читал статьи, смотрел уроки, мучил все ИИ которые могли хоть как-то помочь чтобы они учили меня и рассказывали как и что я могу сделать.

Я посмотрел все свои проекты которые я делал для других людей и компаний и сам себе задал вопрос - почему этого никогда не было в Ару?

Даже такие элементарные вещи как страница с руководством или информацией, лицензионное соглашение и уведомление что Ару может совершать ошибки, всего этого не было раньше потому что я не задумывался об этом. 

Если посмотреть на то что было с тем что стало, становится понятно - хорошо что все плохие реализации оказались плохими и не получили огласки или популярности. Хорошо что не получилось. Главное что получилось сейчас.

Почти все задачи которые я ставил выполнены. Ару работает где угодно, на чем угодно, может подключаться к любому провайдеру, а если скачать PWA, она буквально может работать через localhost с Ollama на компьютере пользователя.

Грамотное разделение артефактов, добавление фишек вроде новостей и погоды, красивое оформление. В конце концов - вес приложения или проекта в виде исходного кода всего 4 мегабайта.

Хороший прогресс между 2 Гб и 4 Мб? Думаю да. Семантика же загружается один раз в кэш и вызывается в ОЗУ при следующих запусках, она отнимает всего 60 Мб в памяти и почти незаметна.

Финал

Ару не идеальна, есть минусы и баги, есть еще над чем работать. В блоге есть запись о дорожной карте, почти у каждого пункта уже есть начало и первые тесты. 

Все обязательно получится. Да, еще предстоит много работы. В первую очередь нужно решить как заставить iphone работать с Ару ведь там очень ограниченные File Acccess Api. Но уже есть мысли как это победить.

Сложный для меня (но удобный для пользователя стек) позволил создать проект мечты до ума. Пусть еще даже в плане концепта или прототипа, но все работает именно так как я задумал. Все шаги и задачи выполнены, а даже если не выполнены - они обязательно дойдут до грамотного финала.

Мой совет - если вы придумали проект мечты, не надейтесь что он получится сразу. Ошибаться, начинать с нуля это нормально. Выбирать не лучшие решения, а затем переделывать - тоже нормально.

Главное - не вешайте нос, стремитесь, старайтесь и достигайте.

Я безумно счастлив что прошел этот путь длинной почти в год.

Всех обнял. Спасибо что дочитали.

Поделиться