Память ИИ-агента - это то, что позволяет агенту перенести что-то с одного шага или сеанса на следующий. Языковая модель сама по себе ничего не помнит между вызовами. Всё, что кажется ей запомненным, вернул в промпт ваш код. От того, как вы храните и извлекаете этот материал, зависит, что агент может вспомнить, как быстро и какой ценой на каждый ход.
Коротко. Агентам нужны четыре вида памяти: короткое окно диалога, долговременные факты, находимые по смыслу, черновик для текущей задачи и журнал произошедшего. У каждого своя форма, срок жизни и способ поиска, поэтому одна таблица памяти не подходит ни одному из них. HotKV хранит все четыре в одном движке в памяти с помощью команд
AMEM.*. Мы измеряли кеширование и векторный поиск HotKV, но не память агентов, поэтому эта статья объясняет устройство и не заявляет об ускорении.
Почему контекстное окно - это не память
Контекстное окно - это текст, который вы отправляете с каждым запросом. У него есть предел размера, вы платите за входные токены всего, что в нём находится, на каждом ходу, и оно исчезает с концом сеанса. В нём также нельзя искать. Если агенту нужен один факт трёхнедельной давности, вставлять всю историю - не ответ.
Память - это слой, который решает, что попадёт в окно следующим. Он хранит последние реплики и находит немногие старые факты, которые важны. Он держит состояние текущей задачи и записывает, что сделал агент. Исследователи описывают агентов похожим образом. Фреймворк CoALA авторов Sumers, Yao, Narasimhan и Griffiths отделяет рабочую память от долговременной эпизодической, семантической и процедурной.
Четыре вида памяти ИИ-агента
Четыре хранилища HotKV охватывают почти то же поле, приспособленное к тому, что приходится строить приложению. Процедурная память, то есть знания о том, как делать, заключённые в коде и промптах агента, обычно живёт в вашем репозитории или реестре промптов и отдельным хранилищем не является.
Диалоговая память
Это краткосрочная запись одного сеанса. Сообщения несут роль (system, user, assistant или tool). Они лежат в ограниченном скользящем окне, поэтому самые старые реплики выпадают, когда лимит достигнут. Она отвечает на один вопрос: что говорилось недавно? В HotKV это AMEM.CONV.CREATE, AMEM.CONV.APPEND и AMEM.CONV.WINDOW.
Семантическая память
Семантическая память - это долговременные знания, хранимые как факты с вектором эмбеддинга. Агент вспоминает их по смыслу, а не по ключу. Её основа - векторный индекс HNSW, тот же, что обеспечивает векторный поиск. AMEM.SEM.STORE сохраняет факт, а AMEM.SEM.RECALL возвращает лучшие совпадения с оценкой сходства. Здесь место документам, предпочтениям пользователей и усвоенным поправкам.
Рабочая память
Рабочая память - это черновик для задачи в процессе: плоский набор ключей и значений в рамках сеанса. Она хранит текущий шаг, обрабатываемое обращение или промежуточный результат. Она должна исчезать, когда задача заканчивается. AMEM.WORK.SET принимает время жизни именно по этой причине.
Эпизодическая память
Эпизодическая память - это журнал событий с отметками времени, в который только добавляют: совершённое действие, сделанное наблюдение или принятое решение. Она позволяет агенту или проверяющему человеку спросить, что произошло и когда. AMEM.EPIS.LOG записывает событие, а AMEM.EPIS.QUERY читает их обратно по типу и диапазону времени.
Память ИИ-агента на практике
На практике важны две вещи: как вы записываете в память и что читаете обратно на каждом ходу.
Сохранение памяти командами
Вот агент поддержки, ведущий один разговор. Вымышленный текст правил и векторы из трёх чисел служат только для иллюстрации. Настоящая модель эмбеддингов создаёт векторы из 768 или 1 536 чисел, и вы создаёте пространство имён с этой размерностью.
AMEM.CONV.CREATE session-42 WINDOW 50 TTL 86400
AMEM.CONV.APPEND session-42 user "My invoice shows the wrong VAT number."
AMEM.WORK.SET session-42 ticket "INV-1932" TTL 3600
AMEM.EPIS.LOG agent-support action "Looked up invoice INV-1932"
AMEM.SEM.CREATE support-kb 3
AMEM.SEM.STORE support-kb vat-policy "VAT details can be corrected within 30 days." 0.1 0.2 0.3
AMEM.SEM.RECALL support-kb 3 0.1 0.2 0.3
AMEM.CONV.WINDOW session-42 10
На каждом ходу агент читает последнее окно и вспоминает немногие факты, подходящие к вопросу. Он проверяет рабочую заметку и собирает промпт из этих частей. Совершив действие, он записывает событие. Ничто в этом цикле не требует всей истории.
Чтение памяти на каждом ходу
Сохранять память - лёгкая половина. Мастерство в том, чтобы решить, что читать обратно, потому что всё прочитанное попадает в промпт и стоит входных токенов. Разумный цикл читает несколько вещей в фиксированном порядке. Сначала последние реплики, затем немногие факты, подходящие к вопросу, затем состояние задачи. Вот он с официальным клиентом Python, с вашей собственной функцией эмбеддинга и шаблоном промпта.
import hotkv
r = hotkv.from_url("hotkv://localhost:6379")
MIN_SIMILARITY = 0.8 # настройте на своих данных
def start_session(session: str) -> None:
r.amem_conv_create(session, window=50, ttl=86400) # создать один раз, до первого добавления
def build_context(session: str, question: str) -> str:
r.amem_conv_append(session, "user", question)
turns = r.amem_conv_window(session, 10)
facts = r.amem_sem_recall("support-kb", 3, embed(question))
facts = [f for f in facts if f["similarity"] >= MIN_SIMILARITY]
ticket = r.amem_work_get(session, "ticket")
return render(turns, facts, ticket) # ваш шаблон промпта
def finish_turn(session: str, agent: str, reply: str) -> None:
r.amem_conv_append(session, "assistant", reply)
r.amem_epis_log(agent, "action", "Answered a billing question")
r.amem_work_set(session, "last_step", "answered")
Порог сходства вы настраиваете сами. Значение, подходящее одной модели эмбеддингов и одному набору фактов, будет неверным для другого, поэтому проверяйте полноту на вопросах, ответы на которые вы знаете. Отбрасывать слабые совпадения важнее, чем кажется, потому что плохой факт в промпте хуже, чем отсутствие факта.
Стабильные части этого промпта, например системные инструкции, - это как раз то, что кеширование промптов у провайдера делает дешевле. Помещайте читаемую память в конец, после стабильного текста, чтобы её изменение не сбрасывало этот кеш.
Сводки вместо всё более длинных окон
Окно полностью отбрасывает старые реплики. Для болтовни это нормально, а для долгой задачи плохо, где реплика 3 может быть важна и на реплике 300. Обычный ответ - скользящая сводка. После каждого отрезка диалога агент или более дешёвая модель записывает выученное, а сводка заменяет в промпте старые реплики.
HotKV хранит по одной сводке на агента с помощью AMEM.SUMMARY.SET, AMEM.SUMMARY.APPEND и AMEM.SUMMARY.GET. SET заменяет текст, а APPEND добавляет строку. Каждое обновление увеличивает номер версии, поэтому другой компонент может дёшево узнать, что сводка изменилась и когда.
Сводка теряет информацию, а сводка сводки теряет каждый раз всё больше. Точные значения, такие как идентификаторы, суммы и даты, держите вне прозы, в рабочей памяти или семантических фактах, где они сохраняются. Сводку используйте для общей картины работы: предпочтений, принятых решений и того, что осталось.
Правила проектирования и хранение
Память неограниченно растёт, если её не остановить, поэтому задайте лимиты до первой записи.
Правила, сохраняющие память полезной
- Ограничивайте всё. Задавайте
WINDOWдля диалогов иTTLдля сеансов и рабочих значений. Для диалогов, рабочих значений и фактов HotKV записывает время истечения для файла только для добавления и реплик, поэтому истёкшая запись не возвращается, когда файл воспроизводится после перезапуска. - Храните факты, а не стенограммы. Делайте сводку, прежде чем писать в семантическую память. Факт вспомнить легче, чем страницу диалога.
- Разделяйте агентов. Используйте отдельный идентификатор или пространство имён на каждого агента и арендатора, чтобы память одного клиента никогда не вспоминалась для другого.
- Вспоминайте немногое. Берите три-пять лучших совпадений и отбрасывайте слабые по оценке сходства, прежде чем они попадут в промпт.
- Не храните секреты. Память читается обратно в промпты, поэтому никогда не сохраняйте пароли, ключи и данные, которые вы не показали бы модели.
Как долго хранить каждый вид
Эти сроки - наши рекомендации, а не значения по умолчанию. Выбирайте свои исходя из того, как быстро меняются исходные факты и что вам разрешено хранить.
| Вид памяти | Рекомендуемый срок | Управление в HotKV |
|---|---|---|
| Диалоговая | Сеанс или фиксированный период, например сутки | WINDOW и TTL в AMEM.CONV.CREATE |
| Рабочая | Задача, затем очистка | TTL в AMEM.WORK.SET и AMEM.WORK.CLEAR |
| Семантическая | Пока факт остаётся истинным | TTL в AMEM.SEM.STORE и AMEM.SEM.FORGET |
| Эпизодическая | Столько, сколько требуют ваши потребности аудита или поддержки | AMEM.EPIS.QUERY по диапазону времени и AMEM.EPIS.CLEAR (у событий нет времени жизни) |
Хранение - это ещё и вопрос конфиденциальности. Если память содержит что-либо о человеке, выбранный вами срок является частью того, что вы ему обещаете, поэтому запишите его.
Как ломается память агента
Большинство ошибок памяти медленные. Агент неделю работает хорошо, а потом начинает ухудшаться. Вот сбои, от которых нужно проектировать защиту.
Типичные сбои
- Устаревшие факты. Факт, верный в марте, вспоминается в октябре. Задавайте фактам время жизни или храните их под ключом на каждую сущность, чтобы новое значение перезаписывало старое.
- Противоречия. Два сохранённых факта не согласуются, и агент выбирает один наугад. Предпочитайте один факт на ключ добавлению новых заметок рядом со старыми.
- Избыточное извлечение. Слишком много совпадений заполняют промпт слабо связанным текстом. Вспоминайте немного и отбрасывайте слабые совпадения.
- Утечки между пользователями. Память одного клиента вспоминается для другого. Используйте раздельные идентификаторы или пространства имён для каждого арендатора и проверяйте их в коде перед каждым чтением.
- Неограниченный рост. Ничто не истекает, поэтому поиск замедляется, а затраты ползут вверх. У каждого вида должен быть срок жизни. Там, где в HotKV нет времени жизни, как у эпизодического журнала, запланируйте очистку или экспорт самостоятельно.
- Дрейф сводки. Сводка сводки постепенно перестаёт соответствовать произошедшему. Держите журнал событий как источник истины и пересоздавайте сводки из него.
Считайте сохранённый текст недоверенным
Последний пункт заслуживает большего внимания. Всё, что агент записывает в память, позже может быть прочитано в промпт. Это включает текст, пришедший с веб-страницы, из письма или от пользователя. Это непрямая форма внедрения в промпт, которую OWASP относит к LLM01. Сохраняйте источник вместе с каждым фактом. Меньше доверяйте памяти, записанной из внешнего содержимого, и никогда не позволяйте вспомненной заметке перекрыть ваш системный промпт.
Что мы измеряли и что нет
Опубликованные бенчмарки HotKV охватывают пропускную способность команд, векторный поиск и экономию токенов при кешировании ответов. У памяти агентов собственного бенчмарка пока нет. Мы не делаем заявлений о её задержке или о том, насколько она улучшает качество агента. Можно сказать лишь об архитектуре. Четыре хранилища работают в том же процессе, что и кеш и векторный индекс. Поиск в памяти - это один вызов системы, которую вы уже эксплуатируете.
Бенчмарк экономии токенов и сравнение кеширования промптов и семантического кеширования показывают измеренную сторону. Сценарий использования памяти агентов показывает команды в полном сценарии.
Использование памяти агентов из Claude Code или Cursor
Ассистент с поддержкой Model Context Protocol может использовать часть этой памяти без собственного кода. Сервер hotkv-mcp с открытым исходным кодом предоставляет диалоговую память, рабочие заметки, журнал событий и скользящую сводку как инструменты. У него есть режим «только чтение» и пространство имён, ограничивающее агента. Он не предоставляет семантическую память, а его инструменты не могут задать окно или время жизни, поэтому для этого используйте клиентскую библиотеку. Следующая статья, сервер MCP для памяти агентов, показывает, как его подключить и что охватывают его меры защиты.
Часто задаваемые вопросы
Что такое память ИИ-агента?
Память ИИ-агента - это слой хранения и извлечения, позволяющий агенту сохранять информацию между шагами и сеансами. Обычно он сочетает недавнее окно диалога, долговременные факты, находимые по смыслу, черновик для текущей задачи и журнал событий.
В чём разница между краткосрочной и долговременной памятью агента?
Краткосрочная память хранит то, что происходит сейчас, например последние реплики и состояние задачи, и она ограничена и временна. Долговременная память хранит знания, которые должны пережить сеанс, например факты, предпочтения и прошлые события, и в ней ищут по мере необходимости.
Что такое скользящая сводка в памяти агента?
Скользящая сводка - это короткое текущее описание того, что агент узнал или решил к данному моменту, обновляемое по мере работы. Она заменяет в промпте старые реплики, чтобы промпт не рос бесконечно. HotKV хранит по одной на агента и увеличивает номер версии при каждом обновлении.
Нужна ли векторная база данных для памяти агента?
Только для семантической памяти, где факты находятся по смыслу. Окнам диалога, рабочему состоянию и журналам событий векторы не нужны. HotKV держит все четыре в одном движке, поэтому векторный индекс и другие хранилища не являются отдельными системами.
Как долго хранить память агента?
Это зависит от вида. Рабочая память должна истекать по окончании задачи, диалоги - после сеанса или заданного периода, а эпизодические журналы - столько, сколько требуют ваши потребности аудита. Факты в семантической памяти нужно пересматривать и удалять, когда они перестают быть верными.
Можно ли атаковать память агента?
Да. Текст, записанный в память, позже читается в промпты, поэтому отравленная заметка может управлять агентом. Записывайте, откуда взят каждый факт, меньше доверяйте внешнему содержимому и ставьте вспомненную память ниже системного промпта по авторитету.
Хранит ли HotKV память агента в ОЗУ?
HotKV - это движок в памяти, поэтому чтения обслуживаются из памяти. Записи в четыре хранилища фиксируются для файла только для добавления и для реплик, с передачей времени истечения, согласно документации продукта.



Продолжите разговор
Комментарии
Есть вопросы о методике? Получили другой результат на своём оборудовании? Поделитесь находками. Комментарии проверяются перед публикацией.