Підключення AI для контролю Home Assistant

Підключення AI для контролю Home Assistant
Photo by Alex Knight / Unsplash

Вступ

Привіт. В попередній публікації ми запустили локально сервіс Ollama Web UI. Також там було описано як встановити home-3b-v3 модель, яка була спеціально розроблена для керування розумним будинком Home Assistant. Не полініться та перегляньте

Самостійни хостинг AI - Ollama Web UI
Сьогодні ми запустипо шучний інтелект (ШІ абл AI) і розташуємо його на власному сервері який знаходиться вдома. Доступ до AI буде через веб-інтерфейс як і у більшості self-hosted сервісів. Пререквізити Ми будемо запускати все на локальному сервері Proxmox VE, який в мене давно налаштований. Для Ollama нам знадобиться Docker, який

А зараз ми інтегруємо цю модель у мій домашній сервер Home Assistant і перевірими на скільки швидко все працює. Заварюйте каву і погнали.

Спершу давайте трохи ознайомимось з самою моделлю.

fixt/home-3b-v3
The “Home” model is a fine tuning of the StableLM-Zephyr-3B model. It achieves a score of 97.11% score for JSON function calling accuracy.

В описі докладно розписані всі деталі з яких мені особисто були цікавими:

  • Типи підтримуємих сутностей: blind, light, garage_door, media_player, fan, lock, climate, switch, vacuum, todo, input_select, timer
  • Мови: English, German, Spanish, French
    • нажаль для мене українську там не скоро завезуть
  • Установка компонента через Home Assistant Community Store (HACS) - https://hacs.xyz/

З цього зрозуміло, що українською мовою воно не заговорить, але маю надію, що хоча б англійською буде швидко виконувати команди.

Детально про інтеграцію в Home Assistant розповідає Fixt у своєму блозі: https://fixtse.com/blog/ollama-webui. Я значною мірою повторював його інструкції з поправкою на те, що в мене виділений сервер з Proxmox. Дуже рекомендую подивитись його ролик.

Установка інтеграцїї

Якщо у вас не встановлено HACS у вашому Home Assistant, то попередньо встановіть його.

Тепер переходино за посиланням, для швидкого додавання і установки нового репозиторія: https://my.home-assistant.io/redirect/hacs_repository/?category=Integration&repository=home-llm&owner=acon96

При переході вас перепитає чи бажаєте додати новий репозиторій.

А після відкриється сторінка LLaMA Conversation, внизу буде кнопка для загрузки, а опісля потрібно перезапустити сервер Home Assistant - “Developer Tools” tab -> Services -> Run homeassistant.restart

Налаштування інтеграції

Заходимо в інтеграції і додаємо нову, де в пошуку треба знайти LLaMA Conversation

В наступному діалозі обираємо Ollama API

Тепер знадобиться пригадати IP адресу, де розміщено Ollama Web UI.

  • Hostname: 192.168.1.30
    • У вас має бути своя адреса, бажано статична, бо якщо ні, то після перезапуску Ollama Web UI можливо матиме іншу адресу і інтеграція перестане працювати, але ви всі і так це розумієте - молодці
  • Port: 11434
  • Model: fixt/home-3b-v3
    • тут важливо вказувати саме ту модель, яку ми попередньо встановили
  • Key: залишаємо пустим, бо ви будемо звертатись до власного сервера, який доступен для нас без оплати та усіляких ключів

Останній же крок я передивився, проте нічого не міняв.

Думаю, що мало би сенс змінити колись сам Prompt, але лише коли вже буду мати повноцінну підтримку української мови.

Підверджуємо все і готово! Можемо користуватись.

Таким способом можна додати безліч моделей, які встановлені у вашому Ollama Web UI повторюючи ці кроки для кожної з них

Створення нового асистента

Перейдіть в налаштування Home Assistant і відкрийте Voice assistants. Нажміть на кнопку Add Assistant

Введіть імʼя та оберіть основну мову. В полі агента оберіть тільки налаштовану інтеграцію. Для speech-to-text оберіть wisper, а для text-to-speech - piper. Якщо у вас їх нема, то додайте, як звичайні інтеграції Home Assistant.

Після створення він зʼявиться в переліку асистентів

Спілкування з асистентом

Щоб знайти асистента треба відкрити любий дашбоард та в правому верхньому куті натиснути кнопку виклику асистента та обрати потрібного - Self Hosted AI

Ось приклад нескладного діалога англійською.

В налаштуваннях асистента я зайшов в Debug mode та подивився час виконання, який склав близько 8,5 секунд. Це точно не найліпишй результат, але й засмучуватись зарано... Забігаючи наперед скажу, що я ще не бачив скільки займали інші запити, тому був засмучений уже і цій цифрі. Як же я поспішив засмучуватись.

Управління будинком

З самого початку всі зусилля були заради цього. Виділений сервер Proxmox та окремий віртуальний компʼютер для Home Assistant та Ollama Web UI, щоб в результаті керувати будинком.

