Active Memory

Active Memory

@dr0p_usdt

Active Memory, это необязательный плагин с блокирующим memory sub-agent, который запускается перед основным ответом в подходящих разговорных сессиях.

Он нужен потому, что большинство систем памяти полезны, но реактивны. Обычно они срабатывают только тогда, когда основной агент сам решает искать память, или когда пользователь прямо просит что-то запомнить. В этот момент естественная точка для уместного воспоминания уже может быть упущена.

Active Memory даёт системе один ограниченный шанс поднять релевантную память ещё до того, как будет сгенерирован основной ответ.

Быстрое включение

Если нужен безопасный и самодостаточный стартовый вариант, используйте такую конфигурацию:

{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          enabled: true,
          agents: ["main"],
          allowedChatTypes: ["direct"],
          modelFallbackPolicy: "default-remote",
          queryMode: "recent",
          promptStyle: "balanced",
          timeoutMs: 15000,
          maxSummaryChars: 220,
          persistTranscripts: false,
          logging: true,
        },
      },
    },
  },
}

Что делает эта настройка:

• Включает плагин для агента main.

• По умолчанию ограничивает работу direct-сессиями.

• Сначала пытается унаследовать текущую модель сессии.

• Если модель явно не указана и не унаследована, разрешает встроенный удалённый fallback.

После изменения конфигурации перезапустите gateway:

openclaw gateway

Чтобы видеть работу Active Memory прямо в чате, включите подробный режим:

/verbose on

Как включить Active Memory

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

Стартовая конфигурация в openclaw.json:

{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          agents: ["main"],
          allowedChatTypes: ["direct"],
          modelFallbackPolicy: "default-remote",
          queryMode: "recent",
          promptStyle: "balanced",
          timeoutMs: 15000,
          maxSummaryChars: 220,
          persistTranscripts: false,
          logging: true,
        },
      },
    },
  },
}

Смысл ключевых параметров:

• plugins.entries.active-memory.enabled включает сам плагин.

• config.agents: ["main"] разрешает Active Memory для агента main.

• config.allowedChatTypes: ["direct"] оставляет работу только в личных диалогах.

• Если config.model не задан, Active Memory сначала использует текущую модель сессии.

• config.modelFallbackPolicy: "default-remote" включает удалённый fallback, если локально модель не разрешилась.

• config.promptStyle: "balanced" задаёт универсальный режим для queryMode recent.

Как это выглядит для пользователя

Active Memory добавляет скрытый системный контекст для модели. Пользователь не видит сырые служебные теги, он видит только итоговый ответ ассистента.

Переключение в текущей сессии

Если нужно временно выключить или снова включить Active Memory только для текущего чата, используйте такие команды:

/active-memory status
/active-memory off
/active-memory on

Это изменение действует только в рамках текущей сессии и не меняет глобальную конфигурацию.

Если нужно изменить поведение сразу для всех сессий, используйте глобальный вариант:

/active-memory status --global
/active-memory off --global
/active-memory on --global

Глобальная команда меняет plugins.entries.active-memory.config.enabled, но не отключает сам плагин целиком, чтобы его можно было снова включить позже.

Для живой отладки включите:

/verbose on

Тогда OpenClaw может показывать строку состояния и короткую debug-сводку по проходу Active Memory.

Когда Active Memory запускается

Есть два обязательных условия. Во-первых, плагин должен быть включён и текущий agent id должен входить в config.agents. Во-вторых, сама сессия должна быть подходящей с точки зрения runtime.

Практически правило выглядит так:

plugin enabled
+
agent id targeted
+
allowed chat type
+
eligible interactive persistent chat session
=
active memory runs

Если одно из условий не выполнено, Active Memory не запускается.

Типы сессий

Параметр config.allowedChatTypes задаёт, в каких типах диалогов функция вообще может работать.

По умолчанию используется:

allowedChatTypes: ["direct"]

Это значит, что функция работает в личных диалогах, но не включается в группах и каналах, если вы не разрешите это явно.

Примеры:

allowedChatTypes: ["direct"]
allowedChatTypes: ["direct", "group"]
allowedChatTypes: ["direct", "group", "channel"]

Где функция работает, а где нет

• В Control UI и web chat persistent sessions, да, если плагин включён и агент выбран.

• В других интерактивных channel-сессиях на том же persistent chat path, да, если плагин включён и агент выбран.

• В headless one-shot runs, нет.

• В heartbeat и background runs, нет.

• Во внутренних agent-command путях, нет.

• Во внутренних helper и sub-agent запусках, нет.

