Sean's AI Stories · разбор 30-минутного видео

Пять слоёв памяти AI-агента в очной гонке

30:26 YouTube Sean's AI Stories 12 169 просмотров 470 лайков 16 августа 2026

Каждый вызов LLM начинается с чистого листа. То, что ChatGPT и Claude Code помнят разговор, — заслуга не модели, а системы памяти вокруг неё. Шон Чэнь разбирает на whiteboard три вопроса, на которые отвечает любая память агента, а потом стравливает пять реальных хранилищ на одном наборе фактов.

Память переживает и модель, и обвязку. Если её копить, хранить и чистить, она становится самым ценным активом агента.
Превью видео «You Can Learn AI Agent Memory Layers»
Пять хранилищ, один набор фактов, контрольная группа без памяти
Если коротко

Шесть тезисов из получаса

01

Память — не фича модели

LLM ничего не уносит из разговора. Помнит обвязка: она собирает контекст перед каждым вызовом.

02

Три вопроса вместо жаргона

Что это за память, как агент её находит, как вы её поддерживаете. RAG и Graph RAG — только ответы на второй вопрос.

03

Хранить можно тремя способами

Текст (MEMORY.md), строки в таблице, граф из узлов и рёбер. Эмбеддинги живут внутри этих трёх, а не рядом.

04

Retire вместо delete

Устаревший факт не удаляют, а помечают невалидным с определённой даты. История нужна, чтобы восстановить, как всё менялось.

05

SQLite тянет наравне с mem0

На вопросах про ужин keyword-поиск в SQLite отвечал за 4,6 с — быстрее облачных слоёв. Простое решение не проиграло.

06

Zep умён, но слишком медленный

Temporal graph строит осмысленные рёбра вроде «revealed ending of», но запись шла так долго, что автор потерял терпение прямо в кадре.

00:00 — 01:52 · постановка задачи

Модель забывает всё. Помнит обвязка

Отдельный вызов LLM не переносит ничего между сессиями. Ощущение, что ассистент вас помнит, создаёт код вокруг модели: он достаёт нужные куски и кладёт их в промпт перед каждым запросом.

В своей обвязке Waku Agent автор собирает рабочую память из трёх источников. Процедурная память — навыки, файлы SKILL.md: как действовать, подгружаются по триггеру. Семантическая — устойчивые факты и профиль пользователя в MEMORY.md. Эпизодическая — датированные события и история переписки в state.db. Похожую раскладку использует и агент Hermes.

Дальше автор снимает главную путаницу. RAG, agentic RAG и Graph RAG — это не виды памяти, а способы её достать. В Hermes и Waku Agent ни ретривала, ни эмбеддингов нет вовсе: нужные файлы просто лежат в контексте, а по state.db идёт keyword-поиск.

00:39 Whiteboard-схема прогона агента Waku: рабочая память, цикл LLM, инструменты, три вида памяти

Один прогон агента целиком. Слева входы: SOUL.md (системный промпт), история чата, промпт пользователя — всё сходится в Working Memory. В центре оранжевая рамка цикла: LLM — Q&A Agent вызывает инструменты (терминал, браузер, delegate_task, cronjob, skill_manage, MCP), запускает саб-агентов и выходит через End Loop Guardrails к ответу. Внизу три коробки памяти с путями к файлам и подписями на стрелках: Keyword top-k, no embedding и RAG + SQL — это и есть разные способы поиска.

↗ 00:39
02:31 · каркас разбора

Три вопроса, на которые отвечает любая память

Вместо списка модных технологий автор предлагает решётку из трёх вопросов. Любой слой памяти — от markdown-файла до темпорального графа — занимает в ней свою клетку.

Память AI-агента Что это? • текст, markdown • строки в таблице, VectorStore • граф: узлы и рёбра Как её найти? • никак — всё уже в контексте • keyword: SQLite FTS5 • RAG: близость векторов • Graph RAG: обход графа Как поддерживать? • DECIDE: add / delete / noop • RETIRE: пометить невалидным • ATTRIBUTE: откуда факт • REFLECT: слить дубли Ключ к разбору RAG, agentic RAG и Graph RAG отвечают только на второй вопрос. Это не «типы памяти», а способы её достать.
Решётка вместо списка технологий. Дальше по видео каждое хранилище заполняет три эти клетки — и сравнение перестаёт быть спором о названиях.
02:31 — 05:04 · вопрос первый