Базовим прикладом буде увімкнення світла у вашій оселі. Я спробував спочатку для ванної кімнати, і нічого не відбулось, а потім попросив і для кухні, але він увімкнув лише один світільник із двох. Це одна з перших спроб і найбільш невдала, всі інші були на порядок кращі.

В мене вже були спроби налаштувати вбудованого асистента Home Assistant, але йому треба говорити доволі чіткі команди, де кожна помилка буде призводити до відсутності результату. На відміну від стандартного, асистент зі штучним інтелектом може пробачити ваші помилки і зрозуміє вас майже завжди.

Після багатьох спроб можу підтвердити, що все ж таки керувати будинком через асистента вже можна і я навіть можу це рекомендувати

Контекст розмови

Це мабуть одна з найбільших переваг управління за допомогою AI - він залишається в контексті. Ось на прикладі пари команд: я прошу включити світло у ванній, він включає, а потим я просто кажу виключи "його", не вказуючи який саме світильник має бути задіяно в команді. Але знаючи попередню історію розмови він з легкість оприділяє з яким пристроєм треба працювати.

Україномовний помічник

По аналогії з Self Hosted AI я сконфігурував україномовного помічника. А вдруг щось получиться?

Не знаю як воно мало би працювати, але дуже довго що ввімкнення, що вимкнення. Час виконання аж під 4,5 хвилини. А також чомусь відповідь надає англійською

Але ж! Все ж! Воно працює і розуміє мене, що не може не тішити.

Якщо витратити достатньо часу, то можливо приручити цього звіра і добитися від нього адекватної відповіді українською.

Ось є приклад комбінованого запиту. Відповідь страшна та крива, але суть він уловив і надав запитану інформацію

Але більш за все сподобалась ця відповідь

Обробка помилок

Стосовно помилок доречі ось приклад. Я зробив помилку в запиті і яким би він там абсурдним не казався з точки зору розуміння, все одно якась відповідь була згенерована. Шкода, що відповідь не далеко пішла 😀.

А ось англомовний помічник (у наведеному прикладі трохи інша модель, це я вже грався) дуже вправно відповідає з повним розумінням. Ми всі не ідеальні і на скору руку дуже легко зробити помилку. Замість "temperature" я написав "temparature". Але відповідь я все ж отримав і доволі чітку.

Комбіновані запити з умовами

Задався також ціллю перевірити чи виконуватиме завдання з умовами. Ось в першому прикладі я попросив увімкнути світло у ванній, якщо горить світло у залі. Він світло увімкнув, але якось непевно судячи з відповіді

Те саме відбулося з наступним прикладом

Я не здавався і попросив розповісти мені жарт, якщо температура більше 10 градусів цельсія. А цей жарт мені дуже сподобався (ні). Він просто взяв і увімкнув світло у ванній, продовжуючи попередній контекст розмови

Я не оцінив той жарт.

Стало зрозуміло, що невеличкі моделі справляються посередньо з складними запитами, а то й зовсім їх не розуміють, як показав мій приклад.

Час виконання запитів

І на завершення цього розділу додам декілька скріншотів з часом виконання. Моє залізо геть не підходить під цю задачу.

А ось пара додаткових з іншою більшою моделлю. Перший запит зайняв під 300 секунд, а всі наступні були значно швидші

Стабільність роботи

Це все ще потребує переверки, але можу запевнити, що прозорості в діях AI нема, і ось приклад де я робив два однаковісільких запити підряд в одному чаті.

Перший запит пройшов за 17 секунд, а наступний однаковісінький виконався за 265 секунд. Ну як так?

Тюнінг параметрів

Коли вперше щось запитуєш у асистента, то воно довгенько виконує команди і щоб покращити результати я пішов трохи змінювати параметри.

CPU

Перше, що я зробив, це подивився на загрузку контейнера з AI в стані спокою. Дійсно все спокійно.

Але при зверненні і опрацюванні запиту ситуація змінюється і процесор починає працювати під 100%

Хоч у мене на той момент і було обрано лише 3 з 4 ядер процесора, я вирішив додати всі 4, але встановити ліміт використання на 3,5. Таким чином в мене зʼявляється фактично 4 потоки і трішечки більше ресурсу. Навіть якщо я виставлю ліміт в значення 3 то всеодно буде використано 4 потоки. Що є краще ніж три.

А ще добре що цей показник на графіку більше не залипає в суцільний червоний і хочаб візуально не здається, що йому поганенько.

Налаштування моделі

Я повернувся на сторінку налатувань асистентів (Settings -> Voice assistants), натиснув редагування і відкрив налаштування моделі, де змінив два параметри:

  • максимальну кількість токенів, які повертаються, зменшив зі 128 до 64, бо мені не потрібні довгі тіради
  • а також збільшив час очікування з 90 до 900 секунд, щоб точно дочекатись відповіді, бо інколи сильно підвисало і було цікаво чи повернеться хоч щось назад. Але це не обовʼязково.

Всі ці маніпуляції дозволили при моєму залізі (Intel N100) отримувати відповідь за 8,5 секунд, але це лише найкращі показники. В середньому цапити проходять за більше ніж 2 хвилини.

Моделі

