Перейти до основного вмісту

Активна пам’ять

Активна пам’ять — це необов’язковий підлеглий агент блокувальної пам’яті, що належить плагіну та запускається перед основною відповіддю для придатних розмовних сеансів. Вона існує тому, що більшість систем пам’яті є потужними, але реактивними. Вони покладаються на те, що основний агент сам вирішить, коли шукати в пам’яті, або на те, що користувач скаже щось на кшталт «запам’ятай це» чи «пошукай у пам’яті». На той момент мить, коли пам’ять могла б зробити відповідь природнішою, уже минула. Активна пам’ять дає системі одну обмежену можливість показати релевантну пам’ять до того, як буде згенеровано основну відповідь.

Вставте це у свого агента

Вставте це у свого агента, якщо хочете ввімкнути Активну пам’ять із самодостатнім налаштуванням із безпечними значеннями за замовчуванням:
{
  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, за замовчуванням обмежує його лише сеансами у стилі прямих повідомлень, дозволяє спершу успадковувати поточну модель сеансу, а також зберігає вбудований віддалений резервний варіант, якщо явна або успадкована модель недоступна. Після цього перезапустіть gateway:
node scripts/run-node.mjs gateway --profile dev
Щоб переглянути її роботу наживо в розмові:
/verbose on

Увімкнення активної пам’яті

Найбезпечніше налаштування:
  1. увімкнути плагін
  2. націлити його на одного розмовного агента
  3. залишити журналювання ввімкненим лише на час налаштування
Почніть із цього в 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,
        },
      },
    },
  },
}
Потім перезапустіть gateway:
node scripts/run-node.mjs gateway --profile dev
Що це означає:
  • plugins.entries.active-memory.enabled: true вмикає плагін
  • config.agents: ["main"] підключає до активної пам’яті лише агента main
  • config.allowedChatTypes: ["direct"] за замовчуванням залишає активну пам’ять увімкненою лише для сеансів у стилі прямих повідомлень
  • якщо config.model не задано, активна пам’ять спочатку успадковує поточну модель сеансу
  • config.modelFallbackPolicy: "default-remote" зберігає вбудований віддалений резервний варіант за замовчуванням, якщо явна або успадкована модель недоступна
  • config.promptStyle: "balanced" використовує типовий універсальний стиль запиту для режиму recent
  • активна пам’ять однаково запускається лише в придатних інтерактивних постійних чат-сеансах

Як це побачити

Активна пам’ять впроваджує прихований системний контекст для моделі. Вона не показує необроблені теги <active_memory_plugin>...</active_memory_plugin> клієнту.

Перемикач сеансу

Використовуйте команду плагіна, якщо хочете призупинити або відновити активну пам’ять для поточного чат-сеансу без редагування конфігурації:
/active-memory status
/active-memory off
/active-memory on
Це має область дії сеансу. Це не змінює plugins.entries.active-memory.enabled, націлювання агента чи іншу глобальну конфігурацію. Якщо ви хочете, щоб команда записувала конфігурацію та призупиняла або відновлювала активну пам’ять для всіх сеансів, використовуйте явну глобальну форму:
/active-memory status --global
/active-memory off --global
/active-memory on --global
Глобальна форма записує plugins.entries.active-memory.config.enabled. Вона залишає plugins.entries.active-memory.enabled увімкненим, щоб команда й надалі була доступна для повторного ввімкнення активної пам’яті пізніше. Якщо ви хочете побачити, що робить активна пам’ять у поточному сеансі, увімкніть докладний режим для цього сеансу:
/verbose on
Коли докладний режим увімкнено, OpenClaw може показувати:
  • рядок стану активної пам’яті, наприклад Active Memory: ok 842ms recent 34 chars
  • зрозумілий налагоджувальний підсумок, наприклад Active Memory Debug: Lemon pepper wings with blue cheese.
Ці рядки походять із того самого проходу активної пам’яті, який живить прихований системний контекст, але відформатовані для людей замість показу необробленої розмітки запиту. За замовчуванням стенограма підлеглого агента блокувальної пам’яті є тимчасовою та видаляється після завершення запуску. Приклад потоку:
/verbose on
які крильця мені замовити?
Очікувана видима форма відповіді:
...звичайна відповідь помічника...