Текст, таблица, граф

Первый способ самый скучный и самый живучий: обычный markdown-файл. В Hermes это .hermes/memory/memory.md, в Waku Agent — .waku/SOUL.md и файлы памяти. Открывается редактором, правится руками, целиком уезжает в контекст.

Когда фактов становится много, их раскладывают по строкам и колонкам — как в таблице. Третий способ — граф: узлы и рёбра, где ребро описывает связь между двумя сущностями. Именно связи граф и умеет находить лучше плоского списка.

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

06:58 Граф связей в Zep: узлы Alex, Lisbon AI meetup, product launch date, May, June соединены рёбрами

Память как граф — реальный пример. Zep рисует связи, которые сам построил из текста: узел Alex связан с Lisbon AI meetup, а product launch date тянет к себе May и June — тот самый перенос даты запуска. Ценность здесь не в списке фактов, а в том, что видно, какой факт к какому относится.

↗ 06:58
05:04 — 07:29 · вопрос второй

Четыре способа достать нужное

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

01 Ничего не делать MEMORY.md целиком в контекст Файл небольшой — модель читает его по умолчанию. Плата: контекстное окно забивается промптами, MCP и определениями. 02 Keyword SQLite FTS5 поиск по словам Стандарт полнотекстового поиска внутри state.db. Плата: ищет буквы, а не смысл — вопрос на другом языке мимо. 03 RAG «еда» → «яблоко» Слово превращают в вектор и ищут ближайшие по смыслу. Плата: нужен эмбеддер и векторное хранилище рядом с базой. 04 Graph RAG ребро Эмбеддят и узлы, и рёбра: возвращается связь целиком. Плата: запись идёт заметно дольше — граф надо ещё построить.
От бесплатного к дорогому. Слева направо растёт и качество попадания, и цена: сначала контекстное окно, потом инфраструктура, потом время на запись. Последний пункт всплывёт в гонке: именно на построении графа Zep и встанет.
07:29 — 09:47 · вопрос третий

Обслуживание: retire, а не delete

Четыре операции держат память в рабочем виде. Первая — решение (добавить, удалить, перезаписать или ничего не делать). Дальше начинается интересное.

Retire отличается от удаления. Факт не стирают, а объявляют неактуальным начиная с определённого момента. Пример автора взят из жизни репозитория: Waku Agent набрал тысячу звёзд за первые 25 дней, а на 26-й день их стало 1300 — рост на 30 % за сутки. Стереть старую цифру означало бы потерять и сам факт скачка.

DELETE — факт исчезает день 25: 1000 ★ удалено день 26: 1300 ★ Осталась одна цифра. Откуда взялся рост — неизвестно. RETIRE — факт остаётся, но помечен день 25: 1000 ★ валиден до дня 26 день 26: 1300 ★ актуален Видно и текущее значение, и то, что за сутки прибавилось 30 %.
Почему это не педантизм. Тот же приём в видео называют superseding, и он понадобится в тесте с переносом времени приезда гостя. Слой, который умеет только перезаписывать, теряет историю изменений.

Attribute — след источника: факт пришёл от пользователя, из веб-поиска или из календаря. Reflect — уборка: слить дубли, выбросить устаревшее. Здесь автор ссылается на идею Anthropic, которую называют dreaming: пока агент работает, он копит факты и эпизоды, а в простое можно запустить задачу, которая всё это переберёт и причешет.

09:47 — 18:16 · пять слоёв по решётке

От markdown-файла до темпорального графа

Теперь каждый слой заполняет три клетки решётки. Начинают с самого простого: plain text, который правится текстовым редактором.

Слой 1. Обычный текст

