Долгосрочная память ИИ-агентов: паттерны и хранение
Продвинутое4 минРедакция Innovialabs
Коротко
Долгосрочная память — это хранение отобранной информации вне модели и подгрузка в каждый запрос только нужного; сочетайте профиль, факты и векторный поиск, давайте каждой записи источник и срок жизни и позволяйте пользователю ее удалить.
Как на самом деле работает память агента
Языковая модель ничего не помнит между запросами. Все, что она «знает» о пользователе в диалоге, — это то, что вы положили в контекстное окно. Поэтому долгосрочная память — это функция приложения: вы сохраняете отобранную информацию в своей базе и достаете нужные части в промпт для каждого нового запроса.
Цель — не запомнить все. Цель — помнить правильное, поддерживать его актуальным и забывать, когда нужно.
Четыре паттерна памяти
| Паттерн | Что хранится | Подходит для | Слабое место |
|---|---|---|---|
| Скользящее саммари | Сжатый пересказ прошлых диалогов | Продолжения длинных разговоров | При каждом пересказе теряются детали |
| Извлеченные факты | Короткие утверждения: «предпочитает доставку после 18:00» | Предпочтения, решения, ограничения | Нужны хорошее извлечение и разрешение конфликтов |
| Векторный поиск | Эмбеддинги прошлых сообщений и заметок | «Что мы обсуждали про X?» | Может достать устаревшее или нерелевантное |
| Профиль пользователя | Структурные поля: язык, город, тариф, роль | Стабильные атрибуты, персонализация | Жесткий, покрывает только известные поля |
Большинство агентов в продакшене их комбинируют: профиль загружается всегда, факты по текущей теме добавляются, векторный поиск закрывает пробелы, а саммари текущей сессии держит нить разговора.
Запись воспоминаний
Не сохраняйте каждое сообщение. Запускайте отдельный шаг memory writer после реплики или в конце сессии:
- Модель читает последний обмен репликами и предлагает кандидатов в память.
- Каждый кандидат проверяется: касается ли он пользователя, долговечен ли, пригодится ли позже, сказал ли это пользователь, а не модель догадалась.
- Он сравнивается с существующей памятью: добавить, обновить, объединить или игнорировать.
- Запись сохраняется с метаданными.
Минимальная запись памяти:
{
"user_id": "u_123",
"type": "preference",
"text": "Prefers answers in Uzbek",
"source": "chat:2026-10-02:msg_88",
"confidence": "stated",
"created_at": "2026-10-02",
"expires_at": null,
"sensitivity": "low"
}
Поле source позволяет понять, почему агент так считает. Поле confidence отделяет сказанное пользователем от выведенного моделью; выведенные факты используйте осторожно или уточняйте у пользователя.
Чтение воспоминаний
От качества выборки зависит, поможет память агенту или запутает его.
- Сначала фильтр, потом поиск: по пользователю, типу, сроку действия. Никогда не ищите по всем пользователям сразу.
- Ранжируйте по релевантности и свежести: новый факт обычно важнее старого на ту же тему.
- Ограничивайте объем: несколько точных воспоминаний лучше множества отдаленно связанных.
- Подавайте память как данные: в явно отмеченном блоке промпта, чтобы модель воспринимала ее как контекст, а не инструкции.
Устаревание и обновление
Память стареет. Клиент переезжает, меняет тариф или завершает проект.
- Фактам с ограниченным сроком давайте дату истечения: «в командировке до пятницы».
- При противоречии заменяйте старый факт и сохраняйте запись в истории, если нужен аудит.
- Периодически консолидируйте: объединяйте дубликаты, удаляйте то, что ни разу не понадобилось.
- Пересобирайте саммари из фактов, а не делайте саммари из саммари бесконечно — так теряются детали.
Контроль приватности
Запомненные данные — это персональные данные, часто более чувствительные, чем исходный чат, потому что они сжаты и упорядочены.
- Сообщайте пользователям, что агент запоминает, и какую информацию.
- Дайте возможность просматривать, редактировать и удалять память, включая удаление всего сразу.
- Не храните чувствительные категории — здоровье, платежные данные, пароли, — если продукт без этого не может и у вас нет правового основания.
- Строго изолируйте клиентов: каждый запрос ограничен ID пользователя и организации на уровне базы.
- Удаляйте везде: вместе с записью удаляйте ее эмбеддинг, кэши и копии в логах.
- Применяйте к хранилищу памяти те же требования локализации данных, что и к основной базе.
Частые ошибки
- Хранить сырые расшифровки и называть это памятью.
- Сохранять догадки модели как факты.
- Нет срока жизни, и агент уверенно использует устаревшие данные.
- Поиск по памяти без фильтра по пользователю, из-за чего данные утекают между аккаунтами.
- Считать сохраненный текст доверенными инструкциями — это открывает путь для prompt injection через память.