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

Довідник з конфігурації пам’яті

На цій сторінці наведено всі параметри конфігурації для пошуку пам’яті OpenClaw. Для концептуальних оглядів див.: Усі параметри пошуку пам’яті розташовані в agents.defaults.memorySearch у openclaw.json, якщо не зазначено інше.

Вибір провайдера

КлючТипТипове значенняОпис
providerstringвизначається автоматичноID адаптера ембедингів: openai, gemini, voyage, mistral, ollama, local
modelstringтипове значення провайдераНазва моделі ембедингів
fallbackstring"none"ID резервного адаптера, якщо основний завершується помилкою
enabledbooleantrueУвімкнути або вимкнути пошук пам’яті

Порядок автовизначення

Коли provider не задано, OpenClaw вибирає перший доступний:
  1. local — якщо налаштовано memorySearch.local.modelPath і файл існує.
  2. openai — якщо вдається визначити ключ OpenAI.
  3. gemini — якщо вдається визначити ключ Gemini.
  4. voyage — якщо вдається визначити ключ Voyage.
  5. mistral — якщо вдається визначити ключ Mistral.
ollama підтримується, але не визначається автоматично (вкажіть його явно).

Визначення API-ключа

Для віддалених ембедингів потрібен API-ключ. OpenClaw визначає його з: профілів автентифікації, models.providers.*.apiKey або змінних середовища.
ПровайдерЗмінна середовищаКлюч конфігурації
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (заповнювач)
Codex OAuth охоплює лише chat/completions і не підходить для запитів ембедингів.

Конфігурація віддаленої кінцевої точки

Для користувацьких OpenAI-сумісних кінцевих точок або перевизначення типових значень провайдера:
КлючТипОпис
remote.baseUrlstringКористувацька базова URL-адреса API
remote.apiKeystringПеревизначення API-ключа
remote.headersobjectДодаткові HTTP-заголовки (об’єднуються з типовими значеннями провайдера)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Конфігурація, специфічна для Gemini

КлючТипТипове значенняОпис
modelstringgemini-embedding-001Також підтримується gemini-embedding-2-preview
outputDimensionalitynumber3072Для Embedding 2: 768, 1536 або 3072
Зміна моделі або outputDimensionality запускає автоматичну повну переіндексацію.

Конфігурація локальних ембедингів

КлючТипТипове значенняОпис
local.modelPathstringзавантажується автоматичноШлях до файлу моделі GGUF
local.modelCacheDirstringтипове значення node-llama-cppКаталог кешу для завантажених моделей
Типова модель: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, завантажується автоматично). Потрібна native-збірка: pnpm approve-builds, потім pnpm rebuild node-llama-cpp.

Конфігурація гібридного пошуку

Усе в memorySearch.query.hybrid:
КлючТипТипове значенняОпис
enabledbooleantrueУвімкнути гібридний пошук BM25 + векторний
vectorWeightnumber0.7Вага для векторних оцінок (0-1)
textWeightnumber0.3Вага для оцінок BM25 (0-1)
candidateMultipliernumber4Множник розміру пулу кандидатів

MMR (різноманітність)

КлючТипТипове значенняОпис
mmr.enabledbooleanfalseУвімкнути повторне ранжування MMR
mmr.lambdanumber0.70 = максимальна різноманітність, 1 = максимальна релевантність

Часове згасання (актуальність)

КлючТипТипове значенняОпис
temporalDecay.enabledbooleanfalseУвімкнути підсилення за актуальністю
temporalDecay.halfLifeDaysnumber30Оцінка зменшується вдвічі кожні N днів
Для постійних файлів (MEMORY.md, файли без дати в memory/) згасання ніколи не застосовується.

Повний приклад

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Додаткові шляхи до пам’яті

КлючТипОпис
extraPathsstring[]Додаткові каталоги або файли для індексації
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Шляхи можуть бути абсолютними або відносними до робочого простору. Каталоги скануються рекурсивно на наявність файлів .md. Обробка символьних посилань залежить від активного бекенда: вбудований рушій ігнорує символьні посилання, тоді як QMD дотримується поведінки сканера QMD. Для пошуку транскриптів між агентами в межах агента використовуйте agents.list[].memorySearch.qmd.extraCollections замість memory.qmd.paths. Ці додаткові колекції мають ту саму структуру { path, name, pattern? }, але об’єднуються для кожного агента окремо й можуть зберігати явні спільні назви, коли шлях вказує за межі поточного робочого простору. Якщо той самий визначений шлях з’являється і в memory.qmd.paths, і в memorySearch.qmd.extraCollections, QMD зберігає перший запис і пропускає дублікат.

Мультимодальна пам’ять (Gemini)

