Перейти к содержимому
NEWЧат с 15 ИИ-моделями — попробуйте бесплатно / имейте совесть, когда будете делиться или копировать
>AISTUDY_

Модуль 3.5 · Урок 3

Урок 3: Система памяти

40 мин
ТеорияПрактика
Содержание
3.5 / Урок 3 из 3

Чему вы научитесь

  • Понимать, как OpenClaw запоминает и забывает информацию
  • Настраивать компактификацию, memory flush и семантический поиск
  • Организовывать workspace-файлы для эффективной работы
  • Применять лучшие практики памяти для мессенджеров

Проблема: агент забывает

Вы настроили OpenClaw, подключили Telegram, проработали с агентом неделю. Он знает ваше расписание, помнит, что вы предпочитаете краткие ответы, знает имена коллег. Потом контекст переполняется, происходит сжатие — и агент «забывает» половину.

Или хуже: вы перезапускаете gateway, и агент начинает с чистого листа. Как будто вы познакомились заново.

Это главная проблема AI-агентов: контекстное окно — не память. Это временный буфер, который очищается. Настоящая память — это файлы на диске.


Аналогия: как устроена человеческая память

У людей память работает в несколько слоёв:

  • Оперативная память — то, о чём вы думаете прямо сейчас. Ограничена: 5-7 элементов
  • Краткосрочная — события за последние часы. Помните, но легко забудете
  • Долгосрочная — навыки, факты, решения. Помните месяцами и годами
  • Внешняя — записная книжка, заметки, календарь. Не в голове, но всегда можно посмотреть

У OpenClaw точно так же, только с другими названиями:

ЧеловекOpenClawВремя жизни
Оперативная памятьSession Context (контекстное окно)До конца сессии
КраткосрочнаяDaily Notes (memory/YYYY-MM-DD.md)Постоянно на диске
ДолгосрочнаяMEMORY.md (курированные факты)Постоянно на диске
ВнешняяSemantic Search (поиск по файлам)Постоянно в индексе

Ключевой принцип: диск — источник правды, контекст LLM — временный кеш. Если факт не записан в файл, он будет потерян.

flowchart TD
    MSG["Сообщение пользователя"] --> SC["Session Context\n(контекстное окно LLM)"]
    SC -->|"Контекст заполнен?"| CF{"Да"}
    CF -->|"Memory Flush"| DN["Daily Notes\n(memory/YYYY-MM-DD.md)"]
    CF -->|"Compaction"| SUM["Сводка старой истории"]
    SUM --> SC
    DN -->|"Вручную или автоматически"| MEM["MEMORY.md\n(курированные факты)"]
    MEM -.->|"Semantic Search"| SC
    DN -.->|"Semantic Search"| SC

    style MSG fill:#f8fafc,stroke:#1e293b
    style SC fill:#fef3c7,stroke:#d97706
    style CF fill:#fee2e2,stroke:#dc2626
    style DN fill:#dbeafe,stroke:#2563eb
    style SUM fill:#f3e8ff,stroke:#9333ea
    style MEM fill:#dcfce7,stroke:#16a34a

Шаг 1. Посмотрите, что у вас есть

Откройте директорию workspace вашего агента:

ls -la ~/.openclaw/workspace/default/

Вы увидите файлы, которые мы создали в модуле 3.3:

SOUL.md       -- кто агент, как себя вести
AGENTS.md     -- операционные инструкции
USER.md       -- информация о вас
IDENTITY.md   -- имя агента
TOOLS.md      -- заметки об инструментах
HEARTBEAT.md  -- чек-лист фоновых проверок
memory/       -- директория с ежедневными заметками

Это и есть постоянная память вашего агента. Каждый раз, когда начинается сессия, OpenClaw читает эти файлы и загружает их в контекст модели.

Что загружается и когда

Не все файлы загружаются одинаково:

