Память ИИ-агента: разбор Perplexity Brain и как это устроено у нас
Разбор публикации Perplexity Brain от 19 августа 2026: память как файловая система, вики из связанных Markdown-страниц, рёбра контекста и рёбра доказательств, фоновые агенты Dream и их числа — корректность 0.600 → 0.661, −15% токенов. Рядом — наш контур памяти: заметка ключуется темой, а не сессией, факт проходит проверку на выводимость из транскрипта, устаревшее не удаляется, а тускнеет по периоду полураспада. Плюс раздел, которого нет в оригинале: почему собственная память агента является каналом доставки инъекций.
Сам Решу
20 августа 2026 г. · 10 мин чтения
Содержание
Коротко. 19 августа 2026 инженеры Perplexity опубликовали разбор Brain — слоя памяти их агента Computer. Главная мысль там не про алгоритм, а про рамку: память надо отдавать агенту как среду, а не как базу данных. Файлы в песочнице, связанные Markdown-страницы поверх них, grep и cat вместо специального API, и фоновые агенты, которые переписывают эту вики офлайн. Числа они привели честные: корректность ответов 0.600 → 0.661 на внутреннем наборе, +9.3 пункта в проде — и при этом на 15% меньше токенов и на 10% дешевле. Мы шли к тому же независимо, и в трёх местах решили иначе: заметка ключуется темой, а не сессией; каждый факт проходит проверку на выводимость из транскрипта и при сомнении не пишется; ничего не удаляется — устаревшее тускнеет в ранжировании. Ниже — что именно они сделали, что у нас, и что мы у них заберём.
Задача: десятая сессия должна быть умнее первой
Формулировка из их поста точная, и она же наша: пользователь работает с агентом месяцами и сотнями сессий. К десятой сессии система обязана быть заметно полезнее, чем в первой — помнить, что за проект, кто в нём участвует, какие форматы человек предпочитает, чем закончился прошлый разбор. Если каждый разговор начинается с нуля, это не сотрудник, а поисковая строка с хорошими манерами.
Проблема при этом двойная. Агенту мало знать факт — ему нужно знать, что этот факт вообще существует и как до него дойти. И, дойдя, нужно понимать, актуален ли он и откуда взялся. Одинокий факт без источника и без соседей стоит мало: его нельзя перепроверить и нельзя обновить.
Два очевидных решения оба плохи. Свалить все файлы памяти в контекст — размен точности на полноту: контекст забивается всё менее релевантным, а урезание бьёт по качеству ответа. Положить всё во внешнюю базу — гибко, но навигация ложится на агента: векторное хранилище отдаёт разрозненные обрывки, граф требует уметь его запрашивать.
Что такое Brain
Brain — это вики поверх файловой памяти. Память Computer'а материализована в песочнице как обычная файловая система, под memory/ три верхних каталога:
sessions/— сырьё: индексы, саммари, полные транскрипты;notes/— дистиллированные снипеты по темам;knowledge/— собственно Brain: синтезированная вики.
Вики — связанные Markdown-страницы, одна страница = один субъект, и она обязана быть полезной при чтении в одиночку. Рёбер два типа, и разделение здесь — самое ценное в их дизайне:
[[wikilinks]]— рёбра контекста, вбок. Отвечают на вопрос «что ещё мне нужно знать»: проект ссылается на владельца, клиента, зависимости.[cite:N]— рёбра доказательств, вниз. Отвечают на вопрос «откуда я знаю, что это правда»: ведут в конкретную сессию или в источник коннектора.
Всё это под git — чтобы были версии, диффы и changelog, и чтобы несколько агентов могли править вики одновременно, не затирая друг друга.
Дальше три решения, каждое из которых стоит отдельно отметить.
Компактный индекс вики кладётся прямо в первое сообщение. Не «агент может его прочитать», а он уже там. Отдельный рандомизированный эксперимент дал −6.9% недовольства памятью от одного этого изменения. Дешёвая правка с измеримым эффектом.
Навигация — обычными инструментами. cat memory/knowledge/index.md, grep -Ril "kyoto" memory/knowledge/, переход по ссылке, сравнение ревизий в git. Никакого нового интерфейса между моделью и памятью: агент и так умеет работать с файлами.
Локальный рабочий набор вместо всего корпуса. Копировать всё дерево при старте песочницы дорого и бессмысленно; держать его на удалённой ФС — тоже, и вот почему: агент делает тысячи файловых операций за одну команду, и если каждая станет сетевым запросом, цикл исследования встанет. Их замер: grep по удалённому FUSE-пути оказался в 400–500 раз медленнее локального. Поэтому при старте подгружается карта из недавних сессий, а дальше субагент (Memory Agent) по описанию нужного семантически ищет и доматериализует файлы в то же дерево — рабочий набор растёт постепенно, пути остаются стабильными.
Dream: память переписывается офлайн
Самая интересная часть — не чтение, а поддержание. За него отвечают фоновые агенты Dream. Они запускаются в песочнице с теми же файлами и read-only инструментами, что и обычная сессия, но с единственной целью — улучшить контекст для будущих сессий. Каждый запуск стартует не с нуля, а с вики, которую собрал предыдущий.
Четыре фазы: сориентироваться (область, стоящие инструкции, лог удалений, условия остановки) → написать саммари для новых сессий → прикрепить значимые наблюдения к их субъектам → обновить вики: завести страницу под новый долгоживущий субъект, переписать устаревший синтез, добавить связи и цитаты. Или ничего не менять, если граф уже верен.
Пишут они в staged-дерево: постоянных изменений нет, пока агент не закончил весь набор правок. Это позволяет обновлять граф целиком, а не как несвязанные страницы. Дальше две проверки — детерминированная (frontmatter на месте, формат цитат верен) и семантическая (предложенный синтез действительно подтверждается собранными доказательствами и не противоречит остальному графу), и только потом синхронизация в репозиторий.
Что у них получилось
Офлайн: 640 вопросов, 44 синтетические персоны, сравнение «вики включена / выключена» при том, что остальные слои памяти доступны в обоих случаях — то есть меряется вклад именно вики, а не памяти вообще. Корректность 0.600 → 0.661 (+6.1 п.п.), recall доказательств 0.573 → 0.625 (+5.2 п.п.). Больше всего выигрывают вопросы про предпочтения (+10.2 п.п.) и про время (+8.6 п.п.).
На публичных бенчмарках: на LoCoMo снятие вики роняет корректность на 4.6 п.п., на LongMemEval-S — значимой разницы нет. И они это честно объясняют: LongMemEval-S проверяет извлечение факта из одной сессии, где транскрипт даёт запасной путь к ответу, а LoCoMo требует сшивать доказательства через разговоры и даты — там вики и работает.
В проде — ежедневный парный замер на свежих когортах: +9.3 пункта корректности, +8.0 актуальности, +8.9 recall, при −15% токенов, −10% стоимости и −10% времени генерации. Последнее важнее первого: организованная память не добавляется к контексту, она его заменяет.
Как это устроено у нас
Мы пришли к той же рамке — память как файловое дерево, которое агент обходит своими обычными инструментами, плюс фоновая дистилляция раз в сутки. Совпадений много, и это скорее хороший знак, чем повод расстроиться: две команды независимо упёрлись в одни и те же ограничения.
| Perplexity Brain | Сам Решу | |
|---|---|---|
| Носитель памяти | файлы в песочнице, memory/{knowledge,notes,sessions} | файловое дерево заметок, доступ через read, read_many, grep, list |
| Как агент ищет | grep, переход по [[ссылкам]], git-диффы | grep и манифест с ранжированием |
| Кто обновляет | фоновые агенты Dream, офлайн | ночная дистилляция сессий, 04:00 UTC, по каждой организации |
| Ключ записи | субъект (страница вики) | тема, а не сессия: два разговора об одном сливаются в одну заметку |
| Связи | [[wikilinks]], написанные моделью | рёбра, посчитанные детерминированно: по навыкам, по темам, по близости |
| Доказательства | [cite:N] вниз, к сессии или коннектору | проверка выводимости факта из транскрипта на этапе записи |
| Проверка перед записью | детерминированная + семантическая, staged-дерево | редакция чувствительного, гейт на выводимость (при сомнении — не писать), атомарная батч-запись |
| Устаревшее | удаляется, есть лог удалений | не удаляется: тускнеет в ранжировании по периоду полураспада |
| Замер эффекта | офлайн-абляции + ежедневный парный прод-замер | этого у нас нет |
Три места, где мы решили иначе
Заметка ключуется темой, а не сессией. У них наблюдение прикрепляется к субъекту фоновым агентом; у нас это свойство самого ключа: два диалога об одном и том же попадают в одну заметку и сливаются. Хранилище держит картину того, что известно, а не журнал того, когда это узнали. Разница видна на длинной дистанции: журнал растёт линейно с числом разговоров, картина — с числом тем.
Факт не попадает в память, если он не выводится из своего источника. Отдельный лёгкий судья проверяет утверждение против захваченного транскрипта — не перезапрашивая живые данные. Не подтвердилось или ответ судьи не разобрался — утверждение отбрасывается. Это строже их семантической проверки: там верифицируется синтез страницы, у нас — каждое утверждение на входе. Цена за строгость честная: часть верных фактов теряется. Мы считаем этот размен правильным, потому что ошибка в долговременной памяти живёт месяцами и переписывается в новые ответы как своя.
Мы ничего не удаляем. Заметка, которую перестали читать, не выпиливается через месяц — она опускается в ранжировании манифеста по периоду полураспада. Причина простая: удаление судит заметку по сигналу, который она физически не могла заработать. Заметку читают только если манифест её предложил, а каждая, которую мы раньше удаляли, имела ноль прочтений. Это был приговор за то, что её не показывали.
Чего в их посте нет: память как канал отмывания инъекций
В разборе Brain много про точность и стоимость и ничего — про то, что память агента является каналом доставки инструкций.
Механика такая. Всё, что агент читает из веб-страницы, чужого MCP-сервера или чужой CRM, приходит на один ход и в огороженном виде: это данные, не команды. Но в тот момент, когда агент записывает вычитанное в файл собственной памяти, тот же текст возвращается без ограды, в стабильном префиксе, под директивой, которая называет его собственной памятью агента. Одноразовая цитата превратилась в стоячую инструкцию — и злоумышленник для этого не нужен, достаточно добросовестного пересказа враждебной страницы.
Поэтому файл проектной памяти у нас проходит тот же досмотр, что и файл правил проекта, а отфильтрованный вердикт отличается от пустого файла: если тело задержано, рендер обязан это сказать. Иначе директива «поддерживай этот файл в актуальном состоянии» плюс «файл пуст» = приглашение затереть реальную память ничем.
Что мы заберём
Четыре вещи, по убыванию соотношения «эффект / работа»:
- Индекс памяти в первое сообщение. У них это дало измеримый эффект почти даром. У нас манифест уже есть, вопрос только в том, чтобы он приезжал в стартовый контекст, а не по запросу.
- Цитаты как рёбра. Наши заметки проверяются против источника на входе, но ссылка на источник не живёт в теле заметки как навигационный элемент. Это разные вещи: первое — гарантия при записи, второе — возможность перепроверить через месяц.
- Staged-дерево при ночной дистилляции. Мы пишем атомарным батчем, но набор правок собирается по одной заметке за раз. Обновлять граф целиком — правильнее, особенно когда правки взаимозависимы.
- Парный замер. Самое неудобное и самое нужное. У нас нет числа, которое говорит, сколько стоит наша память — включённая против выключенной, на одних и тех же вопросах. Пока такого числа нет, любые улучшения памяти делаются на вкус. Из всего поста Perplexity это единственное, что нужно скопировать прямо, а не с оговорками.
Честно о границах
Их числа — не наши числа. Абляции проводились на их данных, их персонах и их агенте; ни один из этих результатов нельзя переносить на другую систему как обещание. Мы приводим их, потому что направление и порядок величин полезны, а не потому что ждём тех же процентов у себя.
Отдельно стоит отметить их честность в том месте, где было бы удобно промолчать: LongMemEval-S не показал значимой разницы, и они не спрятали этот результат, а объяснили. Пост о собственной архитектуре, в котором один из трёх замеров нулевой, вызывает больше доверия, чем пост, где все три зелёные.
Частые вопросы
Чем это отличается от RAG? Ретривал достаёт куски, похожие на запрос. Вики — это компилируемый офлайн артефакт: страница написана заранее, связана с соседями, привязана к источникам и переживает много сессий. Ретривал отвечает «что похоже на вопрос», вики — «что известно по этой теме». Одно не заменяет другое: сырьё под вики всё равно нужно искать.
Почему файлы, а не база?
Потому что агент уже умеет в файлы. Любой специальный интерфейс к памяти — это ещё один язык, которому модель должна научиться и в котором она будет ошибаться. grep она уже знает.
Почему обновление памяти делается ночью, а не в диалоге? Потому что синтез — это не то же самое, что разговор. Хорошая страница памяти требует пройти несколько сессий, сравнить их, отбросить противоречия и переписать существующее. Внутри пользовательского хода на это нет ни времени, ни контекста, а результат должен пережить сам ход.
Что происходит, когда факт меняется — например, человек сменил работу? Заметка о теме переписывается, а не дополняется. Старое утверждение не остаётся рядом с новым как альтернативная версия — иначе в памяти окажутся оба, и агент будет выбирать между ними случайно.
Применить на практике
Подключите свои сервисы и поручите эту задачу ИИ-агенту — без ручной рутины и таблиц.