Швидкий старт
Вставте це вopenclaw.json для налаштування з безпечними типовими значеннями — плагін увімкнено, область дії обмежена
агентом main, лише сесії прямих повідомлень, успадковує модель сесії,
коли вона доступна:
plugins.entries.active-memory.enabled: trueвмикає плагінconfig.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> у
звичайній відповіді, видимій клієнту.
Перемикач сесії
Використовуйте команду плагіна, коли хочете призупинити або відновити 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 використовує два шлюзи:- Явне ввімкнення в конфігурації
Плагін має бути ввімкнений, а id поточного агента має бути вказаний у
plugins.entries.active-memory.config.agents. - Сувора придатність під час виконання Навіть коли Active Memory увімкнено й націлено, вона запускається лише для придатних інтерактивних постійних чат-сесій.
Типи сесій
config.allowedChatTypes керує тим, у яких типах розмов взагалі може запускатися Active
Memory.
Типове значення:
config.allowedChatIds і
config.deniedChatIds після вибору дозволених типів сесій.
allowedChatIds — це явний список дозволених визначених id розмов. Коли він
не порожній, Active Memory запускається лише тоді, коли id розмови сесії є в
цьому списку. Це звужує всі дозволені типи чатів одночасно, включно з прямими
повідомленнями. Якщо ви хочете всі прямі повідомлення плюс лише певні групи, додайте
id прямих співрозмовників до allowedChatIds або тримайте allowedChatTypes зосередженим на
впровадженні для груп/каналів, яке ви тестуєте.
deniedChatIds — це явний список заборон. Він завжди має пріоритет над
allowedChatTypes і allowedChatIds, тому відповідна розмова пропускається
навіть тоді, коли її тип сесії інакше дозволений.
Id походять із постійного ключа сесії каналу: наприклад Feishu
chat_id / open_id, id чату Telegram або id каналу Slack. Зіставлення
нечутливе до регістру. Якщо allowedChatIds не порожній і OpenClaw не може визначити
id розмови для сесії, Active Memory пропускає хід замість того, щоб
здогадуватися.
Приклад:
Де це запускається
Active Memory — це функція збагачення розмови, а не загальноплатформна функція інференсу.| Поверхня | Запускає Active Memory? |
|---|---|
| Control UI / постійні сесії вебчату | Так, якщо плагін увімкнено й агента націлено |
| Інші інтерактивні сесії каналів на тому самому шляху постійного чату | Так, якщо плагін увімкнено й агента націлено |
| Безголові одноразові запуски | Ні |
| 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 дозволяє блокувальному під-агенту пригадування викликатиmemory_search і memory_get. Це відповідає вбудованому контракту memory-core.
Коли plugins.slots.memory вибирає memory-lancedb, а
config.toolsAllow не задано, Active Memory зберігає наявну поведінку LanceDB
і натомість використовує memory_recall.
Якщо ви використовуєте інший Plugin пам’яті, задайте config.toolsAllow точними назвами
інструментів, які реєструє цей Plugin. Active Memory перелічує ці інструменти в запиті
пригадування й передає той самий список вбудованому під-агенту. Якщо жоден із
налаштованих інструментів недоступний або під-агент пам’яті завершується помилкою, Active Memory
пропускає пригадування для цього ходу, а основна відповідь продовжується без контексту пам’яті.
Для користувацьких інструментів пригадування непорожній видимий для моделі вивід інструмента вважається доказом пригадування,
якщо структуровані поля результату явно не повідомляють про порожній результат або
помилку.
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 використовував цей інструмент пригадування:
Lossless Claw
Lossless Claw — це Plugin контекстного рушія з власними інструментами пригадування. Спершу встановіть і налаштуйте його як контекстний рушій; див. Контекстний рушій. Після цього дозвольте Active Memory використовувати інструменти пригадування Lossless Claw:lcm_expand до toolsAllow для основного під-агента Active Memory.
Lossless Claw використовує його як нижчерівневий делегований інструмент розгортання.
Розширені аварійні варіанти
Ці параметри навмисно не входять до рекомендованого налаштування.config.thinking може перевизначити рівень thinking блокувального під-агента пам’яті:
config.promptAppend додає додаткові інструкції оператора після типового запиту Active
Memory і перед контекстом розмови:
promptAppend з користувацьким toolsAllow, коли неосновному Plugin пам’яті потрібні
специфічний для провайдера порядок інструментів або інструкції щодо формування запиту.
config.promptOverride замінює типовий запит Active Memory. OpenClaw
усе одно додає контекст розмови після нього:
NONE,
або компактний контекст користувацьких фактів для основної моделі.
Збереження транскрипту
Запуски блокувального під-агента пам’яті Active Memory створюють справжній транскриптsession.jsonl
під час виклику блокувального під-агента пам’яті.
За замовчуванням цей транскрипт є тимчасовим:
- він записується до тимчасового каталогу
- він використовується лише для запуску блокувального під-агента пам’яті
- він видаляється одразу після завершення запуску
config.transcriptDir.
Використовуйте це обережно:
- транскрипти блокувального під-агента пам’яті можуть швидко накопичуватися в активних сесіях
- режим запиту
fullможе дублювати багато контексту розмови - ці транскрипти містять прихований контекст запиту та пригадані спогади
Конфігурація
Уся конфігурація Active Memory розміщується в:| Ключ | Тип | Значення |
|---|---|---|
enabled | boolean | Вмикає сам plugin |
config.agents | string[] | Ідентифікатори agent, які можуть використовувати active memory |
config.model | string | Необов’язкове посилання на модель блокувального memory sub-agent; якщо не задано, active memory використовує поточну модель сеансу |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | Типи сеансів, у яких може працювати Active Memory; типово це сеанси в стилі прямих повідомлень |
config.allowedChatIds | string[] | Необов’язковий allowlist для окремих розмов, який застосовується після allowedChatTypes; непорожні списки закривають доступ за замовчуванням |
config.deniedChatIds | string[] | Необов’язковий denylist для окремих розмов, який перевизначає дозволені типи сеансів і дозволені ідентифікатори |
config.queryMode | "message" | "recent" | "full" | Керує тим, яку частину розмови бачить блокувальний memory sub-agent |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Керує тим, наскільки охочим або суворим є блокувальний memory sub-agent, коли вирішує, чи повертати пам’ять |
config.toolsAllow | string[] | Конкретні назви memory tools, які може викликати блокувальний memory sub-agent; типово ["memory_search", "memory_get"] або ["memory_recall"], коли plugins.slots.memory дорівнює memory-lancedb; wildcards, записи group:* і core agent tools ігноруються |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | Розширене перевизначення thinking для блокувального memory sub-agent; типово off для швидкості |
config.promptOverride | string | Розширена повна заміна prompt; не рекомендовано для звичайного використання |
config.promptAppend | string | Розширені додаткові інструкції, додані до типового або перевизначеного prompt |
config.timeoutMs | number | Жорсткий timeout для блокувального memory sub-agent, обмежений 120000 ms |
config.setupGraceTimeoutMs | number | Розширений додатковий бюджет налаштування до завершення recall timeout; типово 0 і обмежено 30000 ms. Див. Пільговий час cold-start для рекомендацій щодо оновлення v2026.4.x |
config.maxSummaryChars | number | Максимальна загальна кількість символів, дозволена в summary active-memory |
config.logging | boolean | Виводить журнали active memory під час налаштування |
config.persistTranscripts | boolean | Зберігає transcripts блокувального memory sub-agent на диску замість видалення тимчасових файлів |
config.transcriptDir | string | Відносна директорія transcripts блокувального memory sub-agent у папці сеансів agent |
| Ключ | Тип | Значення |
|---|---|---|
config.maxSummaryChars | number | Максимальна загальна кількість символів, дозволена в summary active-memory |
config.recentUserTurns | number | Попередні репліки користувача, які треба включити, коли queryMode дорівнює recent |
config.recentAssistantTurns | number | Попередні репліки assistant, які треба включити, коли queryMode дорівнює recent |
config.recentUserChars | number | Максимальна кількість символів на одну нещодавню репліку користувача |
config.recentAssistantChars | number | Максимальна кількість символів на одну нещодавню репліку assistant |
config.cacheTtlMs | number | Повторне використання cache для повторних ідентичних запитів (діапазон: 1000-120000 ms; типово: 15000) |
config.circuitBreakerMaxTimeouts | number | Пропускати recall після такої кількості послідовних timeouts для того самого agent/model. Скидається після успішного recall або після завершення cooldown (діапазон: 1-20; типово: 3). |
config.circuitBreakerCooldownMs | number | Як довго пропускати recall після спрацювання circuit breaker, у ms (діапазон: 5000-600000; типово: 60000). |
Рекомендоване налаштування
Почніть ізrecent.
/verbose on для
звичайного рядка статусу та /trace on для debug summary active-memory замість
пошуку окремої debug команди active-memory. У chat channels ці
діагностичні рядки надсилаються після основної відповіді assistant, а не перед нею.
Потім перейдіть до:
message, якщо вам потрібна менша затримкаfull, якщо ви вирішите, що додатковий context вартий повільнішого блокувального memory sub-agent
Пільговий час cold-start
До v2026.5.2 plugin непомітно подовжував налаштований вамиtimeoutMs на
додаткові 30000 ms під час cold-start, щоб прогрівання моделі, завантаження embedding-index і
перший recall могли спільно використовувати один більший бюджет. v2026.5.2 переніс цей пільговий час
за явний config setupGraceTimeoutMs — налаштований вами timeoutMs
тепер типово є бюджетом recall-work, якщо ви не ввімкнете інше. Блокувальний hook
використовує дві обмежені фази навколо цього бюджету: до 1500 ms для session/config
preflight перед початком recall, а потім окремі фіксовані 1500 ms для abort
settlement і відновлення transcript після зупинки recall work. Жоден із цих допусків
не подовжує виконання моделі або tool.
Якщо ви оновилися з v2026.4.x і задали timeoutMs значення, налаштоване для
старого світу з неявним grace (рекомендований стартовий timeoutMs: 15000 є одним
прикладом), задайте setupGraceTimeoutMs: 30000, щоб подовжити hook побудови prompt і
бюджети outer watchdog назад до ефективних значень до v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 мс.
Вбудований виконавець пригадування використовує той самий ефективний бюджет часу очікування, тому
setupGraceTimeoutMs охоплює як зовнішній сторожовий таймер побудови промпта, так і внутрішній
блокувальний запуск пригадування. Обмеження попередньої перевірки охоплює перевірки сеансу/конфігурації до початку цього
бюджету. Допуск після пригадування дає зовнішньому хуку змогу завершити очищення
переривання та прочитати будь-який фінальний стан стенограми.
Для Gateway з обмеженими ресурсами, де затримка холодного запуску є відомим компромісом,
нижчі значення (5000–15000 мс) також працюють — компроміс полягає у вищій імовірності, що
найперше пригадування після перезапуску Gateway поверне порожній результат, доки завершується
прогрівання.
Налагодження
Якщо Active Memory не з’являється там, де ви очікуєте:- Переконайтеся, що плагін увімкнено в
plugins.entries.active-memory.enabled. - Переконайтеся, що поточний ідентифікатор агента вказано в
config.agents. - Переконайтеся, що ви тестуєте через інтерактивний сталий сеанс чату.
- Увімкніть
config.logging: trueі стежте за журналами Gateway. - Перевірте, що сам пошук пам’яті працює, за допомогою
openclaw memory status --deep.
maxSummaryChars
- зменште
queryMode - зменште
timeoutMs - зменште кількість останніх ходів
- зменште обмеження символів на хід
Поширені проблеми
Active Memory працює на конвеєрі пригадування налаштованого плагіна пам’яті, тому більшість несподіванок із пригадуванням є проблемами постачальника embeddings, а не помилками Active Memory. Типовий шляхmemory-core використовує memory_search і memory_get; слот
memory-lancedb використовує memory_recall. Якщо ви використовуєте інший плагін пам’яті,
переконайтеся, що config.toolsAllow називає інструменти, які цей плагін фактично реєструє.
Embedding provider switched or stopped working
Embedding provider switched or stopped working
Якщо
memorySearch.provider не задано, OpenClaw використовує embeddings OpenAI. Задайте
memorySearch.provider явно для локальних, Ollama, Gemini, Voyage,
Mistral, DeepInfra, Bedrock, GitHub Copilot або OpenAI-сумісних
embeddings. Якщо налаштований постачальник не може працювати, memory_search може
деградувати до лише лексичного пошуку; збої під час виконання після того, як постачальника
вже вибрано, не перемикаються на резервний варіант автоматично.Задавайте необов’язковий memorySearch.fallback лише тоді, коли вам потрібен навмисний
єдиний резервний варіант. Див. Пошук пам’яті для повного
списку постачальників і прикладів.Recall feels slow, empty, or inconsistent
Recall feels slow, empty, or inconsistent
- Увімкніть
/trace on, щоб показувати у сеансі налагоджувальний підсумок Active Memory, яким володіє плагін. - Увімкніть
/verbose on, щоб також бачити рядок стану🧩 Active Memory: ...після кожної відповіді. - Стежте в журналах Gateway за
active-memory: ... start|done,memory sync failed (search-bootstrap)або помилками embeddings постачальника. - Запустіть
openclaw memory status --deep, щоб перевірити бекенд пошуку пам’яті та стан індексу. - Якщо ви використовуєте
ollama, переконайтеся, що модель embeddings встановлена (ollama list).
First recall after gateway restart returns `status=timeout`
First recall after gateway restart returns `status=timeout`
У v2026.5.2 і новіших версіях, якщо підготовка холодного запуску (прогрівання моделі + завантаження
індексу embeddings) не завершилася до моменту запуску першого пригадування, запуск
може вичерпати налаштований бюджет
timeoutMs і повернути status=timeout
з порожнім виводом. Журнали Gateway показують active-memory timeout after Nms
біля першої придатної відповіді після перезапуску.Див. Пільговий час холодного запуску у розділі Рекомендоване налаштування щодо
рекомендованого значення setupGraceTimeoutMs.