Індексуйте зображення й аудіо разом із Markdown за допомогою Gemini Embedding 2:
КлючТипТипове значенняОпис
multimodal.enabledbooleanfalseУвімкнути мультимодальну індексацію
multimodal.modalitiesstring[]["image"], ["audio"] або ["all"]
multimodal.maxFileBytesnumber10000000Максимальний розмір файлу для індексації
Застосовується лише до файлів у extraPaths. Типові корені пам’яті залишаються лише для Markdown. Потрібен gemini-embedding-2-preview. fallback має бути "none". Підтримувані формати: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (зображення); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (аудіо).

Кеш ембедингів

КлючТипТипове значенняОпис
cache.enabledbooleanfalseКешувати ембединги фрагментів у SQLite
cache.maxEntriesnumber50000Максимальна кількість кешованих ембедингів
Запобігає повторному створенню ембедингів для незмінного тексту під час переіндексації або оновлень транскриптів.

Пакетна індексація

КлючТипТипове значенняОпис
remote.batch.enabledbooleanfalseУвімкнути API пакетних ембедингів
remote.batch.concurrencynumber2Паралельні пакетні завдання
remote.batch.waitbooleantrueОчікувати завершення пакета
remote.batch.pollIntervalMsnumberІнтервал опитування
remote.batch.timeoutMinutesnumberТайм-аут пакета
Доступно для openai, gemini і voyage. Пакетний режим OpenAI зазвичай найшвидший і найдешевший для великих зворотних заповнень.

Пошук у пам’яті сесій (експериментально)

Індексуйте транскрипти сесій і надавайте їх через memory_search:
КлючТипТипове значенняОпис
experimental.sessionMemorybooleanfalseУвімкнути індексацію сесій
sourcesstring[]["memory"]Додайте "sessions", щоб включити транскрипти
sync.sessions.deltaBytesnumber100000Поріг байтів для переіндексації
sync.sessions.deltaMessagesnumber50Поріг повідомлень для переіндексації
Індексація сесій вмикається явно та виконується асинхронно. Результати можуть бути трохи застарілими. Журнали сесій зберігаються на диску, тому межу довіри слід вважати рівнем доступу до файлової системи.

Прискорення векторів SQLite (sqlite-vec)

КлючТипТипове значенняОпис
store.vector.enabledbooleantrueВикористовувати sqlite-vec для векторних запитів
store.vector.extensionPathstringbundledПеревизначити шлях до sqlite-vec
Коли sqlite-vec недоступний, OpenClaw автоматично повертається до обчислення косинусної подібності в процесі.

Зберігання індексу

КлючТипТипове значенняОпис
store.pathstring~/.openclaw/memory/{agentId}.sqliteРозташування індексу (підтримує токен {agentId})
store.fts.tokenizerstringunicode61Токенізатор FTS5 (unicode61 або trigram)

Конфігурація бекенда QMD

Встановіть memory.backend = "qmd", щоб увімкнути. Усі параметри QMD розташовані в memory.qmd:
КлючТипТипове значенняОпис
commandstringqmdШлях до виконуваного файла QMD
searchModestringsearchКоманда пошуку: search, vsearch, query
includeDefaultMemorybooleantrueАвтоматично індексувати MEMORY.md + memory/**/*.md
paths[]arrayДодаткові шляхи: { name, path, pattern? }
sessions.enabledbooleanfalseІндексувати транскрипти сесій
sessions.retentionDaysnumberЗберігання транскриптів
sessions.exportDirstringКаталог експорту

Розклад оновлення

КлючТипТипове значенняОпис
update.intervalstring5mІнтервал оновлення
update.debounceMsnumber15000Затримка після змін файлів
update.onBootbooleantrueОновлювати під час запуску
update.waitForBootSyncbooleanfalseБлокувати запуск до завершення оновлення
update.embedIntervalstringОкрема періодичність ембедингів
update.commandTimeoutMsnumberТайм-аут для команд QMD
update.updateTimeoutMsnumberТайм-аут для операцій оновлення QMD
update.embedTimeoutMsnumberТайм-аут для операцій ембедингів QMD

Обмеження

КлючТипТипове значенняОпис
limits.maxResultsnumber6Максимальна кількість результатів пошуку
limits.maxSnippetCharsnumberОбмеження довжини фрагмента
limits.maxInjectedCharsnumberОбмеження загальної кількості вставлених символів
limits.timeoutMsnumber4000Тайм-аут пошуку

Область дії

Визначає, які сесії можуть отримувати результати пошуку QMD. Та сама схема, що й для session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
Типово — лише DM. match.keyPrefix відповідає нормалізованому ключу сесії; match.rawKeyPrefix відповідає сирому ключу, включно з agent:<id>:.

