Системы памяти в AI-ассистентах

Рабочая, структурированная и память извлечения для ассистентов.

Содержимое страницы

Память превращает ассистентов из реактивных в персистентные системы, но именно здесь многие системы тихо деградируют. Исследования показывают, что разделение на кратковременную и долгосрочную память больше не достаточно для современной памяти агентов; OpenAI и SDK LangGraph указывают на более простую архитектуру — рабочую память, персистентное состояние и извлечение данных.

Ассистентам необходима рабочая память для текущего сеанса, персистентное состояние для стабильных фактов и предпочтений, а также память извлечения для релевантного контекста. Моя немного субъективная точка зрения заключается в том, что структурированное состояние недооценивается, векторное извлечение переоценивается, и большинство сбоев памяти связаны не с выбором хранилища, а с политикой продвижения и инъекции данных.

Другим важным моментом является то, что память автоматически не решает проблему длинного контекста. Исследование LoCoMo показывает, что долгосрочное запоминание в диалогах остается сложной задачей, а феномен «Потеряно в середине» демонстрирует, что простое увеличение количества токенов, подаваемых модели, может ухудшить производительность, когда релевантная информация оказывается в середине промпта. Хорошие системы памяти должны быть селективными, многоуровневыми и четко определять приоритеты.

Это руководство находится в хабе памяти систем ИИ и служит кросс-фреймворковой картой слоя памяти внутри Архитектуры ассистентов на базе ИИ.

Абстрактная система памяти ИИ-ассистента в виде многослойных блокнотов, векторных точек и структурированных карточек

Как мыслить о памяти ассистента

Память ассистента — это не та же проблема, что PKM (Personal Knowledge Management), вики или изолированные конвейеры RAG — PKM против RAG против Вики против Систем памяти сопоставляет эти парадигмы на уровне архитектуры знаний. Это руководство остается на один уровень ниже, в контрактах времени выполнения, которые фактически реализуют ассистенты.

Наиболее чистый способ мыслить о памяти — не как о «истории чата», а как о наборе контрактов хранения с разными задачами. Одно хранилище сохраняет активную ветку диалога. Другое хранилище содержит персистентное состояние пользователя. Третье поддерживает семантический поиск по документам или прошлым взаимодействиям. Руководство OpenAI по персонализации памяти явно разделяет глобальную и сеансовую память, в то время как LangGraph разделяет персистентность уровня потока (thread) от долгосрочных хранилищ между разговорами.

Память важна, потому что ассистенты в продакшене повторяют работу, возвращаются к целям и работают в течение дней или недель. Generative Agents популяризировали паттерн хранения опыта, рефлексии над ним и динамического извлечения для будущего планирования. MemGPT продвинул эту идею дальше, моделируя память как уровни и движение между быстрыми и медленными хранилищами. Более новые системы, такие как A-MEM и Mem0, фокусируются на связывании, консолидации и эффективности развертывания, а не просто на объеме извлечения.

Типы памяти

Ассистенты в продакшене обычно нуждаются в трех cooperating слоях. FAQ выше называет их; разделы ниже объясняют, как каждый из них ведет себя в реальных системах.

Кратковременная память

Кратковременная память — это рабочий контекст текущего разговора или запуска. OpenAI Sessions автоматически добавляет историю разговора перед каждым запуском и добавляет новые элементы после каждого запуска. LangGraph реализует ту же идею как персистентность уровня потока через чекпоинтер (checkpointer). Этот слой сохраняет локальную связность, но он же первым «взрывается», когда накапливаются результаты инструментов, чтение файлов или длинные чаты.

Долгосрочная память извлечения

Долгосрочная память извлечения хранит элементы, которые ищутся при их релевантности, а не воспроизводятся каждый ход. Это пересекается с RAG как техники извлечения, но это не вся история памяти ассистента — вики и корпуса PKM часто питают индекс, в то время как структурированное состояние и сеансовая память живут в другом месте, как ясно показывает сравнение PKM/RAG/вики/памяти выше. В классическом RAG модель комбинирует параметрическую память с непараметрической памятью, такой как плотный векторный индекс. Self-RAG улучшает наивное извлечение, делая извлечение по требованию, а не фиксированным для каждого запроса. В практических системах ассистентов это обычно векторное хранилище или слой поиска по транскриптам.

Структурированная память

Структурированная память хранит персистентные факты, предпочтения или ограничения в явных полях с правилами приоритета. Руководство OpenAI по персонализации необычайно ясно в этом вопросе. Глобальная и сеансовая память имеют разные роли, последнее указание пользователя имеет приоритет, сеансовая память может переопределять глобальную память для текущей задачи, а память, противоречащая текущему намерению пользователя, должна вызывать уточнение, а не тихое подчинение. Вот почему структурированное состояние часто лучше извлечения для стабильных предпочтений, политик или постоянных ограничений.

Механика извлечения

