Вот такие дайджесты я открываю каждое утро в своей читалке новостей:
При чём тут YandexGPT? Без нейросетей подобные дайджесты были бы шаблонными и скучными:
Время суток: утро.
Погода: Облачно, 10.4 °C. Ветер 4.61 м/с.
Список задач на сегодня:
- Написать статью про утренние дайджесты
Биржевые котировки на данный момент:
- IMOEX: 2660.36 (-2.14%)
- S&P500: 5808.12 (-0.03%)
- USD_RUB: 96.6657 (-0.08%)
Подписчики man smart-home:
- Telegram: 175
- YouTube: 692
И если в виде текста подобное еще можно терпеть, то в озвучке от колонки шаблонный текст вообще плохо воспринимается. А в пересказе от нейросетей получается как-то человечнее что ли 🙂
В примере выше колонкой управляет Home Assistant, он же собирает всю информацию, генерирует шаблонный текст и пересказывает его через YandexGPT.
Кстати, идея использовать LLM и Home Assistant для создания дайджестов приходила в голову не только мне:
Поэтому если у нас мысли сходятся и вам захотелось повторить что-то похожее, то сейчас расскажу, как можно сделать такие же дайджесты, как у меня 🙂. Единственное, вряд ли вам нужно прям точь-в-точь то же самое, поэтому я расскажу про упрощенный вариант, который легче адаптировать под себя.
Что за упрощенный вариант?
- Для примера я буду отправлять дайджесты в Telegram, хотя сам использую RSS-читалку для потребления новостей. Всё-таки генерация своей ленты выходит за рамки этой статьи, да и RSS уже давно никому не нужон.
- Также вряд ли вам нужны биржевые котировки и статистика по подписчикам на моем канале — эту часть я выкину.
- Я использую Sleep as Android для отслеживания сна, поэтому дайджесты генерируются сразу после моего пробуждения. Но для примера я буду использовать фиксированное время.
Интеграция Home Assistant и YandexGPT
Первым делом нужно установить вот эту интеграцию:
На вкладке Wiki подробно расписан процесс установки и добавления YandexGPT в Home Assistant, поэтому надеюсь здесь проблем не возникнет.
После добавления YandexGPT уже можно взаимодействовать с нейронкой через conversation.process
:
Но для наших дайджестов стандартный системный промпт не подойдет и его нужно заменить в настройках интеграции:
Можете взять инструкции ниже в качестве образца и адаптировать под свои нужды:
Ты — ведущий утреннего шоу на ТВ, я твой зритель.
Поприветствуй зрителя с учетом времени суток.
В ответе кратко расскажи о погоде и перечисли запланированные встречи (не упоминай встречи, если их нет). Перескажи список задач на сегодня.
Сформулируй ответ так, чтобы получился новостной репортаж на утреннем ТВ.
Отвечай простым текстом, без Markdown, без вводных фраз и объяснений.
Дальше необходимо добавить автоматизацию, которая будет запускаться каждое утро и отправлять готовый дайджест в Telegram:
automation:
- alias: "Compose morning digests and send them to Telegram"
mode: single
triggers:
- trigger: time
at: "07:30:00" # в 7:30 утра
actions:
- action: conversation.process
data:
agent_id: conversation.yandexgpt
text: |
Время суток: утро.
Погода: {{ state_translated('weather.saint_petersburg') }}, {{ state_attr('weather.saint_petersburg', 'temperature') }} °C. Ветер {{ state_attr('weather.saint_petersburg', 'wind_speed') }} м/c.
{% if (state_attr('calendar.calendar', 'location') | d(boolean=true) | length > 0) -%}
У зрителя на сегодня запланирована встреча по адресу: {{ state_attr('calendar.calendar', 'location') }}.
{% endif -%}
Список задач зрителя на сегодня:
{% if not is_state('todo.dom_roland', '0') -%}
- {{ state_attr('todo.dom_roland', 'all_todos') | map(attribute='subject') | join('\n- ') }}
{%- endif %}
response_variable: gpt_response
- service: notify.telegram_me
data:
message: "{{ gpt_response.response.speech.plain.speech }}"
Автоматизация генерирует шаблонный текст, отправляет его в YandexGPT и записывает ответ от нейронки в переменную gpt_response
. А на следующем шаге текст ответа отправляется в Telegram.
Настройка интеграции с Telegram описана в документации — здесь дополнительные пояснения от меня вряд ли нужны. А вот по шаблону, думаю, нужно дать пару комментариев:
weather.saint_petersburg
— это погодный сенсор, не забудьте подставить свое значение.- Я активно пользуюсь календарем и заношу в него события, чтобы не продолбаться и не забыть, что мне надо сходить на стрижку на следующей неделе, например. При этом сам календарь (
calendar.calendar
) синхронизируется с Home Assistant через CalDAV. - Для ведения задач я использую Microsoft ToDo. Home Assistant обновляет список задач (
todo.dom_roland
) с помощью вот этой интеграции. - Предварительно шаблон можно отладить в панели разработчика, чтобы лишний раз не слать запросы в облако.
Результат
В итоге вот такие дайджесты будут приходить каждое утро:
И если раньше вы смотрели на скучный список дел на день и вам не хотелось ими заниматься, то теперь нейросеть будет присылать список задач, которые вам захочется все переделать 😄
Собственно это все, что я хотел рассказать про нейросетевые дайджесты. Это всего лишь один из примеров того, как можно использовать большие языковые модели. Если у вас есть какие-то интересные идеи по использованию нейросеток, то буду рад почитать в комментариях.
Бонус: Иллюстрации с использованием YandexART
Помимо генерации текста с помощью YandexGPT, интеграция еще умеет создавать картинки. Зимний пейзаж на скриншоте выше как раз был получен вот из такого промпта:
Санкт-Петербург, утро, зима, {{ state_translated('weather.saint_petersburg') }}, пейзаж
Другими словами, это пейзаж Санкт-Петербурга, который меняется в зависимости от погоды за окном.
Сгенерировать такую картинку с одной стороны не сложно, а с другой стороны в Home Assistant этот процесс сделан не очень удобно. Поэтому предварительно нужно будет сделать 2 вещи:
- В настройках Home Assistant нужно будет добавить директорию
/tmp
в белый список; - А так же понадобится получить идентификатор интеграции в инструментах разработчика.
Предварительные шаги
Чтобы Home Assistant смог прочитать сгенерированную картинку, нужно отредактировать configuration.yaml
и добавить /tmp
в белый список:
homeassistant:
allowlist_external_dirs:
- /tmp
Затем нужно перейти в инструменты разработчика и «вытащить» идентификатор установленной интеграции. Для этого на вкладке с действиями нужно выбрать yandexgpt_conversation.generate_image
, а так же нужную интеграцию с YandexGPT:
Затем идентификатор можно будет скопировать, перейдя в режим YAML:
Добавляем иллюстрации в дайджест
Наконец можем перейти непосредственно к генерации иллюстраций. Для этого нужно добавить вызов сервиса yandexgpt_conversation.generate_image
и немного отредактировать отправку сообщений в Telegram:
...
- action: yandexgpt_conversation.generate_image
data:
config_entry: 01JA39HX1W9EYXM68NZMJ0N0PG # идентификатор установленной интеграции
seed: "{{ now().strftime('%Y%m%d') }}"
file_name: "/tmp/scenery.jpg"
prompt: "Санкт-Петербург, утро, зима, {{ state_translated('weather.saint_petersburg') }}, пейзаж"
response_variable: art_response
- service: notify.telegram_me
data:
message: ""
data:
photo:
- file: "{{ art_response.file_name }}"
caption: "{{ gpt_response.response.speech.plain.speech }}"