Цитування

memory.citations застосовується до всіх бекендів:
ЗначенняПоведінка
auto (типово)Додавати нижній колонтитул Source: <path#line> до фрагментів
onЗавжди додавати нижній колонтитул
offНе додавати нижній колонтитул (шлях усе одно передається агенту внутрішньо)

Повний приклад QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming (експериментально)

Dreaming налаштовується в plugins.entries.memory-core.config.dreaming, а не в agents.defaults.memorySearch. Dreaming використовує три взаємодоповнювальні фази (light, deep, REM), кожна з яких має власний розклад і конфігурацію. Докладніше про концепцію та команди чату див. у Dreaming.

Глобальні налаштування

КлючТипТипове значенняОпис
enabledbooleantrueГоловний перемикач для всіх фаз
timezonestringне заданоЧасовий пояс для оцінювання розкладу та щоденних нотаток
verboseLoggingbooleanfalseВиводити докладні журнали dreaming для кожного запуску
storage.modestring"inline"inline, separate або both
storage.separateReportsbooleanfalseЗаписувати окремі файли звітів для кожної фази

Фаза light (phases.light)

Сканує нещодавні сліди, видаляє дублікати та готує кандидатів до щоденної нотатки. Не записує в MEMORY.md.
КлючТипТипове значенняОпис
enabledbooleantrueУвімкнути фазу light
cronstring0 */6 * * *Розклад (кожні 6 годин)
lookbackDaysnumber2Скільки днів слідів сканувати
limitnumber100Максимум кандидатів для підготовки
dedupeSimilaritynumber0.9Поріг Jaccard для видалення дублікатів
sourcesstring[]["daily","sessions","recall"]Джерела даних

Фаза deep (phases.deep)

Просуває кваліфікованих кандидатів до MEMORY.md. Це єдина фаза, яка записує довготривалі факти. Також відповідає за відновлення, коли пам’яті замало.
КлючТипТипове значенняОпис
enabledbooleantrueУвімкнути фазу deep
cronstring0 3 * * *Розклад (щодня о 3 AM)
limitnumber10Максимум кандидатів для просування за цикл
minScorenumber0.8Мінімальна зважена оцінка для просування
minRecallCountnumber3Мінімальний поріг кількості recall
minUniqueQueriesnumber3Мінімальна кількість різних запитів
recencyHalfLifeDaysnumber14Кількість днів, за яку оцінка актуальності зменшується вдвічі
maxAgeDaysnumber30Максимальний вік щоденної нотатки для просування
sourcesstring[]["daily","memory","sessions","logs","recall"]Джерела даних

Відновлення deep (phases.deep.recovery)

КлючТипТипове значенняОпис
enabledbooleantrueУвімкнути автоматичне відновлення
triggerBelowHealthnumber0.35Поріг оцінки здоров’я для запуску відновлення
lookbackDaysnumber30Наскільки далеко назад шукати матеріали для відновлення
maxRecoveredCandidatesnumber20Максимум кандидатів для відновлення за запуск
minRecoveryConfidencenumber0.9Мінімальна впевненість для кандидатів на відновлення
autoWriteMinConfidencenumber0.97Поріг автозапису (без ручного перегляду)

Фаза REM (phases.rem)

Записує теми, роздуми та нотатки про патерни в щоденну нотатку. Не записує в MEMORY.md.
КлючТипТипове значенняОпис
enabledbooleantrueУвімкнути фазу REM
cronstring0 5 * * 0Розклад (щотижня, неділя 5 AM)
lookbackDaysnumber7Кількість днів матеріалу для роздумів
limitnumber10Максимум патернів або тем для запису
minPatternStrengthnumber0.75Мінімальна сила співзустрічальності тегів
sourcesstring[]["memory","daily","deep"]Джерела даних для роздумів

Перевизначення виконання

Кожна фаза приймає блок execution. Також існує глобальний блок execution.defaults, від якого фази успадковують значення.
КлючТипТипове значенняОпис
speedstring"balanced"fast, balanced або slow
thinkingstring"medium"low, medium або high
budgetstring"medium"cheap, medium, expensive
modelstringне заданоПеревизначити модель для цієї фази
maxOutputTokensnumberне заданоОбмежити кількість вихідних токенів
temperaturenumberне заданоТемпература семплювання (0-2)
timeoutMsnumberне заданоТайм-аут фази в мілісекундах

Приклад

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            timezone: "America/New_York",
            phases: {
              light: { cron: "0 */4 * * *", lookbackDays: 3 },
              deep: { minScore: 0.85, recencyHalfLifeDays: 21 },
              rem: { lookbackDays: 14 },
            },
          },
        },
      },
    },
  },
}