[Шубхам Сабу](https://x.com/Saboo_Shubham_) (PM Google) [открыл исходный код Always-On Memory Agent](https://github.com/GoogleCloudPlatform/generative-ai/tree/main/gemini/agents/always-on-memory-agent) на прошлой неделе в рамках репозитория GCP generative-ai. [VentureBeat рассказал об этом](https://venturebeat.com/orchestration/google-pm-open-sources-always-on-memory-agent-ditching-vector-databases-for) как сигнал о том, в каком направлении движется агентская инфраструктура. Это система постоянной памяти, которая работает круглосуточно в фоновом режиме, поглощая файлы, консолидируя их по таймеру и отвечая на запросы. Нет векторной базы данных. Никаких вложений. Просто LLM, который читает, думает и записывает структурированную память в SQLite.

Проект подтверждает то, к чему я стремился с помощью [Neotoma](https://github.com/markmhendrickson/neotoma): постоянная память для агентов — это реальная и растущая потребность. Но эти два проекта делают противоположный архитектурный выбор. В этом посте они сравниваются.

## Что такое агент постоянной памяти

Проект представляет собой эталонную реализацию, созданную с помощью [Google ADK (Agent Development Kit)](https://google.github.io/adk-docs/) и [Gemini 3.1 Flash-Lite](https://ai.google.dev/gemini-api/docs/models). Он выполняется как облегченный фоновый процесс с тремя специализированными субагентами: один для приема, один для консолидации и один для запроса.

1. **Прием.** Средство наблюдения за файлами отслеживает каталог входящих сообщений. Загрузите файл, и агент подберет его. Он также принимает входные данные через HTTP POST. Он обрабатывает текст, изображения, аудио, видео и PDF. LLM извлекает резюме, сущности, темы и оценки важности.

2. **Консолидация.** По таймеру агент консолидации считывает все сохраненные воспоминания, находит в них связи и закономерности, сжимает связанные элементы и записывает новые синтезированные данные. Это работает в фоновом режиме без запроса.

3. **Запрос.** Вы задаете вопрос. Агент запросов считывает соответствующие воспоминания и консолидированные идеи, синтезирует ответ и возвращает его со ссылками на определенные записи памяти.

Хранилище — SQLite. Нет векторной базы данных, нет индекса внедрения. Архитектура делает ставку на то, что LLM может обрабатывать поиск непосредственно по структурированным текстовым записям без необходимости поиска по сходству.

## Где он превосходен

**Простота.** Клонируйте репозиторий, установите ключ Gemini API и запустите его. Средство наблюдения за файлами, HTTP API и панель управления Streamlit. Минимальные зависимости и отсутствие инфраструктуры для управления, выходящей за рамки одного процесса. Для разработчиков, изучающих память агента с помощью Gemini, это самый быстрый путь к работающей демо-версии.

**Рассказ «без векторной базы данных».** Удаление векторной базы данных снижает операционную и концептуальную сложность. Не нужно выбирать модели встраивания, не нужно поддерживать индекс, не нужно настраивать поиск. Для небольших развертываний это настоящее упрощение.

**Активная консолидация.** Консолидация по таймеру является наиболее отличительной частью. Большинство систем памяти пассивны: хранят и извлекают информацию. Этот активно соединяет, сжимает и синтезирует. Он находит закономерности, о которых вы не спрашивали. Это находит отклик у всех, кому нужна «память, которая думает», а не память, которая ждет.

## Там, где подходы расходятся

Агент Always-On Memory и Neotoma имеют общую цель (постоянная память агента), но расходятся практически в каждом проектном решении. Расхождения не случайны. Они отражают разные исходные предпосылки относительно того, для чего следует оптимизировать память.

### Автоматический и явный прием

Средство просмотра файлов является автоматическим. Все, что попадает в почтовый ящик, обрабатывается. Перед извлечением и сохранением LLM не требуется ни этапа утверждения, ни проверки схемы, ни подтверждения пользователя. Neotoma использует противоположный подход: ничто не попадает в систему, если агент или пользователь явно не запишет это через MCP. Для личных заметок удобен автоматический прием. Для всего, что требует соблюдения конфиденциальности или соответствия требованиям, более безопасным является явный контроль.

### Кто решает, что помнить

Neotoma полагается на клиентский агент для вызова хранилища памяти. Агент, с которым вы разговариваете (ChatGPT, Claude, Cursor), решает, что стоит запомнить и как это структурировать. Когда он приходит к выводу, что факт, контакт или задача должны сохраниться, он вызывает операцию сохранения через MCP. Ответственность за то, «что помнить», остается на уровне агента, в том же процессе, что и ваш разговор.

Агент Always-On Memory распределяет эту ответственность между специализированными субагентами. Агент приема решает, что извлечь из файлов. Агент консолидации решает, что объединить и какие связи провести. Агент запросов решает, что возвращать. «Что стоит запомнить» и «как» распределяются между этими субагентами, которые работают независимо от разговора. Пользователь не утверждает каждое решение. Субагенты делают их в фоновом режиме.

### LLM-ориентированное и детерминированное извлечение

Агент Always-On Memory использует LLM для всего: извлечения объектов, присвоения важности, создания сводок. Запустите одно и то же извлечение одного и того же файла дважды, и результаты могут отличаться. Neotoma использует [детерминированное извлечение на основе схемы](/posts/truth-layer-agent-memory). Один и тот же ввод создает одни и те же сущности, те же канонические идентификаторы, те же отношения. Дополнительная интерпретация LLM выполняется поверх этого детерминированного слоя, а не вместо него.

### Консолидация против непреложной истины

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

### Одноплатформенность и кроссплатформенность

Проект построен на Gemini и Google ADK. Память находится в локальном файле SQLite, доступном только через этот конкретный стек агента. Neotoma предоставляет память через MCP, что означает, что одни и те же объекты доступны из ChatGPT, Claude, Cursor и любого другого MCP-совместимого инструмента. Один слой памяти, несколько потребителей.

### Отсутствие происхождения и полное происхождение

Записи памяти в агенте памяти Always-On содержат сводные данные и извлеченные объекты, но не относятся к конкретному файлу, строке или сеансу, который их создал. Если консолидированная информация неверна, не существует контрольного журнала, который можно было бы отслеживать. В Neotoma каждое поле каждого объекта соответствует исходному наблюдению. Вы можете одитировать любой факт и вернуть его туда, откуда он пришел.

### Масштабируйте компромиссы

Без вложений или векторного индекса система считывает записи структурированного текста напрямую с помощью LLM. Это работает в небольших масштабах. По мере роста объемов памяти этот подход может оказаться неэффективным. Удаление векторной базы данных не удаляет структуру поиска. Это перемещает сложность в контекстное окно LLM. Neotoma использует структурированные запросы к типизированным объектам, которые масштабируются независимо от ограничений контекста LLM.

## Субстрат против агента

Самое четкое различие – это роль. Агент Always-On Memory является агентом. Он принимает данные автоматически, объединяет их по расписанию и синтезирует ответы. У него есть своя цепочка рассуждений. Он решает, что объединить, какие связи провести и когда сжать.

Неотома не агент. Это субстрат. Он хранит типизированные сущности с каноническими идентификаторами. Он сохраняет происхождение. Он отвечает на детерминированные запросы. Само по себе оно ничего не решает. Никакого фонового приема. Никакой автоматической консолидации. Нет обработки по таймеру. Агенты читают и пишут в него через [MCP](/posts/agentic-search-and-the-truth-layer). Рассуждения происходят на уровне агента. Истина живет в субстрате.

Это важно, потому что происходит, когда агент ошибается. Если консолидация агента Always-On Memory дает неверную информацию, эта информация теперь является частью памяти. Не существует отдельного уровня для проверки. Агент – это правда.

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

| Размерность | Агент постоянной памяти | Слой истины (Неотома) |
|-----------|------------------------|------------------------|
| Роль | Агент с циклом рассуждений | Субстрат без агентного поведения |
| Кто решает, что хранить | Специализированные субагенты (прием, консолидация) | Клиентский агент (через MCP) |
| Проглатывание | Автоматически (наблюдатель файлов, API) | Только явный (MCP, CLI, загрузка) |
| Добыча | LLM-управляемый; вероятностный | Схема-первая; детерминированный |
| Консолидация | Консолидация LLM по таймеру | Никто; непреложная истина, обновления по событиям |
| Провенанс | Базовый (источник/сводка в записях) | Полная родословная; каждое поле отслеживается до источника |
| Платформа | Только для Gemini/Google ADK | Кроссплатформенность через MCP (ChatGPT, Claude, Cursor) |
| Конфиденциальность | Не позиционируется как приоритет конфиденциальности | Управляется пользователем; нет доступа провайдера |
| Откат | Нет; память мутирует в результате консолидации | Да; только добавление, версионирование, обратимый |
| Масштабная модель | LLM читает все записи; ограничено контекстом | Структурированные запросы к типизированным объектам |

## Как они могли работать вместе

Эти два подхода не являются взаимоисключающими. Агент консолидации и уровень истины решают разные проблемы. Человек находит закономерности. Другой сохраняет доверие. Интересная архитектура сочетает в себе и то, и другое.

Эскиз простой. Агент консолидации (например, агент Always-On Memory Agent) считывает объекты из уровня истинности через MCP. Он имеет доступ ко всему структурированному состоянию: типизированным объектам, отношениям, срокам, происхождению. Он запускает цикл поиска закономерностей в этом состоянии в поисках связей, пробелов или идей, о которых пользователь не просил. Когда он что-то находит, он записывает результат обратно на слой истины в виде нового наблюдения, помеченного исходными объектами и рассуждениями.

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

Это отличается от того, как сегодня работает консолидация в агенте Always-On Memory. Там агент консолидации напрямую изменяет память. Старые воспоминания впитываются в новые синтезированные записи. Предыдущее состояние ушло. Если синтез был неверным, то нет отдельного слоя для сравнения.

Под слоем истины консолидация становится неразрушающей операцией. Агент добавляет уровень интерпретации поверх детерминированного состояния. Само государство остается неизменным. Вы получаете преимущества активного обнаружения шаблонов (сила агента Always-On Memory) с преимуществами проверяемости и отката (сила уровня истины). Разум вверху, доверие внизу.

## Что это подтверждает

Агент Always-On Memory — это эталонная реализация, а не продукт. Это подтверждает, что потребность в постоянной динамической памяти агента реальна. «[Векторная БД плюс RAG](/posts/why-agent-memory-needs-more-than-rag)» — не единственная модель поиска. [Структурные тенденции, приводящие к этому](/posts/six-agentic-trends-betting-on) очевидны: агенты становятся отслеживающими состояние, ошибки получают цену, а платформы остаются непрозрачными. Этот проект сигнализирует о том, что отрасль движется к постоянно активным системам памяти, которые выходят за рамки простого хранения и извлечения информации.

В чем оба проекта сходятся: пассивной памяти недостаточно. В чем они не согласны: должен ли рассуждать сам уровень памяти, или же рассуждения должны происходить на отдельном слое поверх детерминированного состояния. Сейчас это ключевой вопрос в архитектуре памяти агентов. Рынок, скорее всего, поддержит оба подхода. Я ожидаю, что архитектура может объединиться с агентами консолидации, которые думают, работая поверх слоев истины, которым вы можете доверять.

## Что я строю

Я создаю [Neotoma](https://github.com/markmhendrickson/neotoma) в качестве уровня доверия. Типизированные сущности, канонические идентификаторы, детерминированное слияние, происхождение, кроссплатформенный доступ через MCP. Я использую его ежедневно в ChatGPT, Claude и Cursor. [Релиз для разработчиков](/posts/neotoma-developer-release) теперь доступен на [neotoma.io](https://neotoma.io).

Пример Google показывает, что отрасль переходит на постоянную память агентов. Открытый вопрос не в том, будут ли агенты помнить, а в том, как. Возможности или управление. Агент или субстрат. Вероятностная консолидация или детерминированная истина. Я делаю ставку на последнее.