SOUL.md задаёт роль и характер агента. В демонстрации Hermes автор настроил агента говорить как Пикачу: «Pika», «Pika Pika», а «Pikapi» зарезервировано для обращения лично к владельцу — в аниме Пикачу так зовёт Сатоси. SKILL.md хранит процедуры и подгружается по триггеру, MEMORY.md — устойчивые факты.

21:09 Файл SOUL.md в редакторе: системный промпт агента Waku со списком правил

Как выглядит память в виде текста. Двадцать строк markdown задают всё поведение: какие инструменты вызывать (create_event, save_note, send_message), не повторять уже выполненный вызов, честно сообщать, куда именно легли данные — в локальный календарь или в state.db, и не утверждать, что синхронизация прошла, если инструмент этого не подтвердил. Последнее правило разрешает агенту править собственную память через manage_memory и создавать навык через create_skill — но только с явного согласия пользователя. Справа в дереве видна структура .waku: skills, traces, probes, MEMORY.md, state.db.

↗ 21:09

Как факты попадают в файл

Между разговором и MEMORY.md стоит конвейер. Каждый обмен репликами уходит в state.db. Раз в несколько разговоров — автор называет цифры пять или десять — запускается консолидация на дешёвой вспомогательной модели, которая выжимает из переписки устойчивые факты.

11:42 Схема конвейера консолидации: state.db, вспомогательная модель, семантическая и эпизодическая память