ФайлКогда загружаетсяСтоимость
SOUL.md, AGENTS.md, USER.md, IDENTITY.md, TOOLS.mdКаждое сообщениеТокены x каждый API-вызов
HEARTBEAT.mdТолько при heartbeatТолько фоновые проверки
MEMORY.mdТолько в личных чатахНе в группах (защита данных)
memory/YYYY-MM-DD.mdСегодня + вчера при старте сессииДва файла при первом сообщении
BOOT.mdПри перезагрузке gatewayОдин раз
BOOTSTRAP.mdОдин раз, при первом запускеУдаляется после

Важный нюанс: файлы, загружаемые каждое сообщение, стоят денег на каждый API-вызов. Раздутый SOUL.md в 300 строк — это тысячи лишних токенов на каждое сообщение. Держите эти файлы компактными.


Шаг 2. Настройте Daily Notes

Daily Notes — это ежедневный лог агента. Файл memory/2026-03-20.md содержит всё, что агент посчитал важным за этот день.

Как это выглядит

Пример memory/2026-03-20.md:

## 09:15 -- Утренний брифинг
- 3 важных письма, 12 рассылок
- Встреча с командой в 14:00 (перенесена с 15:00)

## 11:30 -- Анализ продаж
- Выручка за март: 2.4M руб (+12% к февралю)
- Топ-3 продукта: виджеты, API, консалтинг

## 16:00 -- Решение
- Перешли на DeepSeek для рутинных задач (экономия ~80%)

Как агент записывает

Агент записывает в daily notes двумя способами:

  1. Автоматически — перед компактификацией (сжатием контекста) OpenClaw запускает «тихий» ход, который напоминает агенту: «запиши всё важное в daily notes». Это называется memory flush.

  2. По вашей просьбе — скажите агенту «запомни это» или «запиши в заметки», и он сохранит информацию в memory/YYYY-MM-DD.md.

Как агент читает

При старте новой сессии OpenClaw загружает сегодняшние и вчерашние daily notes. Агент видит контекст последних двух дней без загрузки полной истории.

А что с позавчерашними? Они доступны через семантический поиск — агент может найти их по смыслу, если нужно.


Шаг 3. Создайте MEMORY.md

MEMORY.md — это курированная база знаний агента. В отличие от daily notes (сырой лог), здесь только устойчивые факты, решения и предпочтения.

Создайте файл:

nano ~/.openclaw/workspace/default/MEMORY.md

Пример содержимого:

# Обо мне
- Часовой пояс: MSK (UTC+3)
- Предпочитаю краткие ответы
- Рабочие часы: 09:00-18:00

# Рабочие решения
- API: DeepSeek для рутины, Claude Sonnet для сложных задач
- Формат отчётов: таблицы, не списки
- Бюджет API: $30/мес максимум

# Проекты
- «Магазин»: PostgreSQL 16, деплой через GitHub Actions
- «Бот поддержки»: Python + aiogram, сервер на Hetzner

# Контакты
- Дизайнер Аня -- пишет в Telegram @anya_design
- PM Кирилл -- Slack, канал #project-x

Правила работы с MEMORY.md

Обновляйте, не дополняйте. Если факт изменился — замените старую запись. Не добавляйте «Обновление от 20.03: теперь используем другой сервер». Просто замените строку.

Удаляйте устаревшее. Накопление мусора снижает качество поиска и тратит токены. Если проект завершён — уберите его из MEMORY.md.

Не дублируйте. Если что-то уже есть в SOUL.md или USER.md — не повторяйте в MEMORY.md.

MEMORY.md не загружается в группах

Это правильное поведение: в группах могут быть посторонние, а MEMORY.md содержит личные данные. OpenClaw защищает вашу приватность. Не переопределяйте это.


Шаг 4. Настройте компактификацию

Компактификация — самый важный процесс в системе памяти. Это момент, когда агент решает, что «помнить», а что «забыть».

