Дата: 2026-06-25 · Обновлён: 2026-06-25 (MMR + temporal decay, dreaming)
Автор: Денис (Denis DevOps)
Для кого: любой член команды, кто работает с агентами OpenClaw
Каждый агент OpenClaw стартует сессию как чистый лист. Он не помнит что было вчера, позавчера, или 5 минут назад в другой сессии от природы. Но он может «вспомнить» через два механизма:
Всё хранится в Markdown-файлах в workspace агента:
| Файл | Назначение | Пример содержимого |
|---|---|---|
MEMORY.md |
Долговременная память — факты, доступы, решения | IP серверов, ключевые события, предпочтения |
memory/YYYY-MM-DD.md |
Ежедневные заметки — что происходило конкретного числа | Баги, фиксы, диалоги, решения |
memory/YYYY-MM-DD-HHMM.md |
Дамп сессии при /new или /reset |
Последние 40 сообщений диалога |
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqliteНа Server 1 работает локальный embedding-сервер через llama.cpp:
multilingual-e5-base (~278MB, Q4_K_M quantized)localhost:8081Запрос "какой IP у Server 1"
│
├─→ [Embedding-сервер] → вектор запроса
│ │
│ └─→ sqlite-vec: поиск похожих векторов (семантический)
│
└─→ [FTS5] → поиск точных совпадений (keyword)
│
└─→ "159.194.225.30", "Server 1"
Слияние результатов
│
├─→ MMR (diversity): убирает дубликаты, оставляет разнообразные
├─→ Temporal decay: свежие заметки получают boost, старые теряют вес
└─→ топ-N сниппетов
Гибридный поиск (hybrid search) — это когда оба пути работают вместе: векторный находит «похожее по смыслу», keyword — точные совпадения (IP, ID, кодовые символы).
MMR (Maximal Marginal Relevance):
lambda: 0.7 — баланс между релевантностью (1.0) и разнообразием (0.0)Temporal Decay (временной спад):
halfLifeDays: 30 — заметка месячной давности имеет 50% весаMEMORY.md — вечнозелёный, никогда не decay'итсяmemory/YYYY-MM-DD.md — decay'ятся по датеDreaming — фоновый процесс, который запускается раз в сутки (03:00 UTC). Он анализирует short-term сигналы (что агенты искали через memory_search) и решает, какие факты достойны попасть в долговременную память (MEMORY.md).
| Фаза | Что делает | Пишет в MEMORY.md? | Где смотреть |
|---|---|---|---|
| Light | Сортирует short-term сигналы, группирует по темам, создаёт candidate'ы | ❌ Нет | memory/.dreams/ |
| REM | Ищет паттерны, темы, противоречия в candidate'ах | ❌ Нет | DREAMS.md (читаемый дневник) |
| Deep | Промоутит qualified candidate'ы в долговременную память | ✅ Да | MEMORY.md (только прошедшие порог) |
Каждый раз когда агент вызывает memory_search, система запоминает:
Это попадает в short-term recall store (512 записей максимум). Из него dreaming строит candidate'ы.
| Параметр | Значение | Что значит |
|---|---|---|
minScore |
0.8 | Candidate должен иметь score ≥ 0.8 |
minRecallCount |
3 | Факт должен всплыть минимум 3 раза в поиске |
minUniqueQueries |
3 | Минимум 3 разных запроса где этот факт появлялся |
recencyHalfLifeDays |
14 | Вес падает вдвое каждые 14 дней |
maxAgeDays |
30 | Candidate'ы старше 30 дней удаляются |
Это нормально. Dreaming консервативный по дизайну. Факт должен:
Если факт всплывал 1-2 раза или score низкий — он висит в staged и ждёт.
6 взвешенных сигналов:
# Статус dreaming
openclaw memory status --agent denis | grep -A5 Dreaming
# Что candidate'ы предлагают (preview, без записи)
openclaw memory promote --agent denis --limit 10
# Применить промоушн вручную
openclaw memory promote --agent denis --apply --limit 5
# Дневник dreaming (читаемый)
cat ~/.openclaw/workspace-denis/DREAMS.md
# В чате агента
/dreaming status # статус
/dreaming on # включить
/dreaming off # выключить
Конфиг: plugins.entries.memory-core.config.dreaming
--force, ручной)| Состояние | Что значит | Что делать |
|---|---|---|
Dirty: no |
Индекс актуальный | Ничего |
Dirty: yes |
Файлы изменились, нужен реиндекс | openclaw memory status --index --agent <id> |
Embeddings: ready |
Векторный поиск работает | Ничего |
Embeddings: unavailable |
Embedding-сервер не отвечает | Проверить сервер, перезапустить |
FTS: ready |
Keyword поиск работает | Ничего |
openclaw memory status --agent denis
openclaw memory status --deep --agent denis # глубокая проверка
openclaw memory status --index --agent denis --verbose
openclaw memory index --force --agent denis --verbose
⚠️
--force— только для одного агента, только когда действительно нужно. Не для всех сразу.
openclaw memory search "какой IP у сервера" --agent denis --max-results 5
Агент должен вызвать memory_search и найти ответ в своих файлах.
Сессия может прерваться в любой момент (Gateway restart, crash, aborted). Контекст теряется.
| Механизм | Событие | Что сохраняет |
|---|---|---|
memoryFlush |
Перед compaction | Важные факты в MEMORY.md |
session-memory hook |
/new, /reset |
Последние 40 сообщений |
active-memory |
Перед каждым ответом | Поиск по памяти (main, denis) |
Создание hook'а на message:received — автосохранение каждого сообщения в daily note.
Задача: #1155
openclaw memory status --agent <id>Dirty: yes → openclaw memory status --index --agent <id>Embeddings: unavailable → проверить embedding-сервер: curl http://localhost:8081/v1/embeddings ...ssh openclaw@159.194.225.30 -p 18953
ps aux | grep llama_embed
# Если нет — Gateway перезапустит автоматически
# Если есть но не отвечает — kill и ждать перезапуска
Полный реиндекс:
openclaw memory index --force --agent <id> --verbose
"memorySearch": {
"provider": "openai-compatible",
"model": "multilingual-e5-base",
"remote": {
"baseUrl": "http://localhost:8081/v1",
"nonBatchConcurrency": 1
},
"sync": {
"embeddingBatchTimeoutSeconds": 300
},
"query": {
"hybrid": {
"mmr": {
"enabled": true,
"lambda": 0.7
},
"temporalDecay": {
"enabled": true,
"halfLifeDays": 30
}
}
}
}
| Параметр | Значение | Зачем |
|---|---|---|
nonBatchConcurrency |
1 | Один поток эмбеддинга, не перегружает CPU |
embeddingBatchTimeoutSeconds |
300 | Таймаут 5 минут (не бесконечно) |
mmr.enabled |
true | Убирает дубликаты в результатах поиска |
mmr.lambda |
0.7 | Баланс релевантность/разнообразие |
temporalDecay.enabled |
true | Свежие заметки приоритетнее старых |
temporalDecay.halfLifeDays |
30 | Вес заметки падает вдвое за 30 дней |
| Страница | Статус | Описание |
|---|---|---|
| Память OpenClaw — полный гайд | ✅ Актуально | Этот документ |
| Память агентов — актуальная архитектура | ✅ Актуально | Технический срез: конфигурация, embedding-сервер, статус компонентов |
| Реиндекс памяти — runbook | ✅ Актуально | Диагностика и восстановление при проблемах |
| knowledge-search | ✅ Актуально | Поисковый навык: memory_search → Wiki.js → OpenProject |
| Память агента в OpenClaw | ⚠️ Базовый | Вводная от 02.05.2026, не обновлялась |
| Страница | Статус | Почему устарела |
|---|---|---|
| Memory Stack | ❌ Устарела | Ссылается на Mem0 REST API, memory-braid плагин, агентах без denis |
| Agent Memory Standard v3.0.0 | ❌ Устарела | Требует memory-braid, Mem0 recall, memory_add — всё отключено |
| Mem0 — установка и архитектура | ❌ Архив | REST-сервер Mem0 отключён 25.05.2026 |
| Mem0 Memory API | ❌ Архив | REST-сервер Mem0 отключён 25.05.2026 |
| Memory Stack — внутренний кейс v2.0.0 | 📦 Архив | Исторический документ |
Все страницы в /ru/archive/kb/research/agent-memory-research/ |
📦 Архив | Исследования мая 2026 |