Все статьи

Память ИИ-агента: разбор 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, приходит на один ход и в огороженном виде: это данные, не команды. Но в тот момент, когда агент записывает вычитанное в файл собственной памяти, тот же текст возвращается без ограды, в стабильном префиксе, под директивой, которая называет его собственной памятью агента. Одноразовая цитата превратилась в стоячую инструкцию — и злоумышленник для этого не нужен, достаточно добросовестного пересказа враждебной страницы.

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

Что мы заберём

Четыре вещи, по убыванию соотношения «эффект / работа»:

  1. Индекс памяти в первое сообщение. У них это дало измеримый эффект почти даром. У нас манифест уже есть, вопрос только в том, чтобы он приезжал в стартовый контекст, а не по запросу.
  2. Цитаты как рёбра. Наши заметки проверяются против источника на входе, но ссылка на источник не живёт в теле заметки как навигационный элемент. Это разные вещи: первое — гарантия при записи, второе — возможность перепроверить через месяц.
  3. Staged-дерево при ночной дистилляции. Мы пишем атомарным батчем, но набор правок собирается по одной заметке за раз. Обновлять граф целиком — правильнее, особенно когда правки взаимозависимы.
  4. Парный замер. Самое неудобное и самое нужное. У нас нет числа, которое говорит, сколько стоит наша память — включённая против выключенной, на одних и тех же вопросах. Пока такого числа нет, любые улучшения памяти делаются на вкус. Из всего поста Perplexity это единственное, что нужно скопировать прямо, а не с оговорками.

Честно о границах

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

Отдельно стоит отметить их честность в том месте, где было бы удобно промолчать: LongMemEval-S не показал значимой разницы, и они не спрятали этот результат, а объяснили. Пост о собственной архитектуре, в котором один из трёх замеров нулевой, вызывает больше доверия, чем пост, где все три зелёные.

Частые вопросы

Чем это отличается от RAG? Ретривал достаёт куски, похожие на запрос. Вики — это компилируемый офлайн артефакт: страница написана заранее, связана с соседями, привязана к источникам и переживает много сессий. Ретривал отвечает «что похоже на вопрос», вики — «что известно по этой теме». Одно не заменяет другое: сырьё под вики всё равно нужно искать.

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

Почему обновление памяти делается ночью, а не в диалоге? Потому что синтез — это не то же самое, что разговор. Хорошая страница памяти требует пройти несколько сессий, сравнить их, отбросить противоречия и переписать существующее. Внутри пользовательского хода на это нет ни времени, ни контекста, а результат должен пережить сам ход.

Что происходит, когда факт меняется — например, человек сменил работу? Заметка о теме переписывается, а не дополняется. Старое утверждение не остаётся рядом с новым как альтернативная версия — иначе в памяти окажутся оба, и агент будет выбирать между ними случайно.

Применить на практике

Подключите свои сервисы и поручите эту задачу ИИ-агенту — без ручной рутины и таблиц.