Что происходит при компактификации

  1. Контекст приближается к лимиту модели (200K токенов для Claude)
  2. Срабатывает порог — осталось мало свободного места
  3. Memory flush: агент получает «тихий» запрос — «запиши всё важное в daily notes»
  4. Агент записывает критичные факты в memory/YYYY-MM-DD.md
  5. Старые сообщения сжимаются в краткую сводку
  6. Последние ~20 000 токенов остаются нетронутыми
  7. Сводка заменяет старую историю — и контекст снова свободен

Настройка

В ~/.openclaw/openclaw.json:

{
  "agents": {
    "defaults": {
      "compaction": {
        "enabled": true,
        "model": "ollama/llama3.1:8b",
        "identifierPolicy": "strict",
        "reserveTokensFloor": 20000,
        "memoryFlush": {
          "enabled": true,
          "softThresholdTokens": 40000
        }
      }
    }
  }
}

Что делает каждый параметр

model — модель для суммаризации. Compaction — простая задача, ей не нужен Opus. Используйте дешёвую модель или локальную через Ollama.

identifierPolicy: "strict" — при сжатии сохраняет имена файлов, ID, URL. Без этого агент может «забыть», с каким файлом работал.

reserveTokensFloor: 20000 — сколько токенов оставить свободными после compaction. 20K — запас для memory flush и следующих сообщений.

memoryFlush.enabled: true — перед сжатием агент записывает важное в daily notes. Обязательно включите — без этого агент теряет контекст при каждой компактификации.

softThresholdTokens: 40000 — за сколько токенов до лимита запустить memory flush. 40K даёт агенту достаточно места для записи.

Ручная компактификация

Перед большой задачей полезно освободить контекст:

/compact

Можно добавить инструкции:

/compact Сохрани информацию о проекте «Магазин» -- она понадобится дальше

Известная проблема

Memory flush срабатывает только перед автоматической компактификацией. Если вы пишете /new (новая сессия) или происходит ежедневный сброс — memory flush не запускается. Контекст теряется.

Обходной путь: перед /new попросите агента вручную:

Запиши всё важное из нашего разговора в daily notes

А потом:

/new

Шаг 5. Настройте семантический поиск

Семантический поиск позволяет агенту находить информацию во всех файлах workspace — не только в загруженных при старте, но и в архивных daily notes, документах, заметках.

Как это работает

  1. Все файлы workspace индексируются (преобразуются в числовые вектора)
  2. Когда агент ищет информацию, запрос тоже преобразуется в вектор
  3. Находятся файлы, ближайшие по смыслу
  4. Релевантные фрагменты подгружаются в контекст

Например: вы спрашиваете «какой был бюджет проекта в январе?». Агент ищет по памяти, находит daily note от 15 января с записью о бюджете, и подгружает её — даже если этот файл не загружен по умолчанию.

Настройка

{
  "agents": {
    "defaults": {
      "memorySearch": {
        "provider": "openai",
        "model": "text-embedding-3-small",
        "query": {
          "hybrid": {
            "enabled": true,
            "vectorWeight": 0.7,
            "textWeight": 0.3,
            "temporalDecay": {
              "enabled": true,
              "halfLifeDays": 30
            }
          }
        },
        "cache": {
          "enabled": true,
          "maxEntries": 50000
        }
      }
    }
  }
}

Параметры

provider — кто делает embeddings. Варианты: openai, gemini, ollama, local. Для России: ollama с моделью nomic-embed-text — работает локально, бесплатно.

hybrid.enabled — комбинированный поиск: и по смыслу (вектора), и по ключевым словам (BM25). Точнее, чем каждый метод по отдельности.

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

cache — кеш embeddings, чтобы не пересчитывать вектора при каждом запросе.

Для России: локальные embeddings

Если нет доступа к OpenAI/Google API для embeddings:

{
  "memorySearch": {
    "provider": "ollama",
    "model": "nomic-embed-text"
  }
}

