Octobrain 0.7.0: память вашего ИИ теперь спит, забывает и фокусируется
Память, которая только растёт, — это не память. Это ящик с хламом.
Каждый инструмент памяти ИИ до сих пор был аддитивным: храни, храни, храни. Куча растёт, поиск шумит всё сильнее, а то, что вам реально нужно, погребено под пятью почти одинаковыми заметками, которые вы написали об этом в прошлый вторник. Больше воспоминаний перестаёт означать лучший recall.
Мозг устроен иначе. Он консолидирует, пока вы спите. Он даёт неиспользуемому угасать. Он организуется вокруг того, что вы пытались сделать, а не вокруг порядка событий. Этот отсев — не баг человеческой памяти, а ровно та причина, по которой recall остаётся острым.
0.6.0 была про то, что Octobrain мог находить — читать полные документы, грепать по индексированному контенту. 0.7.0 — про то, что память Octobrain делает, когда вы не смотрите. Она перестаёт быть пассивным логом и начинает вести себя как мозг.
Sleep Consolidation — память, которая прибирается сама
Это главное. Octobrain теперь прогоняет «сон» — проход, который находит кластеры недавних похожих воспоминаний и сворачивает каждый кластер в один консолидированный инсайт.
Допустим, за неделю ваш агент сохранил пять отдельных заметок, гоняясь за одним и тем же багом с rate limiting. До 0.7.0 поиск вернул бы пять размытых пересекающихся попаданий и оставил ранжирование на волю случая. После прохода sleep эти пять схлопываются в один чистый инсайт с более высоким confidence — а оригиналы не удаляются, они приглушаются и сохраняются как провенанс, так что путь обратно к сырым заметкам остаётся.
Важная часть: это автономно. Никакого cron-задания. Никакого инструмента, который ваш агент должен помнить вызвать. Он запускается лениво сам по себе — при следующем старте Octobrain, если с прошлого прохода прошёл день, он отрабатывает и тихо уходит с дороги. Медленный или упавший проход никогда ничего не блокирует.
[memory]
sleep_consolidation_enabled = true # opt-out, not opt-in
sleep_consolidation_interval_hours = 24 # once a day
sleep_consolidation_threshold = 0.85 # how similar memories must be to cluster
sleep_consolidation_min_cluster_size = 3 # need at least 3 to bother
sleep_consolidation_max_age_days = 7 # only recent memories
Если хотите форсировать проход — для тестов или прямо перед крупным извлечением — CLI-override никуда не делся:
octobrain memory sleep-consolidate
Но по умолчанию вы его не трогаете. Память держит себя в чистоте сама.
Half-Life Decay — забывание по умыслу
Octobrain теперь применяет кривую забывания. Importance каждого воспоминания со временем угасает по графику half-life — но в момент, когда вы обращаетесь к воспоминанию, оно подкрепляется. Часто вызываемые воспоминания остаются сильными; те, к которым ничего не обращается, мягко тускнеют.
Это кривая забывания Эббингауза, позаимствованная напрямую из того, как работает человеческая память. Эффект в том, что ранжирование улучшается само. Вы ничего не курируете. Воспоминания, которыми вы реально пользуетесь, всплывают; те, что вы сохранили однажды и больше не понадобились, тонут — так и не будучи выброшенными.
Здесь важны два предохранителя:
- Ничто не обнуляется. Есть пол importance; редко вызываемое воспоминание уходит в хвост, но никогда не исчезает. Decay — это сигнал переранжирования, а не удаление.
- Decay сохраняется. Счётчики обращений и таймстампы последнего доступа хранятся и переживают рестарты. Понимание памятью того, что «горячо», не сбрасывается каждую сессию.
[memory]
decay_enabled = true
decay_half_life_days = 90 # higher = memories stay relevant longer
Можно также тюнить decay для каждого воспоминания — быстро устаревающей заметке можно сказать угасать вдвое быстрее, фундаментальному решению — вдвое медленнее, — но почти для всех дефолт просто работает.
Goal-Anchored Consolidation — память со смыслом
Вот идея, вокруг которой постоянно кружит исследование памяти агентов: консолидируй по цели, а не по часам. Воспоминания не должны резюмироваться просто потому, что прошло время — они должны схлопываться вокруг того, чего вы пытались добиться.
0.7.0 делает это полноценным workflow. Появился новый тип воспоминания Goal и настоящий жизненный цикл для каждого воспоминания — Working → Consolidated → Archived. Воспоминания, вносящие вклад в цель, связываются с ней отношением achieves. Когда цель закрыта, вы её завершаете, и Octobrain сворачивает каждое вносящее вклад воспоминание в один консолидированный инсайт: его importance поднимается выше источников, источники приглушаются и подвешиваются под ним как запись о том, как вы к этому пришли.
# Five scattered findings, one closed goal → one durable insight
octobrain memory consolidate goal_4f2a -s "Shipped rate limiting: token bucket, 429 + Retry-After"
Пропустите summary — и Octobrain синтезирует его из заголовков источников. В любом случае то, что было пятью разрозненными заметками, становится одним воспоминанием, которое что-то значит, — заякоренным к намерению, которое его породило.
И это та же машинерия, на которой под капотом работает sleep consolidation: каждый кластер получает синтетическую цель, а goal-пайплайн делает остальное. Один движок консолидации, два способа его запустить — вручную, когда вы что-то завершаете, и автоматически, пока вы спите.
Recall стал умнее — HyDE-lite, включён по умолчанию
Размытые запросы — это где семантический поиск обычно проваливается. «То, что про ретраи» не эмбедится никуда близко к заметке, которую вы реально написали.
0.7.0 приносит расширение запроса HyDE-lite и включает его по умолчанию. Механизм прост: делаем первый проход поиска, берём топ результатов, усредняем их в центроид и подмешиваем обратно в исходный запрос перед настоящим поиском. Запрос фактически выучивает, как выглядят его собственные ответы, и целится точнее.
На практике это +10–30% recall на long-tail и недоопределённых запросах — ровно тех, что люди реально набирают. Стоит это одного лишнего векторного lookup на поиск, не требует LLM (это чистая математика), и remember включает его автоматически. Ключевая (BM25) половина поиска по-прежнему использует ваш буквальный текст, так что запросы на точное совпадение не задеты.
Вы ничего не настраиваете. Размытые вопросы просто чаще находят нужное воспоминание.
Более компактная поверхность инструментов — с 8 MCP-инструментов до 5
Каждый инструмент, который вы выставляете через MCP, стоит вашему агенту контекста на каждом ходу — примерно 500–2000 токенов схемы, которую ему нужно прочитать, прежде чем что-то сделать. Раздутая поверхность инструментов — это налог на каждый запрос.
Поэтому мы урезали MCP-поверхность Octobrain с восьми инструментов до пяти отдельных глаголов:
memorize store a memory (now with optional related_to[])
remember recall (HyDE expansion + 1-hop neighbors, automatic)
forget delete (with confirmation)
consolidate close a goal (fold N memories into 1 insight)
knowledge documents (index, read, match, search)
Три инструмента ушли из MCP, потому что больше не оправдывали стоимость своей схемы:
sleep_consolidate— теперь автономен, так что агенту никогда не нужно его вызывать.relate— вложен вmemorize. Можно передатьrelated_to[]и связать воспоминание с другими в том же вызове, который его сохраняет. Внести вклад в цель теперь — это один round-trip: сохранить находку и пометить, что онаachievesцель, разом.memory_graph—rememberуже возвращает ближайших соседей воспоминания, что покрывает типичный случай.
Ни один из них не исчез — все они по-прежнему живут в CLI для администрирования и отладки. Они просто больше не съедают контекст вашего агента ради фич, которыми он редко пользуется. Пять инструментов, пять глаголов, никаких перегруженных флагов режима.
Мы начали измерять качество памяти — LongMemEval
Нельзя улучшить то, что не измеряешь. 0.7.0 добавляет benchmark-харнесс LongMemEval — с чекпоинтингом для долгих прогонов — чтобы оценивать долгосрочный recall Octobrain между релизами на реальном бенчмарке, а не на ощущениях. Это инфраструктура, которую вы никогда не запустите, но именно она делает заявления о recall и консолидации выше теми заявлениями, за которые мы можем поручиться, — и так же будет с будущими.
Под капотом
Горстка более тихих изменений держит свет включённым по мере роста памяти:
- Периодическое обслуживание LanceDB запускается автоматически, чтобы со временем держать векторное хранилище компактным и быстрым.
- Асинхронные авто-связывание и graph-извлечение — связанные воспоминания соединяются в фоне, не тормозя запись, которая их запустила.
- Консолидированный SQL-модуль с централизованным экранированием литералов и упрочнением — меньше острых углов, одно место, чтобы рассуждать о запросах.
Ничего из этого вы не заметите напрямую. В этом и смысл.
Как выглядит 0.7.0 на практике
Неделя из жизни воспоминания, от начала до конца:
- Понедельник. Ваш агент сохраняет три заметки, дебажа флакающий вебхук — каждую через
memorize, одну из них помечая, что онаachievesцель «починить ретраи вебхука», в том же вызове. - Всю неделю. Вы продолжаете спрашивать об этом. Каждый
rememberподкрепляет воспоминания, к которым вы обращаетесь, и тихо гасит те, к которым нет. - Пятница. Вы выкатываете фикс и делаете
consolidateцели. Три заметки становятся одним прочным инсайтом: «Ретраи вебхука: экспоненциальный backoff, ключи идемпотентности, dead-letter после 5». - Ночью. Sleep consolidation подметает почти одинаковые наблюдения, которые вы так и не связали явно, и сворачивает их тоже.
- Через месяц. Кто-то спрашивает «как мы обрабатывали сбои вебхуков?» — размытый запрос, который HyDE расширяет, попадая в консолидированный инсайт, а не в пять полузабытых фрагментов.
Никто ничего не курировал. Память организовала себя сама.
Апгрейд
С 0.6.x миграция небольшая:
Конфиг — один ренейм. Если в вашей секции [embedding] задан text_model, переименуйте его в model. Это единственное breaking-изменение конфига.
[embedding]
model = "fastembed:nomic-ai/nomic-embed-text-v1.5" # was: text_model
MCP-клиенты — три инструмента переехали только в CLI. Если конфиг вашего клиента или промпты агента зовут sleep_consolidate, relate или memory_graph через MCP, обновите их:
- Уберите вызовы
sleep_consolidateцеликом — теперь он автономен. - Замените
relateнаrelated_to[]уmemorize, чтобы связывать по ходу сохранения (или используйтеoctobrain memory relateв CLI для связей между существующими). - Типичный случай
memory_graphпокрыт результатами соседей уremember; более глубокий обход остаётся вoctobrain memory graph. consolidate_goalпереименован вconsolidate— та же схема, более чистый глагол.
Хранилище — делать нечего. Новые колонки жизненного цикла и трекинга обращений добавляются при первом запуске, а legacy-воспоминания по умолчанию полностью активны. Ни ручной миграции, ни простоя.
Дефолты — sleep consolidation и HyDE теперь включены. Если хотите старое поведение, выставьте sleep_consolidation_enabled = false или [search.hyde] enabled = false. Большинству стоит оставить их включёнными.
Исходники и бинарники: github.com/muvon/octobrain. Что-то сломалось — открывайте issue, мы их читаем.



