- BrainTools - https://www.braintools.ru -
Пока весь мир заворачивает платные API в красивые обёртки, мне захотелось сделать что-то полностью автономное, конфиденциальное и бесплатное. Результат — App AI Assistant: локальный компаньон, с которым можно поговорить, и голосовой ассистент («Джарвис» на минималках), работающий на 100% оффлайн на вашем ПК.
Проект полностью открытый, исходный код опубликован под лицензией MIT. Мне интересно было не просто «поиграться», а подружить нейросети в реальном времени.
Что умеет ассистент:
Говорить и слушать в реальном времени: ответ начинается порционно, не дожидаясь генерации всей фразы.
Умное прерывание (Barge-in): ассистент мгновенно замолкает на полуслове, если вы его перебили.
Управлять ПК: через голосовые команды запускает любые ваши Python-скрипты (открыть папку, браузер, запустить софт).
Расширяемость скриптов: можно добавлять ссылки и скрипты, которые имеют свое виртуальное окружение (директория должна называться .venv).
Помнить контекст: сохраняет краткое резюме диалогов между сессиями.
Возможность гибкой настройки ассистента.
Смотреть видео-демонстрацию на Яндекс.Диске [1]
Релиз на GitHub [2]
📖 Как это устроено под капотом (Архитектура):
Проект написан на Python 3.12 и Asyncio. Чтобы интерфейс не фризило, а инференс не лагал, я разбил систему на 4 изолированных компонента, общающихся по HTTP и WebSocket:
Оркестратор (GUI) на CustomTkinter — дирижёр всей системы.
Движок мышления [3] (LLM) — локальная Gemma 3 через llama-cpp-python.
Гибридные уши (STT) — связка Vosk (как быстрый детектор речи и прерываний) и Faster-whisper (для точной финальной транскрибации).
Голос (TTS) — оффлайн-синтез Silero с кастомным пайплайном нормализации текста (чтобы робот не ломался на аббревиатурах и числах).
А вот так выглядит процесс инициализации и подъёма всех микросервисов лаунчером при старте:
В какой-то момент я задал себе вопрос: а нужен ли здесь Docker? Для микросервисов это стандарт де-факто, но у меня была четкая цель — сделать развертывание максимально легким для обычного пользователя. Docker Desktop для Windows — это гигабайты дискового пространства, настройка WSL2 и виртуализация в BIOS. Обычный пользователь, который просто хочет поговорить с ассистентом, не должен проходить через этот квест. Поэтому я выбрал путь «нативного» развертывания. У меня есть свой Launcher, который запускает легковесные Python-процессы напрямую. А в идеале все это собирается в один .exe (через PyInstaller), где пользователю достаточно запустить один файл. Docker — это круто для облачных кластеров, но для локального десктопного AI-ассистента он стал бы лишним слоем абстракции и барьером для аудитории.
А здесь показано, как бегают данные и звук в реальном времени, когда вы общаетесь с ассистентом или перебиваете его:
▶ Как запустить: быстрый способ и сборка из исходников
Я знаю, как тяжело разворачивать локальный ИИ (venv, зависимости, компиляция, скачивание моделей), поэтому написал srv_installer — отдельный мастер установки. Он сам скачает portable-версии Python и Git, создаст окружение, подтянет стабильные хеши репозиториев и соберет .exe прямо на месте.
Установленный Python или Git на машине не обязателен. Установщик рассчитан под пользователя, не умеющего в разработку. Он скачает все необходимые ассеты (проверив sha256), клонирует репозитории, создаст .venv, поставит зависимости и соберет .exe приложения через PyInstaller. 3 клика и всё готово.
⚠ Ограничения на текущий момент времени:
windows only – ассистент проверялся на win10/win11
gemma llm – из моделей пока адаптировано только под шаблон gemma
наушники – пока что я не успел адаптировать aec вычитатель, поэтому система работает только при условии, что выходной звук не попадает на микрофон.
Проект разбит на три независимых микросервиса. Вы можете использовать их в любых комбинациях и независимо друг от друга:
srv_llm [4] — «мозг» приложения (локальная LLM через llama.cpp).
srv_tts [5] — «голос» приложения (синтез речи Silero).
srv_stt [6] — «уши» приложения (распознавание речи Vosk + Faster-Whisper).
Каждый сервис — это отдельный HTTP-сервер, который можно запустить одной командой:
app.exe run-server --port {номер_порта}
Это значит, что вы можете писать на любом языке программирования (Python, C#, Java, JavaScript, Go — не важно) и просто обращаться к нужному сервису по HTTP. Хотите добавить голосовое управление в свой проект на C#? Поднимите srv_stt и srv_tts, и отправляйте запросы. Хотите локальную LLM в Java-приложении? Поднимите srv_llm и работайте с ним как с обычным API.
Подробности запуска и API — в README каждого репозитория.
Когда проектов становится больше одного, начинается рутина: копирование одних и тех же утилит (логирование, работа с путями, HTTP-клиенты, сборка .exe) из репозитория в репозиторий. Рано или поздно это превращается в «зоопарк» из дубликатов, которые расходятся в разные стороны.
Чтобы этого избежать, я вынес все общие компоненты в отдельный монорепозиторий — infrastructure2 [7]. Это не «библиотека ради библиотеки», а централизованное управление инфраструктурой: вместо того чтобы тащить в каждый проект огромный зоопарк зависимостей (requests, typer, pydantic и т.д.), подключается только то, что реально нужно.
Что внутри:
MessageBus — шина сообщений и логирование.
GitClient — автоматизация отправки обновлений в репозиторий.
PathUtils — утилиты для работы с путями (поиск корня проекта и т.д.).
Builder — сборка исполняемых файлов (.exe, .bin).
HttpClients — HTTP-клиент для запросов и загрузки файлов.
cli_utils — CLI-утилиты (typer).
settings-manager — менеджер настроек (pydantic, JSON, .env).
server — запуск сервера на FastAPI.
process-utils — управление процессами.
streaming — набор стриминговых клиентов.
tk_ui — виджеты для быстрого создания UI.
log-utils — обёртки для логирования.
Как подключить (пример для pyproject.toml):
"infrastructure2 @ git+https://github.com/Mike2024New/infrastructure2.git"
Важное примечание: репозиторий пока слабо документирован (это в разработке), но код рабочий и используется в моих проектах. Если вам нужны готовые утилиты для Python-проектов — берите и форкайте. Я буду рад, если это сэкономит кому-то время.
📜Итоги
app_ai_assistant – простой оффлайн компаньон, который может также работать в качестве Jarvis помощника (с расширяемых скриптов). Установка максимально проста и от пользователя не требуется каких либо технических навыков. Подробное видео можно посмотреть здесь [1]
Релиз [2]
Исходный код [8]
Буду рад любой обратной связи.
P.S. Если вы ищете специалиста по автоматизации бизнес-процессов или AI-интегратора — я открыт к предложениям. Мой профиль: Python, API-интеграции, локальные LLM, автоматизация рутины.
Для связи: mix2025mix@yandex.ru [9] (в теме письма укажите «Хабр / AI-ассистент»). Исходный код и контакты также доступны в моём профиле GitHub [10].
Автор: Mike2024New
Источник [11]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/37988
URLs in this post:
[1] Смотреть видео-демонстрацию на Яндекс.Диске: https://disk.yandex.ru/i/gM94t2C9pjZXfA
[2] Релиз на GitHub: https://github.com/Mike2024New/app_ai_assistant/releases/latest
[3] мышления: http://www.braintools.ru/thinking
[4] srv_llm: https://github.com/Mike2024New/srv_llm
[5] srv_tts: https://github.com/Mike2024New/srv_tts
[6] srv_stt: https://github.com/Mike2024New/srv_stt
[7] infrastructure2: https://github.com/Mike2024New/infrastructure2
[8] Исходный код: https://github.com/Mike2024New/app_ai_assistant
[9] mix2025mix@yandex.ru: mailto:mix2025mix@yandex.ru
[10] GitHub: https://github.com/Mike2024New
[11] Источник: https://habr.com/ru/articles/1101954/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1101954
Нажмите здесь для печати.