Пока весь мир заворачивает платные API в красивые обёртки, мне захотелось сделать что-то полностью автономное, конфиденциальное и бесплатное. Результат — App AI Assistant: локальный компаньон, с которым можно поговорить, и голосовой ассистент («Джарвис» на минималках), работающий на 100% оффлайн на вашем ПК.
Проект полностью открытый, исходный код опубликован под лицензией MIT. Мне интересно было не просто «поиграться», а подружить нейросети в реальном времени.
Что умеет ассистент:
-
Говорить и слушать в реальном времени: ответ начинается порционно, не дожидаясь генерации всей фразы.
-
Умное прерывание (Barge-in): ассистент мгновенно замолкает на полуслове, если вы его перебили.
-
Управлять ПК: через голосовые команды запускает любые ваши Python-скрипты (открыть папку, браузер, запустить софт).
-
Расширяемость скриптов: можно добавлять ссылки и скрипты, которые имеют свое виртуальное окружение (директория должна называться
.venv). -
Помнить контекст: сохраняет краткое резюме диалогов между сессиями.
-
Возможность гибкой настройки ассистента.
Смотреть видео-демонстрацию на Яндекс.Диске
📖 Как это устроено под капотом (Архитектура):
Проект написан на Python 3.12 и Asyncio. Чтобы интерфейс не фризило, а инференс не лагал, я разбил систему на 4 изолированных компонента, общающихся по HTTP и WebSocket:
-
Оркестратор (GUI) на CustomTkinter — дирижёр всей системы.
-
Движок мышления (LLM) — локальная Gemma 3 через
llama-cpp-python. -
Гибридные уши (STT) — связка Vosk (как быстрый детектор речи и прерываний) и Faster-whisper (для точной финальной транскрибации).
-
Голос (TTS) — оффлайн-синтез Silero с кастомным пайплайном нормализации текста (чтобы робот не ломался на аббревиатурах и числах).
А вот так выглядит процесс инициализации и подъёма всех микросервисов лаунчером при старте:
Почему не используется Docker?
В какой-то момент я задал себе вопрос: а нужен ли здесь 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 — «мозг» приложения (локальная LLM через llama.cpp).
-
srv_tts — «голос» приложения (синтез речи Silero).
-
srv_stt — «уши» приложения (распознавание речи 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 каждого репозитория.
🧰 Бонус для Python-разработчиков: infrastructure2 — как я борюсь с рутиной
Когда проектов становится больше одного, начинается рутина: копирование одних и тех же утилит (логирование, работа с путями, HTTP-клиенты, сборка .exe) из репозитория в репозиторий. Рано или поздно это превращается в «зоопарк» из дубликатов, которые расходятся в разные стороны.
Чтобы этого избежать, я вынес все общие компоненты в отдельный монорепозиторий — infrastructure2. Это не «библиотека ради библиотеки», а централизованное управление инфраструктурой: вместо того чтобы тащить в каждый проект огромный зоопарк зависимостей (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 помощника (с расширяемых скриптов). Установка максимально проста и от пользователя не требуется каких либо технических навыков. Подробное видео можно посмотреть здесь
Буду рад любой обратной связи.
P.S. Если вы ищете специалиста по автоматизации бизнес-процессов или AI-интегратора — я открыт к предложениям. Мой профиль: Python, API-интеграции, локальные LLM, автоматизация рутины.
Для связи: mix2025mix@yandex.ru (в теме письма укажите «Хабр / AI-ассистент»). Исходный код и контакты также доступны в моём профиле GitHub.
Автор: Mike2024New


