Урок 5. Память бота
Содержание
- Про что этот урок
- Как устроена память
- MEMORY.md — долгосрочная память
- Дневные заметки
- Поиск по памяти
- Поиск по умолчанию
- Семантический поиск
- Как включить
- Сколько стоит
- Тонкая настройка
- Active Memory
- Компакция
- Session Pruning
- Сессии
- Изоляция
- Автоочистка
- Бэкенды памяти
- Полезные команды
- Если что-то пошло не так
- Что дальше
Бот работает, отвечает, выполняет команды. Но каждый новый диалог начинается с чистого листа — бот не помнит, о чём вы говорили вчера. В этом уроке разберёмся, как устроена память OpenClaw: где бот хранит знания, как ищет в них нужное и что делать, чтобы важная информация не терялась.
Для большинства случаев хватает стандартных настроек. Память работает из коробки — бот записывает заметки в файлы и читает их при каждом диалоге. Единственное, что желательно стоит настроить — векторный поиск (описано ниже). Всё остальное в этом уроке — для понимания, как система устроена, и для тонкой настройки, когда понадобится.
Как устроена память
У бота нет скрытого хранилища. Всё, что он помнит — записано в обычных Markdown-файлах в рабочей директории агента (~/.openclaw/workspace). Не записал — не помнит.
Три типа файлов:
MEMORY.md — долгосрочная память
Главный файл. Сюда попадают устойчивые факты: твои предпочтения, принятые решения, важные детали проектов. Файл подгружается при каждом новом диалоге.
Чтобы бот что-то запомнил, достаточно написать ему:
Запомни, что я предпочитаю деплоить на Timeweb и использую GPT для генерации кода.
Бот сам запишет это в MEMORY.md в подходящем формате. Файл можно редактировать и вручную — это обычный Markdown.
Дневные заметки
Файлы вида memory/2026-04-02.md — рабочие заметки за конкретный день. Сюда бот записывает текущий контекст: над чем работали, какие задачи решали, промежуточные результаты. Автоматически подгружаются заметки за сегодня и вчера.
Дневные заметки удобны тем, что со временем формируют историю работы. Если через неделю спросишь бота «что мы делали в прошлый понедельник» — он найдёт ответ через поиск по памяти.
DREAMS.md — дневник сновидений (экспериментально)
Необязательный файл. Появляется, если включить функцию Dreaming — фоновую консолидацию памяти.
Проблема, которую решает Dreaming: со временем в дневных заметках накапливается много информации, но не вся она попадает в MEMORY.md. Что-то ты забыл попросить бота запомнить, что-то не показалось важным в моменте, но оказалось нужным через месяц. Dreaming автоматически просматривает краткосрочные заметки, оценивает их важность и переносит самые ценные в MEMORY.md.
Процесс работает в три фазы: Light — сортирует и отбирает кандидатов из дневных заметок. REM — выделяет повторяющиеся темы и паттерны. Deep — оценивает кандидатов по шести сигналам (частота, релевантность, разнообразие запросов, свежесть, повторяемость, концептуальная насыщенность) и переносит прошедших порог в MEMORY.md. Весь процесс записывается в DREAMS.md для твоего контроля — можно открыть и посмотреть, что бот решил запомнить и почему.
По умолчанию sweep запускается раз в сутки в 3:00 ночи.
Как включить. Через терминал:
openclaw config set plugins.entries.memory-core.config.dreaming.enabled true --strict-json
openclaw gateway restart
Этой одной команды достаточно. Остальные параметры встанут по умолчанию: sweep запускается по крону 0 3 * * * (каждый день в 3:00 ночи), пороги промоушна и веса сигналов — внутренние детали реализации, настраивать их не нужно.
Через чат:
/dreaming on
Через конфиг openclaw.json:
{
plugins: {
entries: {
"memory-core": {
config: {
dreaming: {
enabled: true
}
}
}
}
}
}
Проверить статус — /dreaming status в чате или openclaw memory status --deep в терминале. Посмотреть, что будет промотировано, без реального применения:
openclaw memory promote # предпросмотр кандидатов
openclaw memory promote --apply # применить промоушн вручную
openclaw memory promote-explain "запрос" # объяснить, почему кандидат прошёл/не прошёл порог
openclaw memory rem-harness # предпросмотр REM-рефлексий и кандидатов на промоушн
Grounded backfill — воспроизведение старых заметок. Если Dreaming включили, когда у бота уже накопились старые дневные заметки, можно «проиграть» их через dreaming-систему. Grounded backfill читает исторические memory/YYYY-MM-DD.md, оценивает что из них достойно долгосрочной памяти и записывает структурированный обзор в DREAMS.md. Кандидаты помещаются в тот же short-term store, что использует обычный deep phase — финальное решение о промоушне остаётся за ним:
openclaw memory rem-backfill --path ./memory --stage-short-term # проиграть старые заметки
openclaw memory rem-backfill --rollback # откатить, если результат не устроил
openclaw memory rem-backfill --rollback-short-term # откатить только staged-кандидатов
Dreams UI. Если используешь веб-интерфейс Gateway, там появляется вкладка Dreams с состоянием Dreaming: текущие фазы, количество short-term и promoted кандидатов, время следующего sweep, а также встроенный ридер Dream Diary. Отдельная полоса для grounded-записей позволяет видеть, какие staged-кандидаты пришли из исторического воспроизведения.
Для старта Dreaming не обязателен — бот и так записывает важное в MEMORY.md по твоей просьбе или при компакции. Но если бот работает активно каждый день, Dreaming поможет не терять контекст, который иначе остался бы только в дневных заметках. Подробности — в документации.
Поиск по памяти
Когда заметок становится много, простое чтение файлов не помогает — нужен поиск. Бот использует два инструмента:
memory_search — находит релевантные заметки. Можно настроить поиск по смыслу (семантический) или только по ключевым словам.
memory_get — читает конкретный файл или диапазон строк. Когда бот уже знает, где лежит нужная информация.
Поиск по умолчанию (только ключевые слова)
Если не настроен embedding-провайдер, OpenClaw использует только keyword-поиск на основе BM25 — полнотекстовый индекс в SQLite. Он ищет точные совпадения слов и их формы.
Примечание: если у тебя уже прописан API-ключ OpenAI, Gemini, Voyage или Mistral (например, для чат-модели) — векторный поиск подхватится автоматически. OpenClaw определяет провайдер по доступным ключам.
Что это значит на практике: запрос «Docker» найдёт запись со словом «Docker», запрос «настройка сервера» найдёт «настройка сервера». Но запрос «как настраивал сервер» не найдёт запись про «деплой на VPS». «connection timeout» не найдёт «таймаут подключения». «С кем работал над проектом» не найдёт «коллега Андрей».
Чем больше накапливается заметок — тем острее эта проблема: бот не может вспомнить то, что знает, если запрос сформулирован иначе.
Проверить текущий статус поиска:
openclaw memory status
Если видишь сообщение no embedding provider is ready — значит работает только keyword-поиск.
Семантический (векторный) поиск
С embedding-провайдером подключается гибридный поиск: BM25 (точные слова) + векторный (смысл) одновременно. По умолчанию вес семантики — 70%, ключевых слов — 30%.
Что меняется: «как настраивал сервер» находит «деплой на VPS через Docker». «connection timeout» находит «таймаут подключения». Синонимы, перефразировки, разные языки — всё работает. При этом точные запросы (ID, имена конфигов, строки ошибок) по-прежнему находятся через BM25.
Как это работает под капотом. Embedding-модель — отдельная нейросеть, которая превращает текст в вектор из сотен чисел, кодирующих смысл. «Деплой на VPS через Docker» и «настройка сервера» дадут похожие векторы, а «рецепт борща» — совсем другой. Модель запускается при сохранении заметки (индексирование) и при каждом поиске.
Когда ты задаёшь вопрос, основной LLM (GPT, GLM) решает вызвать memory_search, embedding-модель превращает запрос в вектор, SQLite ищет похожие векторы + BM25, возвращает релевантные сниппеты, и LLM включает их в ответ.
Как включить векторный поиск
Для векторного поиска нужен API-ключ embedding-провайдера. Самый простой вариант — OpenAI.
Где взять ключ OpenAI:
Напрямую на platform.openai.com — если есть зарубежная карта. Или у посредников на plati.market — ключ работает из России.
Самый быстрый и удобный способ настроить — попросить бота. Напиши ему в Telegram:
Документация: https://docs.openclaw.ai
Настрой векторный поиск, вот ключ sk-...
Бот сам прочитает документацию, пропишет ключ в конфиг и перезапустит gateway.
| Провайдер | Автоопределение | Примечание |
|---|---|---|
| Local | Да (приоритет №1) | GGUF-модель, ~0.6 ГБ при первом запуске, полностью офлайн |
| OpenAI | Да | По умолчанию text-embedding-3-small |
| Gemini | Да | Поддерживает мультимодальные эмбеддинги (изображения, аудио) |
| Voyage | Да | |
| Mistral | Да | |
| Bedrock | Да | AWS-нативный, не нужен API-ключ — использует стандартную цепочку AWS-аутентификации (IAM-роль, SSO, access keys) |
| Ollama | Нет | Локальный, указывать явно |
Порядок в таблице — это порядок автоопределения: OpenClaw выбирает первый провайдер, для которого доступен ключ или модель. Если хочешь использовать конкретный — укажи его явно через memorySearch.provider.
Вариант без облака — provider: "local". Скачается GGUF-модель, всё работает офлайн и бесплатно. Но на слабых VPS (2 CPU / 4 GB RAM) индексация будет медленной. Для таких серверов лучше облачный провайдер.
Fallback-провайдер. Можно указать запасной провайдер эмбеддингов на случай, если основной упадёт (исчерпан лимит, сетевая ошибка). Без fallback бот временно останется без векторного поиска:
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
fallback: "gemini" // переключится на Gemini, если OpenAI недоступен
}
}
}
}
Что если эмбеддинги вообще не настроены. Бот не сломается — поиск будет работать в деградированном режиме. Вместо чистого BM25 OpenClaw применяет лексическое ранжирование с бустом по покрытию терминов запроса и релевантности файловых путей. Это лучше, чем ничего, но хуже полноценного гибридного поиска.
Сколько стоит векторный поиск
Embedding-модели на порядки дешевле чат-моделей. OpenAI text-embedding-3-small стоит $0.02 за 1 млн токенов.
На практике: проиндексировать всю память (100 заметок, ~40 000 токенов) — меньше 0.1 рубля. Тысяча поисковых запросов в день — около 0.03 рубля. Для сравнения: один обычный разговор с GPT стоит в сотни раз больше. Это не та статья расходов, о которой стоит думать.
Тонкая настройка поиска
Когда заметок накопится много (сотни файлов за несколько месяцев), стандартный поиск может возвращать устаревшие или дублирующиеся результаты. Две опции помогут:
Temporal Decay (затухание по времени) — старые заметки постепенно теряют вес в результатах. С дефолтным периодом полураспада 30 дней запись месячной давности получит 50% от своего исходного веса. При этом «вечнозелёные» файлы вроде MEMORY.md не затухают никогда.
MMR (разнообразие результатов) — если пять заметок описывают одну и ту же настройку роутера, MMR выберет разные темы вместо пяти копий одного и того же.
Включить обе опции (документация):
{
agents: {
defaults: {
memorySearch: {
query: {
hybrid: {
mmr: { enabled: true },
temporalDecay: { enabled: true }
}
}
}
}
}
}
Мультимодальная память. Если используешь Gemini Embedding 2, можно индексировать изображения и аудиофайлы наряду с Markdown. Поисковые запросы остаются текстовыми, но находят совпадения по визуальному и аудиоконтенту. Подробности — в справочнике конфигурации.
Индексация файлов за пределами workspace. Встроенный бэкенд поддерживает extraPaths — можно добавить в поиск Markdown-файлы из любых директорий (проектная документация, заметки команды) без установки QMD:
{
agents: {
defaults: {
memorySearch: {
extraPaths: ["~/notes", "/srv/project-docs"]
}
}
}
}
Пути могут быть абсолютными или относительными к workspace. Директории сканируются рекурсивно для .md файлов (документация).
Поиск по истории сессий. Экспериментальная фича — можно индексировать транскрипты прошлых разговоров, чтобы memory_search находил информацию из старых диалогов, даже если она не была сохранена в файлы памяти:
{
agents: {
defaults: {
memorySearch: {
experimental: { sessionMemory: true },
sources: ["memory", "sessions"]
}
}
}
}
Индексация сессий работает асинхронно — результаты могут немного отставать от текущего состояния (документация).
Active Memory — проактивный поиск по памяти
По умолчанию бот ищет в памяти только когда сам решит вызвать memory_search — или когда ты попросишь. Active Memory меняет это: перед каждым ответом запускается небольшой подагент, который сам ищет в памяти релевантную информацию и тихо подкладывает её в контекст основной модели. Бот начинает «вспоминать» твои предпочтения, привычки и контекст без явных запросов.
Когда это полезно: бот общается с тобой каждый день и накопил достаточно памяти. Без Active Memory бот может «забыть» спросить у памяти, что ты предпочитаешь TypeScript или что в прошлый раз ты деплоил на Timeweb. С Active Memory — эти факты всплывут автоматически, если они релевантны.
Как включить:
openclaw config set plugins.entries.active-memory.enabled true --strict-json
openclaw config set plugins.entries.active-memory.config.enabled true --strict-json
openclaw config set plugins.entries.active-memory.config.agents '["main"]' --strict-json
openclaw config set plugins.entries.active-memory.config.allowedChatTypes '["direct"]' --strict-json
openclaw config set plugins.entries.active-memory.config.queryMode '"recent"' --strict-json
openclaw config set plugins.entries.active-memory.config.promptStyle '"balanced"' --strict-json
openclaw config set plugins.entries.active-memory.config.timeoutMs 15000 --strict-json
openclaw gateway restart
Или через конфиг openclaw.json:
{
plugins: {
entries: {
"active-memory": {
enabled: true,
config: {
enabled: true,
agents: ["main"],
allowedChatTypes: ["direct"],
queryMode: "recent",
promptStyle: "balanced",
timeoutMs: 15000,
maxSummaryChars: 220,
persistTranscripts: false
}
}
}
}
}
Что значат параметры: agents: ["main"] — включает Active Memory только для основного агента. allowedChatTypes: ["direct"] — работает только в личных сообщениях (не в группах). queryMode: "recent" — подагент видит последнее сообщение + несколько предыдущих реплик для контекста. promptStyle: "balanced" — сбалансированный режим между точностью и полнотой. timeoutMs: 15000 — если подагент не нашёл ничего за 15 секунд, основной ответ идёт без обогащения.
Три режима запроса (queryMode): message — только последнее сообщение, самый быстрый. recent (рекомендуемый) — последнее сообщение + хвост диалога, хороший баланс. full — весь разговор, максимальное качество, но медленнее.
Управление в чате: /active-memory status, /active-memory off, /active-memory on. Для отладки — /verbose on покажет строку статуса Active Memory после каждого ответа, /trace on покажет, что именно подагент нашёл в памяти.
Active Memory не обязателен для старта. Подключай его, когда бот уже накопил память и ты хочешь, чтобы он использовал её более естественно. Подробности — в документации Active Memory.
Компакция — что происходит с длинными диалогами
У каждой модели есть контекстное окно — максимум токенов, которые она может обработать за раз. Когда диалог приближается к этому лимиту, OpenClaw компактит старые сообщения — сжимает их в краткую сводку.
Как это работает: старые сообщения заменяются кратким саммари, недавние остаются нетронутыми. Полная история при этом сохраняется на диске — компакция меняет только то, что видит модель в текущий момент.
Важный момент: перед компакцией бот автоматически сохраняет важные факты из разговора в файлы памяти. Это происходит без твоего участия — OpenClaw запускает скрытый «flush» перед тем, как сжать контекст. Поэтому ничего критичного не теряется.
Ещё один нюанс: если модель вернёт ошибку переполнения контекста (context-overflow), OpenClaw автоматически скомпактит диалог и повторит запрос. Ты даже не заметишь, что это произошло (документация).
Если хочешь запустить компакцию вручную — напиши /compact в чате. Можно с подсказкой:
/compact Сохрани детали по настройке API
По умолчанию компакция использует основную модель агента. Можно указать другую — например, более дешёвую для экономии или более сильную для качественных саммари. Учитывай: плохое сжатие = потеря контекста, поэтому слишком слабая модель может навредить.
{
agents: {
defaults: {
compaction: {
model: "openrouter/openai/gpt-4.1-mini" // дешевле, но качество саммари может быть ниже
}
}
}
}
Чтобы видеть, когда бот компактит контекст, включи уведомления:
{
agents: {
defaults: {
compaction: {
notifyUser: true // покажет "Compacting context..." в чате
}
}
}
}
Подробности — в документации по компакции.
Session Pruning — обрезка вывода инструментов
Pruning — более лёгкий механизм экономии контекста. Он не сжимает разговор, а обрезает старые результаты инструментов (вывод команд, содержимое файлов, результаты поиска), которые раздувают контекстное окно.
Для некоторых провайдеров (например, при работе через OpenRouter) pruning помогает оптимизировать кэш промптов и снизить стоимость. Включить вручную:
{
agents: {
defaults: {
contextPruning: {
mode: "cache-ttl",
ttl: "5m"
}
}
}
}
Pruning работает только в оперативной памяти — на диске полная история сохраняется. Он дополняет компакцию: pruning убирает мусор из результатов инструментов между циклами компакции (документация).
Сессии
Каждый разговор в OpenClaw — это сессия. Сообщения маршрутизируются в сессии по источнику: личные сообщения идут в одну сессию, каждый групповой чат — в свою, cron-задачи — в отдельные.
По умолчанию сессия сбрасывается раз в сутки (в 4:00 утра). Можно настроить сброс по неактивности — например, новая сессия после 30 минут молчания:
{
session: {
reset: {
idleMinutes: 30
}
}
}
Чтобы начать новую сессию вручную — напиши /new (или /reset) в чате. /new gpt-5.4 заодно переключит модель.
ОЧЕНЬ ВАЖНО: возьми за правило — новая задача начинается с
/new. Обсуждал настройку сервера и теперь хочешь попросить бота написать текст — сначала/new. Иначе бот потащит в контекст весь предыдущий разговор, потратит токены впустую и может запутаться. Это самый простой способ экономить и получать точные ответы.
Изоляция в многопользовательском режиме
Если с ботом общается несколько человек — настрой изоляцию сессий. Без неё все личные сообщения попадают в одну сессию: Алиса увидит, что писал Боб.
{
session: {
dmScope: "per-channel-peer"
}
}
per-channel-peer — рекомендуемый режим: сессия изолирована по каналу и отправителю. Каждый пользователь в каждом канале получает свою отдельную сессию.
Если один и тот же человек пишет боту из нескольких каналов (например, Telegram и Discord) и нужно, чтобы они делили одну сессию — используй session.identityLinks для объединения идентичностей (документация).
Проверить настройки безопасности:
openclaw security audit
Автоочистка старых сессий
Со временем на диске накапливаются файлы транскриптов (.jsonl). На VPS с ограниченным диском это может стать проблемой. OpenClaw умеет автоматически чистить старые сессии:
{
session: {
maintenance: {
mode: "enforce", // "warn" (по умолчанию) только предупреждает
pruneAfter: "30d", // удалять сессии старше 30 дней
maxEntries: 500 // максимум записей в хранилище
}
}
}
Перед включением можно проверить, что будет удалено:
openclaw sessions cleanup --dry-run
Подробности — в документации по сессиям.
Бэкенды памяти
OpenClaw поддерживает три бэкенда. Для большинства задач хватает встроенного.
Builtin (по умолчанию)
SQLite-база с полнотекстовым индексом и векторным поиском. Работает сразу после установки, ничего дополнительного ставить не нужно.
Индекс хранится в ~/.openclaw/memory/<agentId>.sqlite. Файлы памяти отслеживаются автоматически — при изменении индекс обновляется за пару секунд.
Для подавляющего большинства случаев этого бэкенда достаточно. Подробности — в документации Builtin Engine.
QMD — продвинутый локальный поиск
Локальный поисковый движок с реранкингом и расширением запросов. Работает как sidecar-процесс рядом с OpenClaw.
Когда стоит рассмотреть: если у тебя большой объём заметок и встроенный поиск не справляется с качеством, если нужно индексировать файлы за пределами workspace (например, проектную документацию) или хочешь искать по истории прошлых сессий.
Установка:
bun install -g @tobilu/qmd
Включение в конфиге:
{
memory: {
backend: "qmd"
}
}
QMD при первом запуске скачивает GGUF-модели (~2 ГБ) для реранкинга. Первый поиск будет медленным — дальше всё работает быстро. Если QMD по какой-то причине упадёт, OpenClaw автоматически переключится на встроенный бэкенд. Подробности — в документации QMD.
Honcho — кросс-сессионная AI-память
Плагин, который сохраняет контекст между сессиями и строит профиль пользователя. Обычная память OpenClaw работает через файлы — Honcho добавляет поверх неё AI-слой, который автоматически запоминает разговоры и формирует модель пользователя (предпочтения, стиль общения, контекст работы).
Когда это полезно: бот регулярно общается с несколькими людьми и нужно, чтобы он помнил контекст каждого без ручных записей в MEMORY.md.
Установка:
openclaw plugins install @honcho-ai/openclaw-honcho
openclaw honcho setup
openclaw gateway --force
honcho setup спросит API-ключ (или адрес self-hosted сервера) и предложит мигрировать существующие файлы памяти. Миграция не удаляет оригиналы — файлы копируются в Honcho.
Honcho и встроенная память работают вместе — Honcho добавляет свои инструменты поверх стандартных memory_search и memory_get. Подробности — в документации Honcho.
Memory Wiki — структурированная база знаний
Встроенный плагин, который компилирует содержимое памяти в wiki-формат. Обычная память — это куча Markdown-заметок. Memory Wiki превращает их в организованную базу знаний со страницами, утверждениями (claims), источниками, уровнем уверенности и автоматическими дашбордами.
Зачем это нужно: бот за месяцы работы накапливает сотни фактов в MEMORY.md и дневных заметках. Со временем там появляются противоречия, устаревшая информация, дубликаты. Memory Wiki структурирует всё это: каждое утверждение привязано к источнику, имеет уровень уверенности, отслеживаются противоречия и открытые вопросы.
Три режима работы: bridge (рекомендуемый) — автоматически импортирует данные из основной памяти: дневные заметки, MEMORY.md, отчёты Dreaming. Wiki сама подтягивает всё, что бот уже знает. isolated — своя отдельная база знаний, не зависит от основной памяти, наполняется вручную или через ингест документов. unsafe-local — доступ к произвольным файлам на диске (экспериментальный).
Как включить в режиме bridge. Рабочий набор команд для терминала:
openclaw config set plugins.entries.memory-wiki.enabled true --strict-json
openclaw config set plugins.entries.memory-wiki.config.vaultMode '"bridge"' --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.enabled true --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.readMemoryArtifacts false --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.indexDailyNotes true --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.indexMemoryRoot true --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.indexDreamReports true --strict-json
openclaw config set plugins.entries.memory-wiki.config.bridge.followMemoryEvents true --strict-json
openclaw wiki init
openclaw wiki bridge import # первичный импорт из основной памяти
openclaw wiki compile
openclaw gateway restart
openclaw wiki doctor # проверить здоровье vault
Что тут происходит: vaultMode: "bridge" переключает wiki на режим моста с основной памятью. Флаги indexMemoryRoot, indexDailyNotes, indexDreamReports, followMemoryEvents говорят bridge'у, что именно импортировать — MEMORY.md, дневные заметки, DREAMS.md и лог событий памяти. wiki init создаёт vault в ~/.openclaw/wiki/main, wiki bridge import делает первичный импорт, wiki compile собирает дашборды и компилированные индексы, wiki doctor в конце проверяет, что всё ок.
Почему readMemoryArtifacts: false. Это отдельный канал импорта через SDK-ручку publicArtifacts.listArtifacts, через которую memory-плагин может экспонировать структурированные артефакты для других плагинов. Встроенный memory-core этот канал не реализует — он работает через файлы. Если оставить флаг включённым, wiki doctor будет выдавать предупреждение Bridge mode is enabled but the active memory plugin is not exporting any public memory artifacts yet. Это не ошибка, но раздражает. Поэтому флаг выключаем — остальные каналы bridge (indexMemoryRoot, indexDailyNotes, indexDreamReports, followMemoryEvents) работают независимо и читают файлы напрямую.
Чтобы bridge было что импортировать, у бота должны уже существовать эти файлы. Если ты только что настроил память и MEMORY.md пустой — wiki тоже будет пустой. Поработай с ботом несколько дней, попроси его записать что-то в память, потом снова запусти openclaw wiki bridge import.
Полный конфиг в openclaw.json для справки:
{
plugins: {
entries: {
"memory-wiki": {
enabled: true,
config: {
vaultMode: "bridge",
bridge: {
enabled: true,
readMemoryArtifacts: false,
indexDreamReports: true,
indexDailyNotes: true,
indexMemoryRoot: true,
followMemoryEvents: true
},
render: {
createDashboards: true
}
}
}
}
}
}
Если хочется оформить vault под Obsidian — добавь блок vault: { renderMode: "obsidian" }, тогда страницы пойдут с бэклинками и Obsidian-friendly Markdown.
Альтернатива — режим isolated. Если нужна отдельная курируемая база знаний, не связанная с основной памятью, используй vaultMode: "isolated" (это дефолт, если ничего не указывать). Важно понимать: в isolated vault стартует пустым и сам не наполняется. Страницы нужно создавать вручную — через wiki_apply, openclaw wiki ingest <файл> или просьбами к боту. Это режим для тех случаев, когда wiki — отдельный проект, не зеркало памяти.
После включения бот получает инструменты wiki_search, wiki_get, wiki_apply и wiki_lint. Можно искать по wiki отдельно или вместе с основной памятью через memory_search corpus=all.
Дашборды генерируются автоматически в папке reports/: открытые вопросы, противоречия, утверждения с низкой уверенностью, устаревшие страницы.
Wiki поддерживает Obsidian — если указать renderMode: "obsidian", страницы будут оформлены под Obsidian с бэклинками.
CLI-команды:
openclaw wiki status # состояние vault
openclaw wiki compile # скомпилировать wiki
openclaw wiki lint # проверить структуру и противоречия
openclaw wiki search "запрос" # поиск по wiki
openclaw wiki bridge import # импорт из основной памяти (bridge mode)
Memory Wiki — инструмент для продвинутого использования. Если бот работает несколько месяцев и накопил много знаний, wiki поможет держать их в порядке. Для старта не нужен. Подробности — в документации Memory Wiki.
Полезные команды
В чате:
| Команда | Что делает |
|---|---|
/compact |
Принудительная компакция диалога |
/compact <подсказка> |
Компакция с указанием, что сохранить |
/new |
Начать новую сессию |
/new <модель> |
Новая сессия с другой моделью |
/reset |
Начать новую сессию (алиас /new) |
/status |
Использование контекста, модель, состояние |
/context list |
Что входит в системный промпт |
/dreaming on |
Включить Dreaming |
/dreaming off |
Выключить Dreaming |
/dreaming status |
Статус Dreaming |
/dreaming help |
Справка по командам Dreaming |
/active-memory on |
Включить Active Memory для текущей сессии |
/active-memory off |
Выключить Active Memory для текущей сессии |
/active-memory status |
Статус Active Memory |
/verbose on |
Расширенная диагностика (включая строку Active Memory) |
/trace on |
Показать, что Active Memory нашёл в памяти |
В терминале:
openclaw memory status # Статус индекса и провайдера
openclaw memory status --deep # Детальная диагностика (провайдер, модель, индекс)
openclaw memory status --fix # Починить устаревшие артефакты recall/promotion
openclaw memory search "запрос" # Поиск по памяти из консоли
openclaw memory index --force # Пересобрать индекс
openclaw memory promote # Предпросмотр кандидатов на промоушн (Dreaming)
openclaw memory promote --apply # Применить промоушн вручную
openclaw memory promote-explain "запрос" # Объяснить, почему кандидат прошёл/не прошёл порог
openclaw memory rem-harness # Предпросмотр REM-рефлексий без записи
openclaw security audit # Проверка безопасности (включая изоляцию сессий)
openclaw sessions cleanup --dry-run # Предпросмотр очистки старых сессий
openclaw wiki status # Статус Memory Wiki
openclaw wiki doctor # Проверка здоровья wiki vault
openclaw wiki lint # Проверка структуры и противоречий wiki
Если что-то пошло не так
Поиск по памяти не работает / no embedding provider is ready. Запусти openclaw memory status --deep. Если провайдер не определён — убедись, что API-ключ OpenAI (или другого провайдера) доступен боту. Настрой провайдер явно через memorySearch.provider в конфиге. Без провайдера работает только keyword-поиск (BM25).
Бот забывает то, что ему говорили. Проверь, записал ли он информацию в файлы. Открой ~/.openclaw/workspace/MEMORY.md — если пусто, бот не сохранял. Попроси его явно: «Запомни, что ...».
Результаты поиска устарели. Пересобери индекс: openclaw memory index --force. Автоматическое обновление иногда пропускает изменения. Если подозреваешь повреждённый recall/promotion state — попробуй openclaw memory status --fix.
Компакция происходит слишком часто. Контекстное окно модели может быть маленьким, или инструменты генерируют большие ответы. Попробуй модель с большим контекстом или включи session pruning для обрезки вывода инструментов.
Несколько пользователей видят чужие сообщения. Настрой изоляцию сессий: session.dmScope: "per-channel-peer". Проверь через openclaw security audit.
Диск на VPS заполняется транскриптами. Включи автоочистку сессий через session.maintenance.mode: "enforce".
Что дальше
Бот запоминает контекст и находит нужное в заметках. В следующем уроке:
- Настроим Telegram для удобной работы с ботом
- Настроим браузер для бота
- Научимся чинить и оптимизировать бота для стабильной работы
Если что-то не получается или есть вопросы — заходи в телеграм-канал курса. Там помогут разобраться.
Обсуждение