🧩 Active Memory: ok 842ms recent 34 chars
🔎 Active Memory Debug: Lemon pepper wings with blue cheese.

Коли вона запускається

Активна пам’ять використовує два етапи перевірки:
  1. Явне ввімкнення в конфігурації Плагін має бути ввімкнений, а поточний ідентифікатор агента має бути присутній у plugins.entries.active-memory.config.agents.
  2. Сувора придатність під час виконання Навіть коли активна пам’ять увімкнена й націлена, вона запускається лише для придатних інтерактивних постійних чат-сеансів.
Фактичне правило таке:
плагін увімкнено
+
ідентифікатор агента націлено
+
дозволений тип чату
+
придатний інтерактивний постійний чат-сеанс
=
активна пам’ять запускається
Якщо будь-яка з цих умов не виконується, активна пам’ять не запускається.

Типи сеансів

config.allowedChatTypes визначає, у яких типах розмов взагалі може працювати Активна пам’ять. Значення за замовчуванням:
allowedChatTypes: ["direct"]
Це означає, що Активна пам’ять за замовчуванням працює в сеансах у стилі прямих повідомлень, але не в групових сеансах або сеансах каналів, якщо ви явно їх не ввімкнете. Приклади:
allowedChatTypes: ["direct"]
allowedChatTypes: ["direct", "group"]
allowedChatTypes: ["direct", "group", "channel"]

Де вона запускається

Активна пам’ять — це функція покращення розмови, а не загальноплатформова функція інференсу.
ПоверхняАктивна пам’ять запускається?
Постійні сеанси Control UI / вебчатуТак, якщо плагін увімкнено і агента націлено
Інші інтерактивні сеанси каналів на тому самому шляху постійного чатуТак, якщо плагін увімкнено і агента націлено
Безголові одноразові запускиНі
Запуски heartbeat/у фоновому режиміНі
Загальні внутрішні шляхи agent-commandНі
Виконання підлеглих агентів/внутрішніх допоміжних компонентівНі

Навіщо її використовувати

Використовуйте активну пам’ять, коли:
  • сеанс є постійним і орієнтованим на користувача
  • агент має змістовну довгострокову пам’ять для пошуку
  • безперервність і персоналізація важливіші за чистий детермінізм запиту
Вона особливо добре працює для:
  • стабільних уподобань
  • повторюваних звичок
  • довгострокового контексту користувача, який має природно з’являтися
Вона погано підходить для:
  • автоматизації
  • внутрішніх робітників
  • одноразових API-завдань
  • місць, де прихована персоналізація була б неочікуваною

Як це працює

Форма під час виконання така: Підлеглий агент блокувальної пам’яті може використовувати лише:
  • memory_search
  • memory_get
Якщо з’єднання слабке, він має повертати NONE.

Режими запиту

config.queryMode визначає, який обсяг розмови бачить підлеглий агент блокувальної пам’яті.

Стилі запиту

config.promptStyle визначає, наскільки охоче або суворо підлеглий агент блокувальної пам’яті вирішує, чи повертати пам’ять. Доступні стилі:
  • balanced: універсальне значення за замовчуванням для режиму recent
  • strict: найменш охочий; найкраще, коли ви хочете мінімального проникнення з навколишнього контексту
  • contextual: найсприятливіший для безперервності; найкраще, коли історія розмови має більше значення
  • recall-heavy: охочіше показує пам’ять за слабших, але все ще правдоподібних збігів
  • precision-heavy: агресивно віддає перевагу NONE, якщо збіг не є очевидним
  • preference-only: оптимізований для обраного, звичок, рутин, смаків і повторюваних особистих фактів
Типове зіставлення, коли config.promptStyle не задано:
message -> strict
recent -> balanced
full -> contextual
Якщо ви явно задасте config.promptStyle, це перевизначення матиме пріоритет. Приклад:
promptStyle: "preference-only"

Політика резервного вибору моделі

