- Окно настроек: модель и провайдер (со списком моделей с сервера), озвучка,
голосовой ввод, слово активации, автозапуск с Windows
- Сохранение в config.yaml через ruamel.yaml с комментариями и ссылками ${VAR},
проверка значений до записи; переключатели трея тоже сохраняются
- Настройки LLM и переключатели применяются на лету, для остального — перезапуск
- Один экземпляр приложения, лог в файл, аргументы --config и --wait-pid, русские диалоги Qt
- Сборка PyInstaller (onedir) с библиотеками CUDA, иконка приложения
- Тесты сохранения настроек и окна настроек
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
agr-assistent
Минимальный AI-ассистент, живущий в системном трее.
- LLM: локальные модели (Ollama, LM Studio, llama.cpp) или OpenRouter — через единый OpenAI-совместимый API
- Текстовый чат со стримингом ответа
- Озвучка ответов голосом Silero: фразы проговариваются по мере генерации, блоки кода пропускаются
- Голосовой ввод по глобальной горячей клавише: faster-whisper на видеокарте, конец фразы по паузе (Silero VAD)
- Слово активации («ассистент») через Vosk — без нажатия клавиш
Запуск
Нужен uv.
uv sync
uv run agr-assistent
При первом запуске рядом создаётся config.yaml (путь можно переопределить переменной
AGR_ASSISTENT_CONFIG). В нём выбирается провайдер и модель:
llm:
provider: openrouter
providers:
openrouter:
api_key: ${OPENROUTER_API_KEY} # или ключ напрямую
model: openai/gpt-4o-mini
Для Ollama достаточно запустить сервер и скачать модель: ollama pull qwen2.5:7b.
Модель Silero (~145 МБ) скачивается при первом запуске в %LOCALAPPDATA%\agr-assistent\models.
Голос и модель задаются в секции tts конфига; озвучку можно выключить в меню значка.
Silero читает только кириллицу: числа переводятся в слова, латиница пропускается.
Голосовой ввод
Нажмите Win+Alt+Space (настраивается в voice.hotkey), дождитесь короткого сигнала и говорите —
запись закончится сама после паузы, или нажмите клавишу ещё раз. Если ассистент в этот момент
отвечает, он замолкает и слушает.
Распознаёт faster-whisper (large-v3-turbo, ~1.6 ГБ, скачивается при первом запуске).
При наличии видеокарты NVIDIA используется она: библиотеки CUDA ставятся pip-пакетами
nvidia-cublas-cu12 и nvidia-cudnn-cu12, отдельно устанавливать CUDA Toolkit не нужно.
Без видеокарты распознавание идёт на CPU — тогда лучше выбрать модель small или medium.
Слово активации
Включается пунктом меню значка или wake_word.enabled: true в конфиге. Скажите «Ассистент»,
дождитесь сигнала и произнесите команду. Фразы задаются в wake_word.phrases, все слова должны
быть в словаре модели — иначе приложение сообщит, каких слов не хватает.
Пока ассистент слушает команду, думает или говорит, слово активации не отслеживается: микрофон не занят дважды, и ассистент не реагирует на собственный голос. Перебить его во время ответа можно горячей клавишей.
Используется маленькая модель Vosk (~45 МБ) со свободным распознаванием: в простое она почти не нагружает процессор. Слова, начинающиеся с ключевого («ассистентка»), могут давать ложные срабатывания.
Настройки
Окно настроек открывается из меню значка или кнопкой «Настройки» в чате: провайдер и модель
(список моделей подгружается с сервера), голос, горячая клавиша, модель Whisper, слово активации,
автозапуск с Windows. Изменения сохраняются в config.yaml с сохранением комментариев;
ключи вида ${ПЕРЕМЕННАЯ} остаются ссылками. Настройки модели и переключатели применяются сразу,
для смены моделей, голоса и горячей клавиши приложение предложит перезапуститься.
Закрытие окна сворачивает приложение в трей. Клик по значку открывает чат. Повторный запуск не создаёт второй экземпляр, а показывает окно уже запущенного.
Лог пишется в %LOCALAPPDATA%\agr-assistent\logs. Путь к конфигу можно передать аргументом:
agr-assistent --config D:\path\config.yaml.
Сборка exe
uv run pyinstaller agr-assistent.spec --noconfirm
Результат — папка dist\agr-assistent (~2.8 ГБ, из них ~2 ГБ — библиотеки CUDA) с
agr-assistent.exe; её можно переносить целиком. config.yaml создаётся рядом с exe, модели
скачиваются в %LOCALAPPDATA%\agr-assistent\models при первом запуске.
Разработка
uv run pytest