- Окно настроек: модель и провайдер (со списком моделей с сервера), озвучка,
голосовой ввод, слово активации, автозапуск с Windows
- Сохранение в config.yaml через ruamel.yaml с комментариями и ссылками ${VAR},
проверка значений до записи; переключатели трея тоже сохраняются
- Настройки LLM и переключатели применяются на лету, для остального — перезапуск
- Один экземпляр приложения, лог в файл, аргументы --config и --wait-pid, русские диалоги Qt
- Сборка PyInstaller (onedir) с библиотеками CUDA, иконка приложения
- Тесты сохранения настроек и окна настроек
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
92 lines
5.7 KiB
Markdown
92 lines
5.7 KiB
Markdown
# agr-assistent
|
|
|
|
Минимальный AI-ассистент, живущий в системном трее.
|
|
|
|
- LLM: локальные модели (Ollama, LM Studio, llama.cpp) или OpenRouter — через единый OpenAI-совместимый API
|
|
- Текстовый чат со стримингом ответа
|
|
- Озвучка ответов голосом Silero: фразы проговариваются по мере генерации, блоки кода пропускаются
|
|
- Голосовой ввод по глобальной горячей клавише: faster-whisper на видеокарте, конец фразы по паузе (Silero VAD)
|
|
- Слово активации («ассистент») через Vosk — без нажатия клавиш
|
|
|
|
## Запуск
|
|
|
|
Нужен [uv](https://docs.astral.sh/uv/).
|
|
|
|
```bash
|
|
uv sync
|
|
uv run agr-assistent
|
|
```
|
|
|
|
При первом запуске рядом создаётся `config.yaml` (путь можно переопределить переменной
|
|
`AGR_ASSISTENT_CONFIG`). В нём выбирается провайдер и модель:
|
|
|
|
```yaml
|
|
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
|
|
|
|
```bash
|
|
uv run pyinstaller agr-assistent.spec --noconfirm
|
|
```
|
|
|
|
Результат — папка `dist\agr-assistent` (~2.8 ГБ, из них ~2 ГБ — библиотеки CUDA) с
|
|
`agr-assistent.exe`; её можно переносить целиком. `config.yaml` создаётся рядом с exe, модели
|
|
скачиваются в `%LOCALAPPDATA%\agr-assistent\models` при первом запуске.
|
|
|
|
## Разработка
|
|
|
|
```bash
|
|
uv run pytest
|
|
```
|