Типичный поток извлечения состоит из пяти шагов: захват, кодирование, поиск, пере-ранжирование или фильтрация, затем инъекция. Pinecone, Weaviate, Qdrant, Redis и Milvus документируют варианты этого паттерна. Некоторые поддерживают только плотные векторы, другие поддерживают гибридное извлечение, объединяющее семантический и лексический поиск, а некоторые предоставляют метаданные фильтры или пространства имен для контроля многопользовательности и области видимости. Инженерный аспект прост. Качество извлечения зависит от фильтрации, чанкинга и стратегии ранжирования не меньше, чем от самой модели эмбеддингов.

Гибридное извлечение обычно является разумным значением по умолчанию, когда запросы смешивают смысл и точные термины. Weaviate документирует гибридный поиск с параметром alpha, балансирующим векторные и ключевые компоненты, Qdrant поддерживает гибридные и многоэтапные запросы через свой Query API и методы слияния оценок (score-fusion), а Milvus описывает плотное, разреженное и гибридное извлечение в одной системе. Это важно для ассистентов, потому что пользователи часто запрашивают как приблизительный смысл, так и точные идентификаторы, имена файлов, номера ревизий или коды продуктов. Когда лексическая часть живет в Postgres или Elasticsearch, а не внутри векторной базы данных, Поиск полнотекстовый в PostgreSQL против Elasticsearch помогает выбрать, где должен выполняться поиск по ключевым словам в продакшене.

Еще одна субъективная точка: извлечение не должно решать политические вопросы. Оно должно предоставлять кандидаты. Ассистенту все еще нужны структурированные правила для приоритета, конфиденциальности, свежести и разрешения конфликтов. Пример памяти на основе состояния от OpenAI делает это явным, и это гораздо более здоровый паттерн, чем притворство, что одного поиска по сходству достаточно для разрешения противоречивого состояния пользователя.

Общие проблемы

Самый частый сбой — устаревшая или противоречивая память. Руководство OpenAI по долгосрочной памяти называет консолидацию памяти самым чувствительным и подверженным ошибкам этапом, перечисляя отравление контекста, потерю памяти, дублирование воспоминаний и обработку противоречий как основные проблемы. Это верно, и именно здесь многие ассистенты тихо терпят неудачу. Они запоминают слишком много, слишком рано и без правила забывания.

Вторая ошибка — перегрузка контекста. LangGraph предупреждает, что длинные разговоры могут превысить окно контекста LLM, и рекомендует обрезку, удаление, суммирование или управление чекпоинтами. OpenClaw аналогично обрезает старые результаты инструментов из контекста в памяти, сохраняя полную транскрипцию на диске. Это не опциональные оптимизации. Они необходимы, если ваш ассистент читает, ищет или выполняет что-либо нетривиальное.

Третья ошибка — предположение, что длинный контекст равен надежному запоминанию. LoCoMo показывает, что долгосрочная память диалога все еще затруднительна, а «Потеряно в середине» показывает чувствительность к позиции внутри длинных промптов. Если память важна, не полагайтесь на грубую силу заполнения промпта. Используйте компрессию, извлечение и явное состояние.

Компромиссы

Слой векторной базы данных — это место, где многие команды ассистентов делают ранние ставки на платформу. Сравнение ниже фокусируется на задокументированных характеристиках продуктов, которые важны для проектирования памяти ассистента.

Система Что выделяется Оптимально для
Pinecone Управляемая векторная база данных с интегрированным эмбеддингом, пере-ранжированием, фильтрами метаданных, пространствами имен и поддержкой плотных, разреженных и полнотекстовых BM25-стиля в одной схеме Командам, которые хотят управляемое извлечение с минимальной инфраструктурой
Weaviate Векторная база данных с открытым исходным кодом, хранящая объекты и векторы, с семантическим и гибридным поиском и сильной позицией в RAG Командам, которые хотят гибкость открытого исходного кода с гибридным извлечением
Qdrant Векторный поиск для ИИ с фильтрацией, гибридными и многоэтапными запросами, а также встроенным офлайн-способным режимом Edge Командам, которые хотят контроль над поиском, развертывание на границе сети или сильную фильтрацию
pgvector Векторный поиск по сходству внутри Postgres, с точным и приближенным поиском, а также функциями ACID, JOIN и восстановления Командам, которые уже стандартизировали Postgres и реляционные данные
Milvus Облачно-нативная векторная база данных с разделенным хранением и вычислениями, а также плотным, разреженным и гибридным извлечением Крупномасштабным нагрузкам извлечения и распределенным развертываниям

Как только вы выберете бэкенд, его эксплуатация становится проблемой инфраструктуры данных — Postgres с pgvector для метаданных сеанса и векторов в одном стеке, или Neo4j когда память извлечения имеет форму графа, а не плоских чанков.

Ниже приведенная модель задержки и стоимости — это синтез дизайна на основе операционных моделей, описанных в OpenAI Sessions и руководствах по компрессии, управлении памятью LangGraph, памяти на основе состояния OpenAI и задокументированном поведении извлечения Redis и векторных хранилищ. Она намеренно качественна, потому что реальные цифры зависят от размера корпуса, модели эмбеддингов, сетевой топологии и кэширования.