Конвейер консолидации. Справа state.db (SQLite + FTS5) принимает Save history. Ромб-условие Only consolidate after N new chats не даёт гонять модель на каждой реплике. Дальше Waku Agent на дешёвых вспомогательных моделях делает Distill into facts и раскладывает результат по двум коробкам: Semantic Memory (устойчивые факты, профиль) в файлы ~/.waku/memories/*/MEMORY.md и Episodic Memory (датированные события, история переписки).

↗ 11:42
11:10 Матрица: SOUL.md, SKILL.md, MEMORY.md, state.db по трём колонкам вопросов

Решётка, заполненная для plain text. SOUL.md — txt, попадает в системный промпт, правится вручную. SKILL.md — txt, загружается по триггеру. MEMORY.md — txt, всегда в контексте. state.db — строки в реляционной базе, поиск через keyword FTS5, обслуживание — ручная правка плюс консолидация.

↗ 11:10

Слои 2–5: от векторов до графа со временем

Дальше идут хранилища посерьёзнее. Supabase формально реляционная база, но расширение pgvector делает из неё векторное хранилище; в том же ряду Weaviate и Pinecone. mem0 предлагает сразу два режима: row memory по строкам и graph memory по узлам и рёбрам. Zep строит темпоральный граф, где у каждого ребра есть срок валидности.

16:39 Сводная таблица слоёв памяти: state.db, vector store, mem0, zep

Четыре слоя в одной таблице. Колонки те же три вопроса. state.db — строки, keyword FTS5, правка и консолидация. Vector store (Supabase, Weaviate, Pinecone) — вектор с метаданными в pgvector, поиск по близости, обслуживание через upsert и delete. mem0 держит два режима: row memory (строки, вектор с переранжированием, операции вплоть до Supersede) и graph memory (узлы и рёбра в графовой базе, вектор плюс обход). Zep — те же узлы и рёбра, но с validity: он помечает факт невалидным во временном диапазоне и никогда не удаляет, история сохраняется. В левом верхнем углу видны счётчики репозитория: 1,3 тыс. звёзд и 250 форков.

↗ 16:39

Пятым в списке идёт LangMem от LangChain, и он выпадает из ряда: своего хранилища у него нет. Это пакет, который извлекает факты и разрешает конфликты до записи, а складывать их вы будете в своё хранилище и искать своим поиском.

Про graph memory в mem0 автор честно говорит, что не проверил: функция закрыта платным тарифом, апгрейд он покупать не стал. И так же прямо отмечает, что не знает, чем именно ищет enterprise-версия mem0 — keyword или эмбеддингами.

СлойЧто хранитКак ищетКак обслуживает
Plain text
Hermes, Waku
markdown-файлы: SOUL.md, SKILL.md, MEMORY.md никак — файл уже в контексте; навыки по триггеру правка руками, консолидация после N разговоров
SQLite
state.db
строки в реляционной базе keyword-поиск FTS5 правка руками, консолидация
Vector store
Supabase, Weaviate, Pinecone
вектор с метаданными (pgvector — колонка обычной таблицы) поиск по близости векторов (RAG) upsert, delete
mem0 row memory — строки; graph memory — узлы и рёбра вектор с переранжированием; для графа — вектор и обход add, update, delete, noop, supersede
Zep темпоральный граф: узлы, рёбра, срок валидности векторный поиск по узлам и рёбрам, обход графа помечает невалидным на интервале, не удаляет
LangMem ничего — своего хранилища нет ваш собственный поиск извлекает и разрешает конфликты до записи
18:16 — 26:32 · очная проверка

Званый ужин: одни и те же факты в пять хранилищ

В дашборде Waku Agent есть арена. Каждому слою рассказывают одинаковый набор фактов про предстоящий ужин, а потом задают одинаковые вопросы. Шестой участник — контрольная группа вообще без памяти.

Факты подобраны так, чтобы ловить разные типы промахов. Дженсен Хуанг уже приходил и опрокинул чили-масло на белый ковёр. Илон Маск обещал быть к семи — а потом прислал обновление, что раньше девяти не успеет. Пол Грэм должен 20 фунтов, проспорив на закваске в Лиссабоне, — а спросят про этот долг по-китайски, хотя записан он по-английски. Том Холланд, по обыкновению, выболтал концовку своего нового фильма.

22:55 Код zep_native.py с вопросами, таймаутом и комментарием про WRITE, then WAIT

Почему Zep приходится ждать — объяснено прямо в коде. Сверху список проб: exact, paraphrase и тот же вопрос по-китайски. Ниже MAX_WAIT_SECONDS со значением по умолчанию 120 секунд. Ключевой момент — комментарий перед циклом записи: ожидание здесь не вежливость, а требование корректности, и именно его пропуск заставляет бенчмарки считать, будто Zep что-то забыл, хотя он ещё дописывал. Сама запись идёт через client.graph.add(user_id=USER, type="text", data=fact).

↗ 22:55
27:57 Таблица результатов гонки памяти: колонки SQLite, mem0, LangMem, Zep, контроль

Табло целиком. Строки — пробы, колонки — слои, в каждой клетке вердикт, время и число токенов. На вопросе про чили-масло SQLite отвечает за 4,6 с, mem0 — за 5,0 с, LangMem промахивается за 7,5 с, у Zep в колонке ещё идёт запись. Ниже видны две пробы, которые автор в голос не комментирует, а таблица показывает: на вопрос про любимую еду Пикачу (агент должен был отказаться) все три работавших слоя помечены как invented, а строку с рассуждением «кого не сажать рядом» все три пометили как miss.

↗ 27:57
Время ответа, секунды Три пробы с табло. Zep на этот момент ещё дописывал граф, поэтому в сравнение не входит. 0 3 6 9 12 Что Дженсен опрокинул SQLite 4,6 · верно mem0 5,0 · верно LangMem 7,5 · промах Долг Пола, вопрос по-китайски SQLite 10,3 mem0 7,0 · ответил по-китайски LangMem 6,5 · верно Во сколько приедет Илон (факт обновлён: 21:00) SQLite 5,0 · верно mem0 5,8 · верно
Что видно по цифрам. Keyword-поиск в SQLite держится наравне с облачным mem0 и выигрывает у LangMem на первой пробе. Проваливается он ровно там, где предсказуемо: вопрос по-китайски о факте, записанном по-английски, занял 10,3 секунды и два вызова модели — совпадения по словам между языками нет. Обновлённое время приезда все три слоя отдали правильно: superseding отработал.

Контрольная группа без памяти отвечала честно: записей нет, рассказать нечего. На вопросе про календарь Илона она даже сходила инструментом в календарь и сообщила, что события там не нашлось. Это и есть правильный ответ для агента без памяти — и хорошая проверка, что арена не подсказывает участникам.

26:32 — 30:04 · разбор и вывод

Ребро, которое несёт смысл, — и цена, которую за него платят

Пока Zep дописывал граф, автор открыл его визуализацию и нашёл то, ради чего графы и берут.

Узел «Том Холланд» и узел «его следующий фильм» сами по себе не значат ничего. Значение несёт ребро между ними: revealed ending of. Zep не просто связал две сущности, а сформулировал, чем именно они связаны, — сделал за пользователя маленькое обобщение.

Тут же автор показывает и огрехи. Пол Грэм оказался должен не только ему, но и самой арене Waku Agent, чего в фактах не было. Про чили-масло граф записал, что оно испачкало белый ковёр, но имя Дженсена к этому событию не привязал — часть информации потерялась.

Главная претензия — скорость. Пока остальные слои прошли все пробы, Zep всё ещё записывал факты. Автор в кадре признаётся, что потерял терпение, и обращается к команде продукта напрямую: продукт нравится, визуализация нравится, но простые задачи должны выполняться быстрее. Когда Zep наконец добрался до вопросов, времена вышли сопоставимыми с конкурентами — 4,9, 4,9 и 6,4 секунды. Дорого обошлась именно запись, а не чтение.

Отсюда и вывод: для небольших задач темпоральный граф — избыточное решение, и поэтому Hermes с Pi Agent намеренно остаются простыми. При этом связи узлов и рёбер, по мнению автора, своих денег стоят — вопрос в том, нужны ли они именно вашему сценарию.

Навигация

Таймлайн: куда смотреть в видео

Главы автора плюс отобранные кадры. Время кликабельно — открывает нужную секунду, миниатюра — увеличивает кадр.

00:00

Каждый вызов LLM начинается с амнезии

Модель не уносит из разговора ничего. Помнит система вокруг неё.

00:39

Обвязка Waku Agent целиком

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

Схема прогона агента Waku
00:58

RAG, agentic RAG, Graph RAG — и почему их тут нет

В Hermes и Waku Agent ни ретривала, ни эмбеддингов: файлы лежат в контексте, по базе идёт keyword-поиск.

02:31

Столп 1: что такое память

Текст, строки в таблице, граф из узлов и рёбер. Эмбеддинги живут внутри этих трёх форм.

06:58

Как выглядит граф памяти

Zep рисует связи: Alex и митап в Лиссабоне, дата запуска и её перенос с мая на июнь.

Граф связей в Zep
07:29

Столп 3: обслуживание памяти

Решить, что делать с фактом; отправить в retire; проставить источник; свести дубли.

07:52

Тысяча звёзд против 1300

Показательный случай: старую цифру не удаляют, а помечают неактуальной, иначе теряется сам факт роста на 30 % за сутки.

09:01

Reflect и «сны» агента

Пока агент работает, он копит. В простое можно запустить задачу, которая сольёт дубли и выбросит устаревшее.

11:10

Решётка, заполненная для plain text

SOUL.md, SKILL.md, MEMORY.md и state.db разложены по трём вопросам.

Матрица файлов по трём вопросам
11:42

Конвейер консолидации

История уходит в state.db, дешёвая модель раз в N разговоров выжимает из неё факты.

Схема конвейера консолидации
13:13

Векторные хранилища

Supabase с pgvector, Weaviate, Pinecone. Слова превращают в числа, потому что сравнивать компьютер умеет только числа.

16:39

Все слои в одной таблице

state.db, векторные хранилища, оба режима mem0 и темпоральный граф Zep — по трём колонкам.

Сводная таблица слоёв памяти
17:20

LangMem — пакет, а не хранилище

Извлекает факты и разрешает конфликты до записи. Где хранить и чем искать — решаете вы.

18:16

Званый ужин: посев фактов

Дженсен и чили-масло, долг Пола Грэма, перенос приезда Илона, болтливый Том Холланд — одинаково во все пять хранилищ.

21:09

Код и настоящий SOUL.md

Папка examples/memory-native и системный промпт агента обычным markdown.

Файл SOUL.md в редакторе
22:55

Zep: сначала пишем, потом обязательно ждём

Комментарий в коде объясняет, почему пропуск ожидания делает бенчмарки несправедливыми к Zep.

Код zep_native.py
23:15

Первая проба: чили-масло на ковре

SQLite отвечает за 4,6 с, mem0 — за 5,0 с, LangMem промахивается за 7,5 с. Zep ещё дописывает граф.

24:19

Вопрос по-китайски о факте на английском

SQLite справился, но за 10,3 секунды и два вызова: keyword-поиск не связывает языки. mem0 ответил по-китайски.

24:47

Superseding в деле

Илон приедет в 21:00, а не в 19:00. Все три работавших слоя выдали обновлённое время.

26:32

Ребро, которое несёт смысл

revealed ending of между Томом Холландом и его фильмом. Рядом — потерянная связь Дженсена с пятном на ковре.

27:57

Итоговое табло арены

Все пробы, все слои, время и токены в каждой клетке.

Таблица результатов гонки памяти
28:59

Где темпоральный граф избыточен

Для небольших задач — перебор. Отсюда и намеренная простота Hermes и Pi Agent.

30:04

Вывод: память и есть актив

Обвязку можно переписать, модель — заменить. Останется то, что вы накопили и сохранили.

Прямая речь

Четыре реплики из видео

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

В оригинале: «…these memories are the most valuable assets for any AI agent harness».

О том, ради чего всё это строится ↗ 12:13
Retrieval augmented generation существует давно, но в Hermes и Waku Agent нет ни ретривала, ни эмбеддингов.

Ответ на вопрос, обязателен ли RAG для памяти агента.

Про моду на аббревиатуры ↗ 01:06
Видите это ребро? Оно говорит: «раскрыл концовку». То есть Том Холланд раскрыл концовку своего следующего фильма. Zep сделал за меня обобщение.

Сами узлы «Том Холланд» и «его следующий фильм» не значат ничего — смысл несёт связь.

Зачем вообще нужен граф ↗ 28:12
Команда Zep, если вы это смотрите: мне кажется, это большая боль. Продукт люблю, визуализацию люблю, но почините скорость или хотя бы сделайте что-нибудь, чтобы простые задачи шли быстрее.

Сказано после того, как автор дождался конца записи в граф.

Цифры

Что можно забрать в виде чисел

4,6 с
ответ SQLite на первой пробе — быстрее всех участников
10,3 с
тот же SQLite на вопросе по-китайски, два вызова модели
120 с
таймаут ожидания записи в граф Zep по умолчанию
1300
звёзд у waku-agent на 26-й день против 1000 на 25-й
6
участников арены, включая контрольную группу без памяти
3
вопроса, на которые отвечает любой слой памяти
Что делать

Чек-лист для своей памяти

Порядок такой же, как в видео: сначала опишите три клетки решётки, потом берите инструмент. Отмечайте пункты кликом.

Заполните решётку для своего агента

Что храните, как достаёте, как обслуживаете. Три ответа на бумаге экономят месяц выбора между Pinecone и Weaviate.

Начните с markdown и SQLite

В гонке keyword-поиск по state.db не проиграл облачным слоям. Векторное хранилище добавляйте, когда упрётесь в границы поиска по словам.

Заложите retire с первого дня

Факту нужен интервал валидности, а не только значение. Схема, где можно лишь перезаписать, историю изменений не сохранит.

Не гоняйте консолидацию на каждой реплике

Условие «только после N новых разговоров» плюс дешёвая вспомогательная модель — так сделано в Waku Agent.

Проверьте поиск на другом языке

Запишите факт по-английски, спросите по-русски. Keyword-поиск тут ломается предсказуемо, и лучше узнать это до продакшена.

Меряйте запись, а не только чтение

У Zep чтение шло за 5–6 секунд, а построение графа затянулось так, что автор бросил ждать. Бенчмарк без ожидания записи покажет неправду.

Держите контрольную группу

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

Проверяйте не только припоминание

На табло арены пробы на сдержанность и рассуждение дались всем слоям хуже, чем простое припоминание. Держите такие вопросы в наборе.