Якщо config.model не задано, Активна пам’ять намагається визначити модель у такому порядку:
явна модель плагіна
-> поточна модель сеансу
-> основна модель агента
-> необов’язковий вбудований віддалений резервний варіант
config.modelFallbackPolicy керує останнім кроком. Значення за замовчуванням:
modelFallbackPolicy: "default-remote"
Інший варіант:
modelFallbackPolicy: "resolved-only"
Використовуйте resolved-only, якщо хочете, щоб Активна пам’ять пропускала пригадування замість переходу до вбудованого віддаленого значення за замовчуванням, коли явна або успадкована модель недоступна.

Розширені варіанти обходу

Ці параметри навмисно не входять до рекомендованого налаштування. config.thinking може перевизначати рівень мислення підлеглого агента блокувальної пам’яті:
thinking: "medium"
Значення за замовчуванням:
thinking: "off"
Не вмикайте це за замовчуванням. Активна пам’ять працює на шляху формування відповіді, тому додатковий час на мислення безпосередньо збільшує видиму для користувача затримку. config.promptAppend додає додаткові інструкції оператора після типового запиту Активної пам’яті й перед контекстом розмови:
promptAppend: "Надавайте перевагу стабільним довгостроковим уподобанням над одноразовими подіями."
config.promptOverride замінює типовий запит Активної пам’яті. OpenClaw усе одно додає контекст розмови після нього:
promptOverride: "Ви агент пошуку в пам’яті. Поверніть NONE або один компактний факт про користувача."
Налаштовувати запит не рекомендується, якщо тільки ви цілеспрямовано не тестуєте інший контракт пригадування. Типовий запит налаштовано так, щоб повертати або NONE, або компактний контекст фактів про користувача для основної моделі.

message

Надсилається лише останнє повідомлення користувача.
Лише останнє повідомлення користувача
Використовуйте це, коли:
  • вам потрібна найвища швидкість роботи
  • вам потрібен найсильніший ухил у бік пригадування стабільних уподобань
  • наступні ходи не потребують розмовного контексту
Рекомендований тайм-аут:
  • починайте приблизно з 3000 до 5000 мс

recent

Надсилається останнє повідомлення користувача та невеликий хвіст нещодавньої розмови.
Хвіст нещодавньої розмови:
user: ...
assistant: ...
user: ...

Останнє повідомлення користувача:
...
Використовуйте це, коли:
  • вам потрібен кращий баланс між швидкістю та прив’язкою до розмови
  • подальші запитання часто залежать від кількох останніх ходів
Рекомендований тайм-аут:
  • починайте приблизно з 15000 мс

full

Уся розмова надсилається підлеглому агенту блокувальної пам’яті.
Повний контекст розмови:
user: ...
assistant: ...
user: ...
...
Використовуйте це, коли:
  • найвища якість пригадування важливіша за затримку
  • розмова містить важливу підготовчу інформацію далеко вище по гілці
Рекомендований тайм-аут:
  • суттєво збільшуйте його порівняно з message або recent
  • починайте приблизно з 15000 мс або вище залежно від розміру гілки
Загалом тайм-аут має збільшуватися разом із розміром контексту:
message < recent < full

Збереження стенограм

Запуски підлеглого агента блокувальної пам’яті активної пам’яті створюють справжню стенограму session.jsonl під час виклику підлеглого агента блокувальної пам’яті. За замовчуванням ця стенограма є тимчасовою:
  • вона записується до тимчасового каталогу
  • вона використовується лише для запуску підлеглого агента блокувальної пам’яті
  • вона видаляється одразу після завершення запуску
Якщо ви хочете зберігати ці стенограми підлеглого агента блокувальної пам’яті на диску для налагодження або перевірки, явно ввімкніть збереження:
{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          agents: ["main"],
          persistTranscripts: true,
          transcriptDir: "active-memory",
        },
      },
    },
  },
}
Коли цю функцію ввімкнено, активна пам’ять зберігає стенограми в окремому каталозі в папці сеансів цільового агента, а не в основному шляху стенограми розмови користувача. Типова структура концептуально виглядає так:
agents/<agent>/sessions/active-memory/<blocking-memory-sub-agent-session-id>.jsonl
Ви можете змінити відносний підкаталог за допомогою config.transcriptDir. Використовуйте це обережно:
  • стенограми підлеглого агента блокувальної пам’яті можуть швидко накопичуватися в активних сеансах
  • режим запиту full може дублювати велику частину контексту розмови
  • ці стенограми містять прихований контекст запиту та пригадані спогади