Тактика памяти Задержка чтения Задержка записи Давление стоимости токенов Стоимость инфраструктуры Когда это имеет смысл
Сырая история сеанса Низкая Низкая Наивысшая Низкая Простой многотурный чат и короткие запуски
Память суммирования или компрессии Низкая до средней Средняя, потому что само суммирование — это шаг модели Средняя до низкой Низкая до средней Долгие рабочие процессы, где активный запуск должен продолжаться
Структурированный профиль и состояние Низкая Средняя Низкая Низкая Персистентные предпочтения, правила и постоянные ограничения
Векторное или гибридное извлечение Средняя Средняя Низкая до средней Средняя Крупные корпуса, поиск по истории, заземление документов
Полное воспроизведение всего Высокая и все более нестабильная Низкая Наивысшая Низкая инфраструктура, высокие расходы на модель Почти никогда, кроме крошечных корпусов и отладки

Примеры реализации

Текущий стек OpenAI дает два полезных референсных паттерна. Первый — Sessions для кратковременной непрерывности между запусками. Второй — долгосрочная память на основе состояния, где поля структурированного профиля и заметки глобальной памяти инжектируются в начале сеанса, заметки сеанса дистиллируются во время запуска, а шаг консолидации продвигает только персистентные элементы в глобальную память. Этот цикл «инъекция → рассуждение → дистилляция → консолидация» — один из самых ясных публичных паттернов памяти, доступных прямо сейчас.

LangGraph предоставляет похожее, но независимое от фреймворка разделение. Чекпоинтеры обрабатывают кратковременную память потока, а магазины (stores) обрабатывают долгосрочный поиск между разговорами. Магазин можно искать внутри нод во время выполнения, что делает его хорошим референсным дизайном для ассистентов, которым нужна явная оркестрация, а не скрытая магия фреймворка.

Hermes — полезный публичный пример многоуровневой памяти в дикой природе. Его встроенная память использует MEMORY.md, USER.md и поиск по сеансам SQLite FTS5, в то время как плагины внешних провайдеров добавляют графовую память, семантическое извлечение, автоматическое извлечение фактов и моделирование пользователя. Полная механика задокументирована в Системе памяти агента Hermes, а восемь подключаемых бэкендов сравниваются в Сравнение провайдеров памяти агентов.

OpenClaw предлагает другой подход, с обрезкой сеанса, опциональной активной памятью, которая запускается перед основным ответом, и опциональной системой Dreaming для фоновой консолидации памяти. Эти примеры заслуживают внимания, потому что они рассматривают память как операционную подсистему, а не просто трюк извлечения. Для того, как OpenClaw вписывается в более широкий пятиуровневый стек ассистента, см. Обзор системы OpenClaw.

Исследовательские прототипы указывают в том же направлении. MemGPT использует иерархические уровни памяти и поток управления для управления контекстом, A-MEM использует динамическое индексирование и связывание, вдохновленное Zettelkasten, а Mem0 сообщает о лучшей точности при гораздо более низкой задержке p95 и стоимости токенов по сравнению с базовыми моделями полного контекста на LoCoMo. Вам не нужно копировать эти системы целиком, но их общий урок ясен. Качество памяти приходит от отбора и организации, а не от хранения всего навсегда.

Когда память помогает и когда вредит

Память помогает, когда ассистент неоднократно сталкивается со стабильными предпочтениями, персистентными ограничениями, повторно используемыми уроками рабочих процессов или крупными внешними корпусами, которые не помещаются в промпт. Руководство OpenAI по надежным агентам хорошо делает это различие. Компрессия помогает текущему долгому запуску продолжаться, в то время как память помогает будущим запускам повторно использовать уроки рабочих процессов. Это правильная ментальная модель для большинства бизнес-ассистентов.

Память вредит, когда задача однократная, состояние пользователя часто меняется, индекс извлечения зашумлен или система не может разрешить конфликты. Пример памяти для путешествий от OpenAI предупреждает, что сеансовая память не должна автоматически становиться глобальной, и явно заявляет, что память — это не граница безопасности. Если ваш ассистент принимает каждую вспомненную строку как истину, вы построили машину путаницы, а не систему памяти.

Селективный цикл памяти

Самый простой и надежный цикл памяти — селективный и поэтапный. Загрузить персистентное состояние, извлечь поддерживающий контекст, ответить, захватить только кандидаты на память, затем консолидировать позже. И паттерн OpenAI на основе состояния, и недавние научные работы по памяти движутся в этом направлении.

Схема последовательности памяти агента

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

Вывод

Практический стек памяти для ассистентов — это не «просто используйте векторную БД». Это рабочая память для живого запуска, структурированное состояние для персистентной истины, память извлечения для поддерживающих доказательств и консервативная политика консолидации, которая забывает так же осознанно, как и запоминает. Недавние исследования и текущие руководства SDK указывают в этом направлении.

Для полного стека ассистента вокруг этого слоя начните с Архитектуры ассистентов на базе ИИ. Для ограниченной памяти Hermes и плагинов провайдеров следуйте Системе памяти агента Hermes и Сравнение провайдеров памяти агентов.

Подписаться

Получайте новые материалы про системы, инфраструктуру и AI engineering.