Собрал полностью локального голосового ассистента без облаков и подписок. Выкладываю в open source. llm.. llm. Open source.. llm. Open source. python.. llm. Open source. python. stt.. llm. Open source. python. stt. tts.. llm. Open source. python. stt. tts. искусственный интеллект.
основное окно приложения

основное окно приложения

Пока весь мир заворачивает платные API в красивые обёртки, мне захотелось сделать что-то полностью автономное, конфиденциальное и бесплатное. Результат — App AI Assistant: локальный компаньон, с которым можно поговорить, и голосовой ассистент («Джарвис» на минималках), работающий на 100% оффлайн на вашем ПК.

Проект полностью открытый, исходный код опубликован под лицензией MIT. Мне интересно было не просто «поиграться», а подружить нейросети в реальном времени.

Что умеет ассистент:

  • Говорить и слушать в реальном времени: ответ начинается порционно, не дожидаясь генерации всей фразы.

  • Умное прерывание (Barge-in): ассистент мгновенно замолкает на полуслове, если вы его перебили.

  • Управлять ПК: через голосовые команды запускает любые ваши Python-скрипты (открыть папку, браузер, запустить софт).

  • Расширяемость скриптов: можно добавлять ссылки и скрипты, которые имеют свое виртуальное окружение (директория должна называться .venv).

  • Помнить контекст: сохраняет краткое резюме диалогов между сессиями.

  • Возможность гибкой настройки ассистента.

Возможность гибкой настройки ассистента

Возможность гибкой настройки ассистента

Смотреть видео-демонстрацию на Яндекс.Диске

Релиз на GitHub

📖 Как это устроено под капотом (Архитектура):

Проект написан на Python 3.12 и Asyncio. Чтобы интерфейс не фризило, а инференс не лагал, я разбил систему на 4 изолированных компонента, общающихся по HTTP и WebSocket:

  1. Оркестратор (GUI) на CustomTkinter — дирижёр всей системы.

  2. Движок мышления (LLM) — локальная Gemma 3 через llama-cpp-python.

  3. Гибридные уши (STT) — связка Vosk (как быстрый детектор речи и прерываний) и Faster-whisper (для точной финальной транскрибации).

  4. Голос (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

Источник