Я закачав багато моделей - і великі і малі. Воно вартує того, щоб особисто перевірити яка саме задовільнить ваші потреби. За ось цим посиланням будуть всі моделі, які підтримують роботу з Home Assistant

Ollama
Get up and running with large language models, locally.

Також не забувайте, що на сторінці кожної моделі є різні теги з різними розмірами моделей

Я запускав найменшу q2_k і вона виявилась найпроворнішою

Пристрої доступні для асистентів

На сторінці асистентів є налашування сутностей якими можна керувати. Там же ви можете задавати псевдоніми кожному з ваших пристроїв. Не думаю, що штучний інтелект сам по собі буде супер розумним. Як завждий прийдеться його дресерувати. Але тим мабуть і краще, що після незначного налаштування ви зможете досягти саме тих результатів на які очікавали.

Також у моєму прикладі ви бачите аж 120 сутностей доступних для асистента. Я дуже рекомендую обходитися лише мінімальним набором. Це може скоротити час відповіді.

На початку діалога асистент передає в AI перелік всіх відкритих для асистента пристроїв. Чим він більший, тим відповідно більше часу необхідно AI на обробку та аналіз цих даних. Тож не додавайте геть усе, як то с початку зробив я.

Заміна вхідних параметрів

Стандартний Prompt не ідеальних і можливо не завжди добре підходитиме під ваші задачі. У нас є все щоб його скорегувати в потрібному напрямку.

Нехай буде приклад з датою та часом. За замовчуванням ваш асистент і гадки не матиме котрий сьогодні день чи яка година. Просте запитання в різних варіаціях завжди видає 04/22/2022 12:45 am

Щоб це виправити повертаємось до налаштувань асистента та натискаемо на налаштування біля поля моделі.

У вікні редагування я додав Current time: {{ now() }}, де now() цe функція яка повертає дату та час у наступному форматі: 2024-04-01 01:06:27.771867+03:00

Зберігши ці зміни ми поділилися з AI новою для нього інформацією і тепер кожен раз при відкритті діалогу з асистентом він буде отримувати поточні дату та час і буде відповідати коректно

Подібним чином можна додати безліч деталей, але спробуйте не перегрузити його.

Keep Alive

Я знайшов, що колись вже піднімалась тема того, щоб модель залишалась в RAM якомога довше: https://github.com/ollama/ollama/pull/2146

В налаштування Ollama Web UI я знайшов відповідний параметр, але чомусь значної зміни в поведінці я не отримав. Можливо на різних моделях воно по різному себе проявляє. Тож мабуть також вартує того, щоб налаштувати і це.

Підсумок

Сама інтеграція в Home Assistant доволі банальна і не цікава. Гаряче починається коли ти додаєш вже тучу моделей і в різних діалогах вже сам не встигаєш робити досліди. Саме гра з моделями зайняла майже 80% витраченого часу. Але це так цікаво та захоплююче, що просто не відірватись. Тому особовиста рекомендація не починаю розбиратись з цим надвечір, бо можливо, що забудете про сон.

Мій особистий експеримет з усим цим вийшов двояким. З одного боку потужність мого сервера дуже впливає на час відповіді, який мене геть не задовільняє, а з іншого вияснилось, що є підтримка української мови і мабуть багатьох інших - це відкрива більше модливостей.

Дуже вразила обробка помилок. Це саме те, чого так не вистачало в асистенті. Цей напрямо дуже потужно розвивається і для повної та дешевої адаптації штучного інтелекту в домашніх умовах треба дати цьому всьому ще пару років. Я дуже позитивно настроєний, а вам раджу щонайскоріше починати розбиратись в цій темі.

Свої думки стосовно штучного інтелекту частково я виклав ще і тут. Переходьте та дізнивайтесь більше моїх особисти думок про це і не тільки

Ваші слова марні
Я доволі випадково натрапив на цей пост Скота і можливо в інший день навіть пройшов би повз, проте мене зачепила саме назва і її суть Your words are wasted - Scott Hanselman Останнім часом я вкотре ловив себе на думці, що переповідаю по суті ту саму історію різним людям. Коли

Read more

Скрипти-помічники для Proxmox

Скрипти-помічники для Proxmox

Вступ Привіт. Хочу поділитись з вами дуже корисним ресурсом, який мені допоміг на самому початку знайомства з Proxmox VE. Proxmox VE Helper-ScriptsScripts for Streamlining Your Homelab with Proxmox VEProxmox VE Helper-Scriptstteck Заздалегідь хочу подякуват автору https://github.com/tteck, який нещодавно оновив дизайн ресурсу та продовжує підтримку та розозробку, додаючи

By Volodymyr Lavrynovych
Інтеграція Imou Life у Home Assistant

Інтеграція Imou Life у Home Assistant

Всім привіт! Розповідаю швиденько як додати підтримку камер Imou Life до вашого розумного будинку Home Assistant. Вступ Home Assistant не має вбудованої підтримки камер Imou Life, але сторонні розробники вже давно мають рішення цієї проблеми. Добре, що існує HACS як агрегатор подібних рішень з можливістю швидко встановити та використовувати нові

By Volodymyr Lavrynovych