Установите модель: ollama pull nomic-embed-text. Работает локально, без интернета, бесплатно. Качество достаточное для поиска по памяти.


Шаг 6. Управление сессиями

В мессенджерах сессии растут быстро. 35 сообщений в Telegram могут создать транскрипт в несколько мегабайт. Без управления это заполняет диск и тормозит агента.

Настройка

{
  "session": {
    "maintenance": {
      "mode": "enforce",
      "pruneAfter": "7d",
      "maxEntries": 500,
      "maxDiskBytes": "200mb"
    },
    "reset": {
      "idleMinutes": 120
    }
  }
}

pruneAfter: "7d" — транскрипты сессий старше 7 дней удаляются. Не путайте с daily notes — те хранятся вечно.

maxDiskBytes: "200mb" — лимит дискового пространства на все сессии. При превышении старые удаляются.

idleMinutes: 120 — если вы не пишете агенту 2 часа, следующее сообщение начнёт новую сессию. Это предотвращает бесконечный рост контекста.


Рабочий процесс: как всё сочетается

Вот как выглядит типичный день с правильно настроенной памятью:

Утро

  1. Вы пишете агенту «Доброе утро»
  2. OpenClaw загружает: SOUL.md + AGENTS.md + USER.md + IDENTITY.md + TOOLS.md
  3. Загружает daily notes: сегодня (пустой) + вчера (события вчерашнего дня)
  4. В личном чате загружает MEMORY.md (ваши предпочтения, проекты)
  5. Агент «помнит» вчерашний контекст и отвечает осмысленно

В течение дня

  1. Вы общаетесь, контекст растёт
  2. При необходимости агент ищет в памяти через semantic search
  3. К обеду контекст приближается к лимиту
  4. Срабатывает memory flush — агент записывает важное в memory/2026-03-20.md
  5. Компактификация сжимает старую историю, контекст освобождается

Вечер

  1. Вы уходите, agнт idle 2 часа
  2. Следующее сообщение начнёт новую сессию (idleMinutes: 120)
  3. Но daily notes сохранены — завтра агент прочитает их

Еженедельно

  1. Просмотрите daily notes за неделю
  2. Перенесите устойчивые факты в MEMORY.md
  3. Удалите устаревшее из MEMORY.md

Можно автоматизировать через HEARTBEAT.md:

## Воскресенье, 20:00
- Просмотри memory/ за последнюю неделю
- Перенеси устойчивые решения и факты в MEMORY.md
- Удали дубликаты и устаревшее из MEMORY.md

Пусть агент управляет памятью сам

Вам не нужно вручную переносить факты из daily notes в MEMORY.md или следить за размером файлов. Настройте агента — и он будет делать это автоматически.

Правила памяти в AGENTS.md

Добавьте в ~/.openclaw/workspace/default/AGENTS.md:

## Управление памятью
- Перед действием -- проверь memory: может, ты уже это делал
- После важного решения -- запиши в daily notes с пометкой [РЕШЕНИЕ]
- Раз в неделю (воскресенье) -- перенеси записи [РЕШЕНИЕ] из daily notes в MEMORY.md
- Удаляй устаревшее из MEMORY.md: если проект завершён, информация неактуальна
- Не дублируй: если факт уже есть в MEMORY.md, не повторяй его в daily notes
- Если контекст превысил 80K токенов -- выполни /compact

Теперь агент будет:

  1. Проверять свою память перед каждым действием (не переспрашивать одно и то же)
  2. Записывать решения с пометкой для последующей курации
  3. Еженедельно наводить порядок в MEMORY.md
  4. Следить за размером контекста и сжимать его при необходимости

Автоматическая курация через cron

Добавьте cron-задачу в openclaw.json:

