- BrainTools - https://www.braintools.ru -

Собрал полностью локального голосового ассистента без облаков и подписок. Выкладываю в open source

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Релиз на GitHub [2]

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

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

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

  2. Движок мышления [3] (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 [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 каждого репозитория.

🧰 Бонус для Python-разработчиков: infrastructure2 — как я борюсь с рутиной

Когда проектов становится больше одного, начинается рутина: копирование одних и тех же утилит (логирование, работа с путями, 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

www.BrainTools.ru

Rambler's Top100