Files
agr-assistent/README.md
T
mrleo1nidandClaude Opus 5 84d8aaa848 Этап 7: долговременная память
- Факты о пользователе в SQLite, в системном промпте с номерами
- Инструменты remember / update_memory / forget, автоматическое запоминание отключается
- Цикл вызова инструментов со стримингом (до 5 кругов), проверка и приведение аргументов
- Откат без инструментов для моделей, которые их не поддерживают, с одним предупреждением
- Действия в журнале, вкладка «Память» в настройках
- Фейковый OpenAI-совместимый сервер для тестов, тесты полного цикла через Assistant

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 04:27:16 +03:00

107 lines
7.2 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 читает только кириллицу: числа переводятся в слова, латиница пропускается.
### Память
Скажите «Запомни, что у меня Škoda Octavia» или «Забудь про машину». Если включено
автоматическое запоминание (`memory.auto_save`), модель сама сохраняет устойчивые факты:
имя, близких, технику, предпочтения. Факты хранятся локально в
`%LOCALAPPDATA%\agr-assistent\memory.sqlite3` и добавляются к каждому запросу; посмотреть,
исправить и удалить их можно в настройках на вкладке «Память».
Память работает через вызов инструментов, поэтому модель должна их поддерживать
(например, `qwen2.5:7b` в Ollama или большинство моделей OpenRouter). С другими моделями
ассистент просто отвечает без памяти и один раз предупреждает об этом.
### Голосовой ввод
Нажмите `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
```