{
  "cron": [
    {
      "name": "memory-cleanup",
      "schedule": "0 21 * * 0",
      "prompt": "Просмотри daily notes (memory/) за последнюю неделю. Перенеси устойчивые решения и факты в MEMORY.md. Удали дубликаты и устаревшее из MEMORY.md. Отправь мне краткий отчёт: что добавлено, что удалено.",
      "agent": "default",
      "channel": "telegram"
    }
  ]
}

Каждое воскресенье в 21:00 агент сам наводит порядок и присылает отчёт.

flowchart LR
    DN["Daily Notes\n(за неделю)"] -->|"cron: воскресенье"| AG["Агент курирует"]
    AG -->|"Устойчивые факты"| MEM["MEMORY.md"]
    AG -->|"Удалено устаревшее"| DEL["Очистка"]
    AG -->|"Отчёт"| TG["Telegram"]
    style DN fill:#dbeafe,stroke:#2563eb
    style AG fill:#eef2ff,stroke:#4f46e5
    style MEM fill:#dcfce7,stroke:#16a34a
    style DEL fill:#fee2e2,stroke:#dc2626
    style TG fill:#f8fafc,stroke:#1e293b

Ограничьте поиск в группах

В группе агент не должен показывать личные заметки. QMD scope ограничивает поиск по памяти только личными чатами:

{
  "memory": {
    "qmd": {
      "scope": {
        "default": "deny",
        "rules": [
          { "action": "allow", "match": { "chatType": "direct" } }
        ]
      }
    }
  }
}

3. Git backup для workspace

Workspace — это память вашего агента. Потерять её — всё равно что потерять записную книжку за полгода. Поставьте под git:

cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md MEMORY.md memory/
git commit -m "Initial workspace"

Регулярно:

git add . && git commit -m "Update memory" && git push

Не коммитьте: API-ключи, OAuth-токены, файлы из ~/.openclaw/credentials/.

4. Для мультиагентных систем: изоляция

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


Продвинутое: Mem0

Если хотите автоматическое управление памятью, есть плагин Mem0. Он сам решает, что запоминать:

  • Auto-Recall — перед ответом ищет релевантные воспоминания и подгружает в контекст
  • Auto-Capture — после ответа определяет новые факты, сохраняет их, обновляет устаревшие

Установка:

openclaw plugins install @mem0/openclaw-mem0

Конфигурация:

{
  "plugins": {
    "slots": {
      "memory": "@mem0/openclaw-mem0"
    }
  }
}

Mem0 добавляет агенту дополнительные инструменты: memory_store, memory_list с разделением на краткосрочную и долгосрочную память.


Практическое задание

  1. Посмотрите содержимое вашего workspace: ls ~/.openclaw/workspace/default/
  2. Проверьте размер bootstrap-файлов: wc -l ~/.openclaw/workspace/default/*.md
  3. Если SOUL.md больше 100 строк — сократите до 50-70 (каждая строка стоит токенов)
  4. Создайте MEMORY.md с базовой информацией о себе и проектах
  5. Добавьте правило про память в AGENTS.md
  6. Настройте compaction: дешёвая модель + memory flush
  7. Настройте session maintenance: pruneAfter: "7d", idleMinutes: 120
  8. Попросите агента: «Запиши в заметки, что я предпочитаю отчёты в формате таблиц»
  9. Проверьте, появился ли файл memory/YYYY-MM-DD.md с записью

Главное

  • Контекст LLM — временный буфер, файлы на диске — настоящая память
  • SOUL.md, AGENTS.md, USER.md загружаются каждое сообщение — держите их короткими
  • Daily Notes — автоматический лог дня, загружаются сегодня + вчера
  • MEMORY.md — курированные факты, обновляйте и чистите регулярно
  • Memory flush перед compaction — критичен, иначе агент теряет контекст
  • Перед /new просите агента записать важное вручную (баг: flush не срабатывает)
  • Семантический поиск находит информацию в архивных daily notes
  • Git backup для workspace — защита от потери памяти
Скачать урок

Есть идея или нашли ошибку?

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.