MemShelf: независимая память для ИИ-агентов, устойчивая к сжатию контекста
Решение проблемы потери контекста при работе с большими окнами внимания: проект MemShelf от Базис предлагает внедрение внешней памяти в виде Git-репозитория. Система фиксирует результаты сессий в отдельных эпизодах, позволяя агенту пересматривать историю без риска, что важные данные будут удалены алгоритмическим сжатием.
# Записать — не значит вспомнить: месяц внешней памяти для ИИ-агента
В работе с длинными сессиями ИИ-агентов возникает проблема, которую пользователи часто не замечают, пока не потеряют важный результат: данные из истории диалога могут быть автоматически удалены системой.
Проблема сжатия контекста
Большинство современных моделей имеют фиксированное окно контекста. Когда поток диалога превышает этот лимит (например, 500 000 токенов), система автоматически запускает процедуру сжатия. Алгоритм пытается определить, какие сообщения важны, а какие можно убрать.
Важно: Этот процесс принимает решения модель без участия человека и без удобного интерфейса для корректировки. Если модель решит, что какой-то фрагмент истории избыточен, он удаляется. Через час или день после начала работы агент может потерять доступ к ключевой информации, которую обсуждал сам.
Ограничить длину диалога нельзя, так как системные промпты и инструменты уже занимают значительную часть окна (в случае разработчика — около 38 600 токенов из 500 000). Увеличить лимит в некоторых инструментах технически невозможно.
Как работает MemShelf
Разработчики из компании «Базис» создали проект MemShelf — систему внешней памяти для агентов. В отличие от стандартной памяти, которая живет внутри чата, MemShelf хранит информацию в отдельном Git-репозитории.
Единицей хранения здесь является эпизод — документ в формате Markdown, описывающий конкретную сессию или событие. В каждом эпизде фиксируется: * Что было сделано; * К каким решениям пришли; * Какие альтернативы были отвергнуты и почему; * Где допущены ошибки; * Что осталось недосказать или недоделать.
Механика цикла
Процесс работы системы выглядит следующим образом: 1. Завершение сессии: Агент (или пользователь) фиксирует, что тема закрыта. 2. Сбор данных: Агент автоматически формирует эпизод в формате Markdown. 3. Проверка: Инструмент проверяет текст на соответствие правилам (например, лимит слова в дайджесте) и удаляет конфиденциальные данные по заранее заданным шаблонам. 4. Фиксация: Пользователь подтверждает изменения, и файл записывается в репозиторий. 5. Обновление индекса: Бот автоматически перерисовывает оглавление (INDEX.md), которое лежит в контексте агента.
В новой сессии агент не пытается угадать, что важно для модели при сжатии. Вместо этого он читает актуальный индекс и запрашивает полные тексты только тех эпизодов, которые нужны для текущей задачи.
Авторский комментарий: Это похоже на ведение рабочего журнала, но гораздо более структурированного. Здесь не просто фиксируется, что задача выполнена, а записывается весь путь к решению, включая тупики и отклоненные варианты, которые в классических лог-файлах часто игнорируются.
Архитектура и безопасность
Сама «полка» — это стандартный Git-репозиторий. Это обеспечивает несколько ключевых преимуществ:
1. Независимость от модели: Копия данных хранится в нейтральном формате, понятном любой системе, не привязанной к конкретному вендору. Разработчики проверили совместимость с клиентами от разных производителей (Claude Code и Gemini CLI), которые корректно работали с одним и тем же репозиторием без дополнительных настроек. 2. Прозрачность и проверка: Между моментом сбора данных и их записью в репозиторий существует «зазор» для проверок. Через этот промежуток можно пропустить данные через фильтры (например, анонимизацию персон) или CI/CD-процессы. 3. Структура данных: Репозиторий делится на категории: закрытые темы, итоги сессий и эксперименты. В каждой категории используются единые стандарты оформления.
Роль бота-помощника
Для поддержания порядка в репозитории используется набор инструментов, среди которых особое место занимает memshelf_doctor. Этот инструмент не меняет файлы, но сканирует состояние системы и блокирует запуск новых сессий или записи данных, если обнаружены ошибки: * Дайджесты превысили лимит в 120 слов; * В тексте обнаружены секреты или ключи; * Индекс потерял синхронизацию с файлами эпизодов; * Статистика учета не обновлена.
Масштабирование и оптимизация
По мере накопления опыта система может столкнуться с новой проблемой: оглавление и дайджесты всех эпизодов занимают все больше места в контексте агента. К моменту накопления 150 эпизодов объем индекса мог достигать более 8000 токенов.
Для решения этой проблемы разработчики внедрили: * Роллапы (Rollups): Процесс объединения нескольких эпизодов в одно более общее резюме, если тема полностью закрыта или пересмотрена. * Разделение полки: Выделение общих решений по организации работы в одну «общую» полку, а проектную специфику — в отдельные автономные хранилища. * Линейный бюджет: Введение правила, согласно которому объем индекса растет линейно от количества эпизодов, но с жестким лимитом на стоимость одной записи.
Система также поддерживает функцию очистки. Пользователь может вручную удалить старые эпизоды, которые больше не актуальны, или использовать встроенные механизмы для удаления данных по истечении срока хранения.
Заключение
Проект MemShelf демонстрирует перспективный подход к управлению знаниями ИИ-агентов. Он решает фундаментальную проблему зависимости от внутренней памяти модели, предоставляя агенту внешний, стабильный и проверяемый источник информации. Внедрение такой системы позволяет превратить сессию работы не в одноразовый разговор, а в часть непрерывного процесса накопления опыта.
Проект открыт с исходным кодом и доступен для изучения и использования сообществом.