Конфігурація

Уся конфігурація активної пам’яті розміщена в:
plugins.entries.active-memory
Найважливіші поля:
КлючТипЗначення
enabledbooleanВмикає сам плагін
config.agentsstring[]Ідентифікатори агентів, які можуть використовувати активну пам’ять
config.modelstringНеобов’язкове посилання на модель підлеглого агента блокувальної пам’яті; якщо не задано, активна пам’ять використовує поточну модель сеансу
config.queryMode"message" | "recent" | "full"Керує тим, який обсяг розмови бачить підлеглий агент блокувальної пам’яті
config.promptStyle"balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only"Керує тим, наскільки охоче або суворо підлеглий агент блокувальної пам’яті вирішує, чи повертати пам’ять
config.thinking"off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive"Розширене перевизначення рівня мислення для підлеглого агента блокувальної пам’яті; типово off для швидкості
config.promptOverridestringРозширена повна заміна запиту; не рекомендується для звичайного використання
config.promptAppendstringРозширені додаткові інструкції, що додаються до типового або перевизначеного запиту
config.timeoutMsnumberЖорсткий тайм-аут для підлеглого агента блокувальної пам’яті
config.maxSummaryCharsnumberМаксимальна загальна кількість символів, дозволена в підсумку active-memory
config.loggingbooleanВиводить журнали активної пам’яті під час налаштування
config.persistTranscriptsbooleanЗберігає стенограми підлеглого агента блокувальної пам’яті на диску замість видалення тимчасових файлів
config.transcriptDirstringВідносний каталог стенограм підлеглого агента блокувальної пам’яті в папці сеансів агента
Корисні поля для налаштування:
КлючТипЗначення
config.maxSummaryCharsnumberМаксимальна загальна кількість символів, дозволена в підсумку active-memory
config.recentUserTurnsnumberПопередні ходи користувача, які слід включити, коли queryMode має значення recent
config.recentAssistantTurnsnumberПопередні ходи помічника, які слід включити, коли queryMode має значення recent
config.recentUserCharsnumberМаксимальна кількість символів на кожен недавній хід користувача
config.recentAssistantCharsnumberМаксимальна кількість символів на кожен недавній хід помічника
config.cacheTtlMsnumberПовторне використання кешу для повторюваних однакових запитів

Рекомендоване налаштування

Почніть із recent.
{
  plugins: {
    entries: {
      "active-memory": {
        enabled: true,
        config: {
          agents: ["main"],
          queryMode: "recent",
          promptStyle: "balanced",
          timeoutMs: 15000,
          maxSummaryChars: 220,
          logging: true,
        },
      },
    },
  },
}
Якщо ви хочете перевіряти поведінку наживо під час налаштування, використовуйте /verbose on у сеансі замість пошуку окремої команди налагодження active-memory. Потім перейдіть до:
  • message, якщо вам потрібна менша затримка
  • full, якщо ви вирішите, що додатковий контекст вартий повільнішого підлеглого агента блокувальної пам’яті

Налагодження

Якщо активна пам’ять не з’являється там, де ви очікуєте:
  1. Переконайтеся, що плагін увімкнено в plugins.entries.active-memory.enabled.
  2. Переконайтеся, що поточний ідентифікатор агента вказано в config.agents.
  3. Переконайтеся, що ви тестуєте через інтерактивний постійний чат-сеанс.
  4. Увімкніть config.logging: true і перегляньте журнали gateway.
  5. Перевірте, що сам пошук у пам’яті працює, за допомогою openclaw memory status --deep.
Якщо спрацювання пам’яті надто шумні, посильте обмеження:
  • maxSummaryChars
Якщо активна пам’ять працює надто повільно:
  • зменште queryMode
  • зменште timeoutMs
  • зменште кількість недавніх ходів
  • зменште ліміти символів на хід

Пов’язані сторінки