Быстрый старт
Вставьте это вopenclaw.json для настройки с безопасными значениями по умолчанию — Plugin включен, ограничен
агентом main, только сеансы личных сообщений, наследует модель сеанса,
когда она доступна:
plugins.entries.active-memory.enabled: trueвключает Pluginconfig.agents: ["main"]подключает к Active Memory только агентаmainconfig.allowedChatTypes: ["direct"]ограничивает это сеансами личных сообщений (явно подключайте группы/каналы)config.model(необязательно) закрепляет выделенную модель для извлечения воспоминаний; если не задано, наследуется текущая модель сеансаconfig.modelFallbackиспользуется только когда не удается определить ни явную, ни наследованную модельconfig.promptStyle: "balanced"— значение по умолчанию для режимаrecent- Active Memory все равно запускается только для подходящих интерактивных постоянных чат-сеансов
Рекомендации по скорости
Самая простая настройка — оставитьconfig.model незаданным и позволить Active Memory использовать
ту же модель, которую вы уже используете для обычных ответов. Это самое безопасное значение по умолчанию,
потому что оно следует вашим существующим предпочтениям провайдера, авторизации и модели.
Если вы хотите, чтобы Active Memory ощущалась быстрее, используйте выделенную инференс-модель
вместо заимствования основной чат-модели. Качество извлечения важно, но задержка
важнее, чем на основном пути ответа, а поверхность инструментов Active Memory
узкая (она вызывает только доступные инструменты извлечения из памяти).
Хорошие варианты быстрых моделей:
cerebras/gpt-oss-120bдля выделенной модели извлечения с низкой задержкойgoogle/gemini-3-flashкак резервная модель с низкой задержкой без изменения основной чат-модели- ваша обычная модель сеанса, если оставить
config.modelнезаданным
Настройка Cerebras
Добавьте провайдера Cerebras и направьте на него Active Memory:chat/completions для
выбранной модели — видимость в /v1/models сама по себе этого не гарантирует.
Как это увидеть
Active Memory внедряет скрытый недоверенный префикс промпта для модели. Он не показывает необработанные теги<active_memory_plugin>...</active_memory_plugin> в
обычном ответе, видимом клиенту.
Переключатель сеанса
Используйте команду Plugin, когда нужно приостановить или возобновить Active Memory для текущего чат-сеанса без редактирования конфигурации:plugins.entries.active-memory.enabled, выбор агентов или другую глобальную
конфигурацию.
Если вы хотите, чтобы команда записывала конфигурацию и приостанавливала или возобновляла Active Memory для
всех сеансов, используйте явную глобальную форму:
plugins.entries.active-memory.config.enabled. Она оставляет
plugins.entries.active-memory.enabled включенным, чтобы команда оставалась доступной для
повторного включения Active Memory позже.
Если вы хотите увидеть, что делает Active Memory в живом сеансе, включите
переключатели сеанса, соответствующие нужному выводу:
- строку состояния Active Memory, например
Active Memory: status=ok elapsed=842ms query=recent summary=34 chars, при/verbose on - читаемую отладочную сводку, например
Active Memory Debug: Lemon pepper wings with blue cheese., при/trace on
/trace raw, отслеживаемый блок Model Input (User Role) покажет
скрытый префикс Active Memory как:
Когда это запускается
Active Memory использует два фильтра:- Явное включение в конфигурации
Plugin должен быть включен, а идентификатор текущего агента должен присутствовать в
plugins.entries.active-memory.config.agents. - Строгая пригодность во время выполнения Даже когда Active Memory включена и нацелена на агента, она запускается только для подходящих интерактивных постоянных чат-сеансов.
Типы сеансов
config.allowedChatTypes управляет тем, в каких видах разговоров вообще может запускаться Active
Memory.
Значение по умолчанию:
config.allowedChatIds и
config.deniedChatIds после выбора разрешенных типов сеансов.
allowedChatIds — явный список разрешенных идентификаторов разрешенных разговоров. Когда он
не пуст, Active Memory запускается только тогда, когда идентификатор разговора сеанса находится в
этом списке. Это одновременно сужает каждый разрешенный тип чата, включая личные
сообщения. Если вы хотите все личные сообщения плюс только конкретные группы, включите
идентификаторы прямых собеседников в allowedChatIds или оставьте allowedChatTypes сфокусированным на
развертывании для групп/каналов, которое вы тестируете.
deniedChatIds — явный список запретов. Он всегда имеет приоритет над
allowedChatTypes и allowedChatIds, поэтому совпадающий разговор пропускается,
даже если его тип сеанса в остальном разрешен.
Идентификаторы берутся из постоянного ключа сеанса канала: например Feishu
chat_id / open_id, идентификатор чата Telegram или идентификатор канала Slack. Сопоставление
не учитывает регистр. Если allowedChatIds не пуст и OpenClaw не может определить
идентификатор разговора для сеанса, Active Memory пропускает ход вместо
угадывания.
Пример:
Где это запускается
Active Memory — это функция обогащения диалога, а не платформенная функция инференса.| Поверхность | Запускает Active Memory? |
|---|---|
| Control UI / постоянные сеансы веб-чата | Да, если Plugin включен и агент выбран |
| Другие интерактивные сеансы каналов на том же постоянном чат-пути | Да, если Plugin включен и агент выбран |
| Автономные одноразовые запуски | Нет |
| Heartbeat/фоновые запуски | Нет |
Универсальные внутренние пути agent-command | Нет |
| Выполнение подагента/внутреннего помощника | Нет |
Зачем это использовать
Используйте Active Memory, когда:- сеанс постоянный и ориентирован на пользователя
- у агента есть содержательная долговременная память для поиска
- непрерывность и персонализация важнее, чем строгая детерминированность промпта
- устойчивых предпочтений
- повторяющихся привычек
- долговременного пользовательского контекста, который должен проявляться естественно
- автоматизации
- внутренних воркеров
- одноразовых API-задач
- мест, где скрытая персонализация будет неожиданной
Как это работает
Форма выполнения: Блокирующий подагент памяти может использовать только настроенные инструменты извлечения из памяти. По умолчанию это:memory_searchmemory_get
plugins.slots.memory равен memory-lancedb, по умолчанию вместо этого используется memory_recall.
Задайте config.toolsAllow, когда другой провайдер памяти предоставляет
другой контракт инструмента извлечения.
Если связь слабая, он должен вернуть NONE.
Режимы запроса
config.queryMode управляет тем, какую часть разговора видит блокирующий подагент памяти.
Выберите самый маленький режим, который все еще хорошо отвечает на уточняющие вопросы;
бюджеты тайм-аута должны расти вместе с размером контекста (message < recent < full).
- message
- recent
- full
Отправляется только последнее сообщение пользователя.Используйте это, когда:
- вам нужно самое быстрое поведение
- вам нужен самый сильный уклон в сторону извлечения устойчивых предпочтений
- уточняющим ходам не нужен контекст разговора
3000 до 5000 мс для config.timeoutMs.Стили промпта
config.promptStyle управляет тем, насколько охотно или строго блокирующий подагент памяти
решает, возвращать ли память.
Доступные стили:
balanced: универсальное значение по умолчанию для режимаrecentstrict: наименее охотный; лучше всего подходит, когда нужно минимизировать проникновение близкого контекстаcontextual: максимально благоприятен для непрерывности; лучше всего подходит, когда история разговора должна иметь большее значениеrecall-heavy: охотнее показывает память при более мягких, но все еще правдоподобных совпаденияхprecision-heavy: агрессивно предпочитаетNONE, если совпадение не очевидноpreference-only: оптимизирован для избранного, привычек, распорядков, вкусов и повторяющихся личных фактов
config.promptStyle не задан:
config.promptStyle, это переопределение имеет приоритет.
Пример:
Политика резервной модели
Еслиconfig.model не задан, Active Memory пытается определить модель в таком порядке:
config.modelFallback управляет шагом с настроенной резервной моделью.
Необязательная пользовательская резервная модель:
config.modelFallbackPolicy сохраняется только как устаревшее поле совместимости
для старых конфигураций. Оно больше не меняет поведение во время выполнения.
Инструменты памяти
По умолчанию Active Memory позволяет блокирующему подагенту recall вызыватьmemory_search и memory_get. Это соответствует встроенному контракту
memory-core. Когда plugins.slots.memory выбирает memory-lancedb, а
config.toolsAllow не задан, Active Memory сохраняет существующее поведение LanceDB
и вместо этого использует memory_recall.
Если вы используете другой Plugin памяти, задайте config.toolsAllow с точными именами
инструментов, которые регистрирует этот Plugin. Active Memory перечисляет эти инструменты
в prompt для recall и передает тот же список встроенному подагенту. Если ни один из
настроенных инструментов недоступен или подагент памяти завершается с ошибкой, Active Memory
пропускает recall для этого хода, а основной ответ продолжается без контекста памяти.
Для пользовательских инструментов recall непустой видимый модели вывод инструмента считается
доказательством recall, если структурированные поля результата явно не сообщают о пустом результате
или сбое.
toolsAllow принимает только конкретные имена инструментов памяти. Подстановочные знаки, записи
group:* и основные инструменты агента, такие как read, exec, message и
web_search, игнорируются до запуска скрытого подагента памяти.
Примечание о поведении по умолчанию: Active Memory больше не включает memory_recall в
список разрешений по умолчанию для memory-core. Существующие настройки memory-lancedb продолжают работать,
когда plugins.slots.memory задан как memory-lancedb. Явный toolsAllow
всегда переопределяет автоматическое значение по умолчанию.
Встроенный memory-core
Настройка по умолчанию не требует явногоtoolsAllow:
Память LanceDB
Встроенный Pluginmemory-lancedb предоставляет memory_recall. Выбора
слота памяти достаточно, чтобы Active Memory использовала этот инструмент recall:
Lossless Claw
Lossless Claw — это Plugin движка контекста со своими инструментами recall. Сначала установите и настройте его как движок контекста; см. Движок контекста. Затем разрешите Active Memory использовать инструменты recall Lossless Claw:lcm_expand в toolsAllow для основного подагента Active Memory.
Lossless Claw использует его как низкоуровневый делегированный инструмент расширения.
Расширенные аварийные выходы
Эти параметры намеренно не входят в рекомендуемую настройку.config.thinking может переопределить уровень thinking блокирующего подагента памяти:
config.promptAppend добавляет дополнительные инструкции оператора после стандартного prompt Active
Memory и перед контекстом разговора:
promptAppend с пользовательским toolsAllow, когда Plugin памяти не из core требует
специфичного для провайдера порядка инструментов или инструкций по формированию запросов.
config.promptOverride заменяет стандартный prompt Active Memory. OpenClaw
все равно добавляет контекст разговора после него:
NONE,
либо компактный контекст пользовательских фактов для основной модели.
Сохранение транскриптов
Запуски блокирующего подагента памяти Active Memory создают настоящий транскриптsession.jsonl
во время вызова блокирующего подагента памяти.
По умолчанию этот транскрипт временный:
- он записывается во временный каталог
- он используется только для запуска блокирующего подагента памяти
- он удаляется сразу после завершения запуска
config.transcriptDir.
Используйте это осторожно:
- транскрипты блокирующего подагента памяти могут быстро накапливаться в активных сессиях
- режим запроса
fullможет дублировать много контекста разговора - эти транскрипты содержат скрытый контекст prompt и восстановленные воспоминания
Конфигурация
Вся конфигурация Active Memory находится в:| Ключ | Тип | Значение |
|---|---|---|
enabled | boolean | Включает сам Plugin |
config.agents | string[] | Идентификаторы агентов, которым разрешено использовать активную память |
config.model | string | Необязательная ссылка на модель блокирующего подагента памяти; если не задана, активная память использует модель текущего сеанса |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | Типы сеансов, в которых может запускаться Active Memory; по умолчанию используются сеансы в стиле личных сообщений |
config.allowedChatIds | string[] | Необязательный список разрешенных разговоров, применяемый после allowedChatTypes; непустые списки закрывают доступ по умолчанию |
config.deniedChatIds | string[] | Необязательный список запрещенных разговоров, который переопределяет разрешенные типы сеансов и разрешенные идентификаторы |
config.queryMode | "message" | "recent" | "full" | Управляет тем, какой объем разговора видит блокирующий подагент памяти |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Управляет тем, насколько охотно или строго блокирующий подагент памяти решает, возвращать ли память |
config.toolsAllow | string[] | Конкретные имена инструментов памяти, которые может вызывать блокирующий подагент памяти; по умолчанию ["memory_search", "memory_get"] или ["memory_recall"], когда plugins.slots.memory равно memory-lancedb; подстановки, записи group:* и инструменты основного агента игнорируются |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | Расширенное переопределение thinking для блокирующего подагента памяти; по умолчанию off для скорости |
config.promptOverride | string | Расширенная полная замена prompt; не рекомендуется для обычного использования |
config.promptAppend | string | Расширенные дополнительные инструкции, добавляемые к prompt по умолчанию или переопределенному prompt |
config.timeoutMs | number | Жесткий тайм-аут для блокирующего подагента памяти, ограниченный 120000 ms |
config.setupGraceTimeoutMs | number | Расширенный дополнительный бюджет на настройку до истечения тайм-аута recall; по умолчанию 0 и ограничен 30000 ms. См. Льготный период холодного запуска с рекомендациями по обновлению v2026.4.x |
config.maxSummaryChars | number | Максимальное общее число символов, разрешенное в сводке активной памяти |
config.logging | boolean | Выводит журналы активной памяти во время настройки |
config.persistTranscripts | boolean | Сохраняет транскрипты блокирующего подагента памяти на диск вместо удаления временных файлов |
config.transcriptDir | string | Относительный каталог транскриптов блокирующего подагента памяти в папке сеансов агента |
| Ключ | Тип | Значение |
|---|---|---|
config.maxSummaryChars | number | Максимальное общее число символов, разрешенное в сводке активной памяти |
config.recentUserTurns | number | Предыдущие реплики пользователя, которые нужно включать, когда queryMode равен recent |
config.recentAssistantTurns | number | Предыдущие реплики ассистента, которые нужно включать, когда queryMode равен recent |
config.recentUserChars | number | Максимальное число символов на недавнюю реплику пользователя |
config.recentAssistantChars | number | Максимальное число символов на недавнюю реплику ассистента |
config.cacheTtlMs | number | Повторное использование кэша для повторяющихся идентичных запросов (диапазон: 1000-120000 ms; по умолчанию: 15000) |
config.circuitBreakerMaxTimeouts | number | Пропускать recall после такого числа последовательных тайм-аутов для одного и того же агента/модели. Сбрасывается после успешного recall или после истечения cooldown (диапазон: 1-20; по умолчанию: 3). |
config.circuitBreakerCooldownMs | number | Как долго пропускать recall после срабатывания circuit breaker, в ms (диапазон: 5000-600000; по умолчанию: 60000). |
Рекомендуемая настройка
Начните сrecent.
/verbose on для
обычной строки состояния и /trace on для отладочной сводки active-memory вместо
поиска отдельной отладочной команды active-memory. В чат-каналах эти
диагностические строки отправляются после основного ответа ассистента, а не перед ним.
Затем переходите к:
message, если нужна меньшая задержкаfull, если вы решите, что дополнительный контекст стоит более медленной работы блокирующего подагента памяти
Льготный период холодного запуска
До v2026.5.2 Plugin незаметно расширял настроенное вами значениеtimeoutMs на
дополнительные 30000 ms во время холодного запуска, чтобы прогрев модели, загрузка индекса эмбеддингов и
первый recall могли совместно использовать один увеличенный бюджет. В v2026.5.2 этот льготный период был перенесен
за явную настройку setupGraceTimeoutMs — настроенное вами значение timeoutMs
теперь по умолчанию является бюджетом работы recall, если вы явно не включите другое поведение. Блокирующий hook
использует вокруг этого бюджета две ограниченные фазы: до 1500 ms на предварительную проверку сеанса/конфигурации
перед запуском recall, затем отдельные фиксированные 1500 ms на завершение abort
и восстановление транскрипта после остановки работы recall. Ни один из этих допусков
не продлевает выполнение модели или инструментов.
Если вы обновились с v2026.4.x и задали timeoutMs в значение, подобранное для
старого мира с неявным льготным периодом (рекомендуемое начальное timeoutMs: 15000 —
один из примеров), задайте setupGraceTimeoutMs: 30000, чтобы расширить hook сборки prompt и
внешние бюджеты watchdog обратно до эффективных значений до v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 мс.
Встроенный recall runner использует тот же эффективный бюджет тайм-аута, поэтому
setupGraceTimeoutMs покрывает и внешний prompt-build watchdog, и внутренний
блокирующий запуск recall. Лимит preflight покрывает проверки session/config до
начала этого бюджета. Допуск после recall позволяет внешнему hook завершить
очистку abort и прочитать любое итоговое состояние transcript.
Для Gateway с ограниченными ресурсами, где задержка холодного запуска является
известным компромиссом, также подходят меньшие значения (5000–15000 мс) — компромисс
состоит в более высокой вероятности того, что самый первый recall после перезапуска
gateway вернет пустой результат, пока завершается прогрев.
Отладка
Если Active Memory не появляется там, где вы ожидаете:- Убедитесь, что Plugin включен в
plugins.entries.active-memory.enabled. - Убедитесь, что текущий agent id указан в
config.agents. - Убедитесь, что вы тестируете через интерактивную постоянную chat session.
- Включите
config.logging: trueи следите за логами gateway. - Проверьте, что сам поиск памяти работает, с помощью
openclaw memory status --deep.
maxSummaryChars
- уменьшите
queryMode - уменьшите
timeoutMs - сократите количество недавних turns
- уменьшите лимиты символов на turn
Частые проблемы
Active Memory опирается на recall pipeline настроенного Plugin памяти, поэтому большинство неожиданных результатов recall являются проблемами embedding-provider, а не ошибками Active Memory. Путьmemory-core по умолчанию использует memory_search и memory_get; слот
memory-lancedb использует memory_recall. Если вы используете другой Plugin памяти,
убедитесь, что config.toolsAllow указывает имена tools, которые этот Plugin действительно регистрирует.
Embedding provider переключился или перестал работать
Embedding provider переключился или перестал работать
Если
memorySearch.provider не задан, OpenClaw использует embeddings OpenAI. Задайте
memorySearch.provider явно для локальных, Ollama, Gemini, Voyage,
Mistral, DeepInfra, Bedrock, GitHub Copilot или OpenAI-совместимых
embeddings. Если настроенный provider не может запуститься, memory_search может
деградировать до поиска только по лексическим совпадениям; runtime failures после того, как provider
уже выбран, не переключаются на fallback автоматически.Задавайте необязательный memorySearch.fallback только когда вам нужен осознанный
единственный fallback. См. Memory Search для полного
списка providers и примеров.Recall кажется медленным, пустым или непоследовательным
Recall кажется медленным, пустым или непоследовательным
- Включите
/trace on, чтобы показать принадлежащую Plugin отладочную сводку Active Memory в session. - Включите
/verbose on, чтобы также видеть строку состояния🧩 Active Memory: ...после каждого ответа. - Следите в логах gateway за
active-memory: ... start|done,memory sync failed (search-bootstrap)или ошибками embedding provider. - Выполните
openclaw memory status --deep, чтобы проверить backend memory-search и состояние index. - Если вы используете
ollama, убедитесь, что embedding model установлен (ollama list).
Первый recall после перезапуска gateway возвращает `status=timeout`
Первый recall после перезапуска gateway возвращает `status=timeout`
В v2026.5.2 и более поздних версиях, если настройка холодного запуска (прогрев model + загрузка
embedding index) не завершилась к моменту первого recall, запуск
может исчерпать настроенный бюджет
timeoutMs и вернуть status=timeout
с пустым output. В логах Gateway будет active-memory timeout after Nms
около первого подходящего ответа после перезапуска.См. Cold-start grace в разделе рекомендуемой настройки для
рекомендуемого значения setupGraceTimeoutMs.