Обновить

Изучаю механизм проактивного АИ-агента. Часть 2

В первой части я рассказал про концепт проактивного AI-агента и показал примеры сообщений, которые он мог бы присылать. Последние 3 дня я занимался реализацией — и сегодня пришло первое сообщение от него

За основу я взял популярный OpenClaw, но захотел переписать бота по-своему и разобраться с тем, как живёт и думает эта сущность

Архитектура: из чего состоят подобные OpenClaw агенты

Heartbeat — сердце агента

Это цикл, который раз в N минут триггерит основные события, проверки и запускает переписывание файлов, если нужно

«Проснись, посмотри, что изменилось, подумай, что предложить пользователю».

Memory — память агента

Нужно было спроектировать аналог краткосрочной и долгосрочной памяти, примерно как у людей.

Краткосрочная — контекст текущей сессии, что происходило сегодня, какие задачи обсуждали, что пользователь ответил. Долгосрочная — в случае OpenClaw это SQLite с механизмом эмбеддингов. Ну можно поставить любую другую векторную бд

Плюс есть еще такие файлы как Soul, Agents, Identity, User, Memory и еще несколько. Все они сразу попадают в Context Window

Без разделения на два типа памяти агент либо забывает всё на следующий день, либо тонет в контексте и начинает галлюцинировать.

Memory Compaction — сжатие памяти

В OpenClaw агент хранит часть контекста в файлах формата MEMORY_MM_DD_YYYY с историей каждого дня.

По прошествию нескольких дней агент делает Compact этих файлов и удаляет / архзивирует их исходники

Context Routing — маршрутизация контекста

Как и чем нужно заполнять контекст на протяжении времени? Как его сжимать?

Контекстное окно — ресурс ограниченный. Нельзя каждый раз загружать все цели, всю память, все задачи. Нужно выбирать: что релевантно сейчас, что можно опустить, что критично.

Context routing решает, какие куски информации попадут в промпт для конкретного цикла работы агента.

Prompt Assembly — сборка промпта

Как структурировать промпт? Какая информация в нём приоритетнее, а что можно поджать? Как выбираются цели на конкретный день?

Это отдельная инженерная задача. Промпт агента — не статичный текст. Он собирается динамически из кусков: текущие цели, релевантная память, задачи из таск-трекера, контекст дня недели и времени.

---------------

Что я добавил к исходному варианту OpenClaw от себя

Reflection — самооценка агента

Экспериментальный блок, где модель оценивает сама себя по 4 шкалам:

  • Actionability — дал ли конкретные шаги?

  • Relevance — был ли совет по теме цели?

  • Novelty — сказал ли что-то новое?

  • Overall quality — общее качество

Зачем это нужно: без обратной связи агент быстро скатывается в банальности типа «Не забудь поработать над своими целями!». Reflection заставляет его критически оценивать свой же output и со временем улучшать качество предложений.

К чему он у меня подключен

  • TickTick — мой таск-трекер, откуда бот смотрит задачи и ставит новые

  • Telegram — сюда он мне пишет и предлагает задачку на сегодня

  • Discord — самый лучший по функционалу на сегодня

----------------

Что я понял в процессе

Создание проактивного агента — это совсем другой уровень сложности по сравнению с обычным чат-ботом.

В чат-боте пользователь задаёт вопрос → получает ответ. Всё. Контекст понятен из вопроса.

В проактивном агенте нужно решить кучу вопросов, которые в чат-боте просто не возникают: когда писать, о чём писать, как не повторяться, как не раздражать, как понять, что задача уже неактуальна, как сжимать память, чтобы не выжирать токены.

Это, по сути, проектирование UX для системы, у которой нет интерфейса в привычном смысле — только текст в мессенджере.

Вот такие промежуточные итоги — получилось хоть немного разобраться в возможном механизме оркестрации под капотом агента

Если где то нашли неточность, то пинганите в комментах

В третей части напишу подробнее про OpenClaw, так как пока решил его потестировать

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2

«Яндекс Go» предложит пассажирам ждать такси 30–40 минут ради скидки

Пассажиры «Яндекс Go» смогут сэкономить на поездке в часы, когда такси заказывают особенно много людей. В такие моменты сервис предложит опцию «Позже»: машина приедет не сразу, зато поездка будет стоить меньше. Скидку даст «Яндекс Go» за свой счёт, она не уменьшит доход водителей.

«Яндекс Go» предложит пассажирам ждать такси 30–40 минут ради скидки

Публикации