Налаштування голосового керування домом через Home Assistant без використання хмарних сервісів значно підвищує приватність та знижує залежність від інтернет-з’єднання, що критично для систем з високими вимогами до надійності.
Контекст і проблема
Більшість готових рішень для голосового керування використовують хмарні сервіси (Google Assistant, Alexa), що передбачає передачу аудіо та даних про стан дому на віддалені сервери. Це створює ризики щодо приватності, затримки через інтернет та залежність від наявності зв’язку. До прикладу, затримка відповіді голосового помічника через нестабільний інтернет може сягати 2-3 секунди, що неприйнятно для керування освітленням або системами безпеки.
Проблема ускладнюється тим, що багато користувачів Home Assistant прагнуть до локальної обробки даних, але не мають досвіду роботи з локальними моделями штучного інтелекту.
Практична реалізація
Для реалізації локального голосового керування, ми використовуємо Ollama для запуску моделі Whisper (для транскрипції мови) та Llama 2 (для обробки намірів). Потім інтегруємо ці моделі з Home Assistant через Node-RED.
# Файл configuration.yaml Home Assistant
# Додаємо інтеграцію Node-RED
node_red:
url: http://node-red:1880
# Файл node-red/flow.json
[
{
"id": "a1b2c3d4e5f6",
"type": "function",
"server": "local",
"version": 1,
"name": "Отримати текст з Whisper",
"map": {
"topic": "voice.input"
},
"outputs": 1,
"outputLabel": "text",
"function": "const whisperOutput = msg.payload; return msg;",
"x": 100,
"y": 100,
"wires": [
[
"b7c8d9e0f1a2"
]
]
},
{
"id": "b7c8d9e0f1a2",
"type": "llama",
"server": "local",
"version": 1,
"name": "Обробка намірів Llama 2",
"model": "llama2:7b-chat",
"prompt": "User: {{payload.text}}\nAssistant:",
"x": 300,
"y": 100,
"wires": [
[
"c3d4e5f6a7b8"
]
]
},
{
"id": "c3d4e5f6a7b8",
"type": "template",
"server": "local",
"version": 1,
"name": "Створення команди Home Assistant",
"template": "{\"domain\": \"script\", \"service\": \"call_service\", \"data\": {\"entity_id\": \"script.{{payload.intent}}\"}}",
"x": 500,
"y": 100,
"wires": [
[
"d5e6f7a8b9c0"
]
]
},
{
"id": "d5e6f7a8b9c0",
"type": "mqtt",
"server": "local",
"version": 1,
"name": "Відправка команди до Home Assistant",
"topic": "homeassistant/call_service",
"payloadType": "json",
"x": 700,
"y": 100,
"wires": []
}
]
# Команда для запуску Whisper (припускаючи Docker)
docker run --rm -it -v /path/to/audio:/audio --network=host ghcr.io/openai/whisper:latest transcribe /audio/audio.wav
# Команда для запуску Llama 2 через Ollama
ollama run llama2:7b-chat "User: Увімкни світло у вітальні\nAssistant:"
Цей приклад показує базову структуру. Whisper транскрибує аудіо, Llama 2 інтерпретує наміри, а Node-RED перетворює їх на виклики сервісів Home Assistant. Загальний час обробки команди, від моменту вимови до виконання, може становити до 0.8 – 1.2 секунди.
Типові помилки
- Неправильний шлях до аудіофайлу: Whisper вимагає коректного шляху до аудіофайлу, інакше він не зможе транскрибувати. Перевірте права доступу до файлу та правильність шляху.
- Недостатньо ресурсів для Llama 2: Llama 2, особливо великі моделі, вимагають значних обчислювальних ресурсів. Недостатній обсяг оперативної пам’яті або слабкий процесор призведуть до зависань або низької швидкості роботи. Використовуйте меншу модель (наприклад, llama2:7b-chat замість llama2:13b) або перенесіть обчислення на більш потужний сервер.
- Неправильний формат запиту до Llama 2: Llama 2 потребує чітко визначеного формату запиту (prompt). Некоректний формат призведе до неправильної інтерпретації намірів.
Результат
Після налаштування локального голосового керування, час відповіді на голосові команди скоротився з 2-3 секунд (при використанні хмарних сервісів) до 0.8-1.2 секунди. Це значно покращило зручність використання та надійність системи, особливо в умовах нестабільного інтернет-з’єднання. Налаштуйте Node-RED зараз та переконайтеся у перевагах локальної обробки даних.