Этап 8: настраиваемые команды

- commands.yaml с рабочими примерами: медиа, громкость, поиск, папки, блокировка;
  перечитывается автоматически, ошибки не ломают остальные команды
- Действия run / open / http / keys; вывод и ответы возвращаются модели
- Вызов через модель (tool calling) и мгновенно по точным фразам, в том числе с параметрами
- Подтверждение «да/нет» для опасных команд, после голосового вопроса микрофон включается сам
- Безопасность: запуск без оболочки, защита аргументов cmd/PowerShell/.bat,
  переменные окружения раскрываются только в шаблоне
- Вкладка «Команды» в настройках
- Тесты разбора, действий, фраз и полных сценариев через Assistant

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mrleo1nid
2026-09-17 04:38:57 +03:00
co-authored by Claude Opus 5
parent 84d8aaa848
commit 04029f3750
18 changed files with 1770 additions and 24 deletions
+39
View File
@@ -7,6 +7,8 @@
в течение пары минут после ответа видят предыдущие вопросы
- Журнал запросов и ответов со стримингом
- Долговременная память: «запомни…», «забудь…», а устойчивые факты о вас модель сохраняет сама
- Настраиваемые команды: запуск программ и скриптов, ссылки и папки, HTTP-запросы (Home Assistant),
клавиши и медиа — через модель или мгновенно по точной фразе, опасные — с подтверждением
- Озвучка ответов голосом Silero: фразы проговариваются по мере генерации, блоки кода пропускаются
- Голосовой ввод по глобальной горячей клавише: faster-whisper на видеокарте, конец фразы по паузе (Silero VAD)
- Слово активации («ассистент») через Vosk — без нажатия клавиш
@@ -50,6 +52,43 @@ Silero читает только кириллицу: числа переводя
(например, `qwen2.5:7b` в Ollama или большинство моделей OpenRouter). С другими моделями
ассистент просто отвечает без памяти и один раз предупреждает об этом.
### Команды
Команды описываются в `commands.yaml` рядом с `config.yaml`: при первом запуске он создаётся
с рабочими примерами (пауза, громкость, поиск, папка «Загрузки», блокировка) и
закомментированными шаблонами для скриптов, Home Assistant и выключения компьютера.
После сохранения файл перечитывается сам; список команд и ошибки видны в настройках.
```yaml
commands:
- name: room_light
description: Включить или выключить свет в комнате
phrases: ["свет {state}"] # мгновенно, без модели
parameters:
state: {type: string, enum: ["on", "off"]}
confirm: false # true — спросить «да/нет» перед выполнением
action:
type: http
method: POST
url: http://homeassistant.local:8123/api/services/light/turn_{state}
headers: {Authorization: "Bearer ${HA_TOKEN}"}
json: {entity_id: light.room}
```
Как команда выполняется:
- **Модель** выбирает команду по описанию и подставляет параметры («сделай потише на десять
шагов»). Результат (вывод скрипта, ответ сервера) возвращается модели, и она отвечает.
- **Точная фраза** выполняется сразу, без модели и даже без интернета, если запрос совпал
с ней целиком (регистр, «ё» и знаки препинания не важны).
- **Подтверждение** (`confirm: true`): ассистент спрашивает «Выполнить …?» и ждёт «да» или «нет»;
если вопрос был голосовым, микрофон включается сам.
Безопасность: модель может только выбрать команду из файла и передать параметры, которые
проверяются по описанию. Программы запускаются без командной оболочки; для `cmd`, PowerShell
и `.bat`/`.cmd` значения со спецсимволами отклоняются. `${ПЕРЕМЕННЫЕ}` подставляются только
из шаблона, поэтому секреты не попадают ни в модель, ни в параметры.
### Голосовой ввод
Нажмите `Win+Alt+Space` (настраивается в `voice.hotkey`), дождитесь короткого сигнала и говорите —