Когда это полезно

Active Memory особенно уместен в persistent user-facing сессиях, где у агента есть содержательная долговременная память и важны continuity и персонализация.

Лучшие сценарии:

• Стабильные предпочтения.

• Повторяющиеся привычки.

• Долгосрочный пользовательский контекст, который должен всплывать естественно.

Слабые сценарии:

• Автоматизация.

• Внутренние воркеры.

• One-shot API-задачи.

• Места, где скрытая персонализация выглядела бы неожиданно.

Как это устроено

Упрощённая схема работы:

User Message
  -> Build Memory Query
  -> Active Memory Blocking Memory Sub-Agent
     -> NONE or empty -> Main Reply
     -> relevant summary -> Append Hidden active_memory_plugin System Context -> Main Reply

Блокирующий memory sub-agent может использовать только два инструмента, memory_search и memory_get. Если связь слабая или результата нет, он должен вернуть NONE.

Режимы запроса

Параметр config.queryMode управляет тем, какой объём контекста получает memory sub-agent.

message

Передаётся только последнее сообщение пользователя. Это самый быстрый вариант и он хорошо подходит для recall стабильных предпочтений, когда широкий контекст не нужен.

Обычно разумно начинать с timeout около 3000–5000 мс.

recent

Передаётся последнее сообщение пользователя и небольшой хвост недавнего диалога. Это лучший баланс между скоростью и контекстом, поэтому именно этот режим обычно рекомендуют первым.

Обычно разумно начинать с timeout около 15000 мс.

full

Передаётся весь диалог. Этот режим даёт лучший recall в длинных тредах, но сильнее увеличивает задержку.

Для него timeout должен быть заметно выше, чем у message и recent.

Стили prompt

Параметр config.promptStyle определяет, насколько охотно memory sub-agent будет возвращать найденную память.

• balanced, универсальный вариант для recent.

• strict, самый осторожный режим.

• contextual, самый дружелюбный к широкому диалоговому контексту.

• recall-heavy, охотнее поднимает память по более мягким совпадениям.

• precision-heavy, предпочитает NONE, если совпадение неочевидно.

• preference-only, заточен под вкусы, привычки, рутину и повторяющиеся личные факты.

Если promptStyle не задан явно, действует такое соответствие по умолчанию:

message -> strict
recent -> balanced
full -> contextual

Политика выбора модели

Если config.model не указан, Active Memory ищет модель в таком порядке:

explicit plugin model
-> current session model
-> agent primary model
-> optional built-in remote fallback

По умолчанию используется modelFallbackPolicy: "default-remote".

Если выбрать modelFallbackPolicy: "resolved-only", то при отсутствии подходящей модели recall будет просто пропущен, без удалённого fallback.

Продвинутые настройки

Для тонкой настройки существуют параметры thinking, promptAppend и promptOverride, но по умолчанию их лучше не трогать. Active Memory работает прямо в пути пользовательского ответа, поэтому любое усложнение влияет на задержку.

Сохранение транскриптов

Во время работы Active Memory создаёт реальный session.jsonl-транскрипт для memory sub-agent. По умолчанию он временный, используется только на время запуска и затем удаляется.

Если нужно сохранять такие транскрипты на диске, включите persistTranscripts:

{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          agents: ["main"],
          persistTranscripts: true,
          transcriptDir: "active-memory",
        },
      },
    },
  },
}

Такие файлы накапливаются быстро, особенно в режиме full, и могут содержать скрытый prompt-контекст и найденные воспоминания, поэтому использовать эту настройку стоит аккуратно.

Рекомендуемый старт

Практически самый разумный старт, это queryMode recent, promptStyle balanced, timeoutMs 15000, maxSummaryChars 220 и временно включённое logging во время настройки.

{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          agents: ["main"],
          queryMode: "recent",
          promptStyle: "balanced",
          timeoutMs: 15000,
          maxSummaryChars: 220,
          logging: true,
        },
      },
    },
  },
}

Отладка

Если Active Memory не появляется там, где вы ожидаете, проверьте следующее:

• Плагин включён.

• Текущий agent id добавлен в config.agents.

• Вы тестируете именно interactive persistent chat-session.

• На время диагностики включён logging.

• Сам поиск памяти работает через openclaw memory status --deep.

Если recall получается слишком шумным, уменьшайте maxSummaryChars. Если всё работает слишком медленно, уменьшайте queryMode, timeoutMs и объём недавнего контекста.


Официальная документация - Active Memory

Сообщество энтузиастов - https://t.me/openclaw_lab

Report Page