Продолжаем курс про AI агентов. Серия 3.2 разбираем Long-Term Memory.
Мы начали обсуждать эту тему в первом посте про сессии общения с агентом. Там мы узнали, что в стейте сессии (
session.state) можно удобно сохранить данные, которые обсуждались с агентом, но есть проблема — после рестарта сессии они пропадут. Чтобы такого не происходило и юзеру не приходилось каждый раз заново рассказывать, кто он такой и какие задачи решает, — используется долгосрочная память.Чтобы это происходило в Гугловской инфраструктуре уже есть две удобные штуки:
1.
InMemoryMemoryService — сервис, который прототипирует (имитирует) долгосрочную память. Не для продакшена, но для тестирования и прототипирования.2.
VertexAiMemoryBankService — облачный managed сервис, который объединяет в себе и БД и LLM для полного управления памятья (запомнить, вспомнить, изменить воспоминания). Как раз для продакшена.Конечно, можно юзать и вообще не связанные с гуглом сервисы. Например векторные БДшки:
• Mem0.ai — БД, ориентированная именно на агентное использование (видосик с их сайта как раз прикрепил, т.к. он идеально показывает, как работает такой сервис. Баг верстки с уползающим вверх цветной плашки статусом — это лол. Но они ж разрабы БД, простим им 😁). У них, кстати, есть щедрый Free Tier.
• Qdrant — тоже одно из самых популярных решений, но больше просто как векторный поиск. Опенсорсное, но есть и клауд версия.
• Есть еще достаточно популярны Faiss (просто либа), Chroma и Pinecone.io.
В общем, как видите, на любой вкус и цвет 👍
Так как оно работает?
Все просто:
1. Сначала мы одной строкой инициируем
memory_service — это просто обертка вокруг одного из выше перечисленных сервисов. 2. Далее общаемся с агентом. В сессии автоматически сохраняются логи нашего общения.
3. Логи сессии передаются в память, причем уже в структурированнов виде с помощью:
memory_service.add_session_to_memory(session) — теперь в памяти лежит наша беседа в сжатом виде. 4. А дальше мы даем нашему агенту тул
load_memory, который агент может вызвать по своему усмотрению (да-да память — это инструмент агента). Или можем дать ему тул preload_memory — с помощью него агент будет читать все доступные воспоминания перед каждым запуском. Это надежнее, но менее эффективно.Усе, агент имеет долгосрочную память и умеет с ней работать! 👍
Но как правильно наполнять память? Прописывать руками цикл какой-то что ли? И тут Google за нас подумал! Чтобы автоматизировать процесс складывания знаний в память, в ADK есть особый механизм — колбеки (Callbacks). Это такие функции, которые запускаются автоматически по триггеру. Конкретно в нашем случае нас интересует
after_agent_callback — этот колбек запускается после каждого ответа агента и инициирует add_session_to_memory() из пункта 3. Просто, как пять копеек! Чтобы самим попрактиковаться — как обычно, копируйте и прокликивайте вот этот ноутбук на Kaggle. 👍
Кстати, вы не ограничены одним агентом для использования памяти — можно строить централизованное хранилище, куда будет ходить множество разных агентов и шерить знания. Главное помните о безопасности!
#ИИученьесвет
Заместители