Technical reference
Справочник по конфигурации памяти
На этой странице перечислены все параметры конфигурации поиска по памяти OpenClaw. Концептуальные обзоры см. здесь:
Как работает память.
Серверная часть SQLite по умолчанию.
Локальный вспомогательный процесс.
Конвейер поиска и его настройка.
Субагент памяти для интерактивных сеансов.
Если не указано иное, все параметры поиска по памяти находятся в разделе agents.defaults.memorySearch файла openclaw.json (или в переопределении agents.list[].memorySearch для отдельного агента).
Выбор провайдера
| Ключ | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
enabled |
boolean |
true |
Включение или отключение поиска по памяти |
provider |
string |
"openai" |
Идентификатор адаптера эмбеддингов, например bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible или voyage; также может быть настроенным models.providers.<id>, у которого api указывает на адаптер эмбеддингов памяти или API модели, совместимый с OpenAI |
model |
string |
по умолчанию провайдера | Имя модели эмбеддингов |
fallback |
string |
"none" |
Идентификатор резервного адаптера на случай сбоя основного |
Если provider не задан, OpenClaw использует эмбеддинги OpenAI. Явно задайте provider,
чтобы использовать Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, локальную модель GGUF или конечную точку /v1/embeddings, совместимую с OpenAI.
Устаревшие конфигурации, в которых всё ещё указано provider: "auto", разрешаются в openai.
Если provider не задан, присутствует устаревший provider: "auto" или
provider: "none" намеренно выбирает режим только FTS, извлечение из памяти всё равно может
использовать лексическое ранжирование FTS, когда эмбеддинги недоступны.
Для явно указанных нелокальных провайдеров используется безопасный отказ. Если для memorySearch.provider задан
конкретный провайдер с удалённой серверной частью, например Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage или пользовательский провайдер,
совместимый с OpenAI, и этот провайдер недоступен во время выполнения, memory_search
возвращает результат о недоступности вместо неявного перехода к извлечению только через FTS. Исправьте
конфигурацию провайдера или аутентификации, переключитесь на доступного провайдера либо задайте
provider: "none", если хотите намеренно использовать извлечение только через FTS.
Пользовательские идентификаторы провайдеров
memorySearch.provider может указывать на пользовательскую запись models.providers.<id> для специализированных адаптеров провайдера памяти, таких как ollama, или для API моделей, совместимых с OpenAI, таких как openai-responses / openai-completions. OpenClaw определяет владельца api этого провайдера для адаптера эмбеддингов, сохраняя пользовательский идентификатор провайдера для обработки конечной точки, аутентификации и префикса модели. Это позволяет конфигурациям с несколькими GPU или узлами выделить для эмбеддингов памяти конкретную локальную конечную точку:
{ models: { providers: { "ollama-5080": { api: "ollama", baseUrl: "http://gpu-box.local:11435", apiKey: "ollama-local", models: [{ id: "qwen3-embedding:0.6b", name: "Qwen3 Embedding 0.6B" }], }, }, }, agents: { defaults: { memorySearch: { provider: "ollama-5080", model: "qwen3-embedding:0.6b", }, }, },}Определение ключа API
Для удалённых эмбеддингов требуется ключ API. Вместо него Bedrock использует стандартную цепочку учётных данных AWS SDK (роли экземпляров, SSO, ключи доступа или ключ API Bedrock).
| Провайдер | Переменная окружения | Ключ конфигурации |
|---|---|---|
| Bedrock | Цепочка учётных данных AWS или AWS_BEARER_TOKEN_BEDROCK |
Ключ API не требуется |
| DeepInfra | DEEPINFRA_API_KEY |
models.providers.deepinfra.apiKey |
| Gemini | GEMINI_API_KEY |
models.providers.google.apiKey |
| GitHub Copilot | COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN |
Профиль аутентификации через вход с устройства |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (заполнитель) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
Конфигурация удалённой конечной точки
Используйте provider: "openai-compatible" для универсального сервера
/v1/embeddings, совместимого с OpenAI, который не должен наследовать глобальные учётные данные чата OpenAI.
remote.baseUrlstringПользовательский базовый URL API.
remote.apiKeystringПереопределение ключа API.
remote.headersobjectДополнительные заголовки HTTP (объединяются со значениями провайдера по умолчанию).
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", model: "text-embedding-3-small", remote: { baseUrl: "https://api.example.com/v1/", apiKey: "YOUR_KEY", }, }, }, },}Конфигурация для отдельных провайдеров
Gemini
| Ключ | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
model |
string |
gemini-embedding-001 |
Также поддерживает gemini-embedding-2-preview |
outputDimensionality |
number |
3072 |
Для Embedding 2: 768, 1536 или 3072 |
Типы входных данных, совместимые с OpenAI
Конечные точки эмбеддингов, совместимые с OpenAI, могут включать зависящие от провайдера поля запроса input_type. Это полезно для асимметричных моделей эмбеддингов, которым требуются разные метки для эмбеддингов запросов и документов.
| Ключ | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
inputType |
string |
не задано | Общий input_type для эмбеддингов запросов и документов |
queryInputType |
string |
не задано | input_type во время запроса; переопределяет inputType |
documentInputType |
string |
не задано | input_type индекса или документа; переопределяет inputType |
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", remote: { baseUrl: "https://embeddings.example/v1", apiKey: "${EMBEDDINGS_API_KEY}", }, model: "asymmetric-embedder", queryInputType: "query", documentInputType: "passage", }, }, },}Изменение этих значений влияет на идентичность кеша эмбеддингов при пакетной индексации провайдером; после этого следует переиндексировать память, если вышестоящая модель по-разному обрабатывает эти метки.
Bedrock
Конфигурация эмбеддингов Bedrock
Bedrock использует стандартную цепочку учётных данных AWS SDK и проверяемый OpenClaw токен-носитель, поэтому ключи API не хранятся в конфигурации. Если OpenClaw работает на EC2 с ролью экземпляра, имеющей доступ к Bedrock, просто задайте провайдера и модель:
{ agents: { defaults: { memorySearch: { provider: "bedrock", model: "amazon.titan-embed-text-v2:0", }, }, },}| Ключ | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
Любой идентификатор модели эмбеддингов Bedrock |
outputDimensionality |
number |
по умолчанию модели | Для Titan V2: 256, 512 или 1024 |
Поддерживаемые модели (с определением семейства и размерами по умолчанию):
| Идентификатор модели | Поставщик | Размерность по умолчанию | Настраиваемые размерности |
|---|---|---|---|
amazon.titan-embed-text-v2:0 |
Amazon | 1024 | 256, 512, 1024 |
amazon.titan-embed-text-v1 |
Amazon | 1536 | -- |
amazon.titan-embed-g1-text-02 |
Amazon | 1536 | -- |
amazon.titan-embed-image-v1 |
Amazon | 1024 | -- |
amazon.nova-2-multimodal-embeddings-v1:0 |
Amazon | 1024 | 256, 384, 1024, 3072 |
cohere.embed-english-v3 |
Cohere | 1024 | -- |
cohere.embed-multilingual-v3 |
Cohere | 1024 | -- |
cohere.embed-v4:0 |
Cohere | 1536 | 256, 384, 512, 768, 1024, 1536 |
twelvelabs.marengo-embed-3-0-v1:0 |
TwelveLabs | 512 | -- |
twelvelabs.marengo-embed-2-7-v1:0 |
TwelveLabs | 1024 | -- |
Варианты с суффиксом пропускной способности (например, amazon.titan-embed-text-v1:2:8k) и идентификаторы профилей инференса с префиксом региона (например, us.amazon.titan-embed-text-v2:0) наследуют конфигурацию базовой модели.
Регион: определяется в следующем порядке: переопределение memorySearch.remote.baseUrl, конфигурация models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION, затем значение по умолчанию us-east-1.
Аутентификация: OpenClaw сначала проверяет AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY или AWS_BEARER_TOKEN_BEDROCK, а затем переходит к стандартной цепочке поставщиков учётных данных AWS SDK по умолчанию:
- Переменные среды (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), если также не заданаAWS_PROFILE - SSO (только когда настроены поля SSO)
- Общие файлы учётных данных и конфигурации (
fromIni, включаяAWS_PROFILE) - Процесс получения учётных данных (
credential_processв файле конфигурации AWS) - Учётные данные на основе токена веб-идентификации
- Учётные данные из метаданных экземпляра ECS или EC2
Разрешения IAM: роли или пользователю IAM требуются:
{ "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": "*"}Для соблюдения принципа минимальных привилегий ограничьте InvokeModel конкретной моделью:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0Локально (GGUF + llama.cpp)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
local.modelPath |
string |
загружается автоматически | Путь к файлу модели GGUF |
local.modelCacheDir |
string |
значение по умолчанию node-llama-cpp | Каталог кеша для загруженных моделей |
local.contextSize |
number | "auto" |
4096 |
Размер контекстного окна для контекста эмбеддингов. 4096 охватывает типичные фрагменты (128–512 токенов), одновременно ограничивая потребление видеопамяти, не связанное с весами. На системах с ограниченными ресурсами уменьшите до 1024–2048. "auto" использует обученный максимум модели — не рекомендуется для моделей 8B+ (Qwen3-Embedding-8B: до 40 960 токенов могут увеличить потребление видеопамяти примерно до 32 ГБ). |
Сначала установите официальный поставщик llama.cpp: openclaw plugins install @openclaw/llama-cpp-provider.
Модель по умолчанию: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 ГБ, загружается автоматически). Для рабочих копий исходного кода по-прежнему требуется разрешение на нативную сборку: pnpm approve-builds, затем pnpm rebuild node-llama-cpp.
Используйте автономный CLI, чтобы проверить тот же путь поставщика, который использует Gateway:
openclaw memory status --deep --agent mainopenclaw memory index --force --agent mainЧисловые значения local.contextSize также учитываются при автоматическом распределении слоёв на GPU в node-llama-cpp, чтобы веса модели и запрошенный контекст эмбеддингов помещались вместе. После загрузки среды выполнения openclaw memory status --deep сообщает последние известные сведения о бэкенде llama.cpp, устройстве, выгрузке, запрошенном контексте и памяти с временными метками; пассивная проверка состояния не загружает модель.
Явно задайте provider: "local" для локальных эмбеддингов GGUF. hf: и ссылки на модели по HTTP(S) поддерживаются в явных локальных конфигурациях (через механизм разрешения моделей node-llama-cpp), но не изменяют поставщика по умолчанию.
Тайм-аут встроенного создания эмбеддингов
sync.embeddingBatchTimeoutSecondsnumberПереопределяет тайм-аут для встроенных пакетов создания эмбеддингов при индексировании памяти.
Если значение не задано, используется значение поставщика по умолчанию: 600 секунд для локальных или самостоятельно размещённых поставщиков, таких как local, ollama и lmstudio, и 120 секунд для размещённых поставщиков. Увеличьте это значение, если локальные пакеты создания эмбеддингов, ограниченные производительностью CPU, работают исправно, но медленно.
Поведение индексирования
Все параметры находятся в memorySearch.sync, если не указано иное:
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
onSessionStart |
boolean |
true |
Синхронизировать индекс памяти при запуске сеанса |
onSearch |
boolean |
true |
Выполнять отложенную синхронизацию при поиске после обнаружения изменений содержимого |
watch |
boolean |
true |
Отслеживать файлы памяти (chokidar) и планировать переиндексацию при изменениях |
watchDebounceMs |
number |
1500 |
Интервал устранения дребезга для объединения частых событий наблюдения за файлами |
intervalMinutes |
number |
0 |
Интервал периодической переиндексации в минутах (0 отключает её) |
sessions.postCompactionForce |
boolean |
true |
Принудительно переиндексировать сеанс после обновлений транскрипта, вызванных Compaction |
chunking.tokensnumberРазмер фрагмента в токенах, используемый при разделении источников памяти перед созданием эмбеддингов (по умолчанию: 400).
chunking.overlapnumberПерекрытие в токенах между соседними фрагментами для сохранения контекста вблизи границ разделения (по умолчанию: 80).
Конфигурация гибридного поиска
Все параметры находятся в memorySearch.query:
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
maxResults |
number |
6 |
Максимальное число результатов из памяти перед внедрением |
minScore |
number |
0.35 |
Минимальная оценка релевантности для включения результата |
И в memorySearch.query.hybrid:
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
boolean |
true |
Включить гибридный поиск BM25 + векторный поиск |
vectorWeight |
number |
0.7 |
Вес векторных оценок (0–1) |
textWeight |
number |
0.3 |
Вес оценок BM25 (0–1) |
candidateMultiplier |
number |
4 |
Множитель размера пула кандидатов |
MMR (разнообразие)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
mmr.enabled |
boolean |
false |
Включить повторное ранжирование MMR |
mmr.lambda |
number |
0.7 |
0 = максимальное разнообразие, 1 = максимальная релевантность |
Временное затухание (давность)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
temporalDecay.enabled |
boolean |
false |
Включить повышение оценки за давность |
temporalDecay.halfLifeDays |
number |
30 |
Оценка уменьшается вдвое каждые N дней |
Неустаревающие файлы (MEMORY.md, файлы без даты в memory/) никогда не подвергаются затуханию.
Полный пример
{ agents: { defaults: { memorySearch: { query: { maxResults: 6, minScore: 0.35, hybrid: { vectorWeight: 0.7, textWeight: 0.3, mmr: { enabled: true, lambda: 0.7 }, temporalDecay: { enabled: true, halfLifeDays: 30 }, }, }, }, }, },}Дополнительные пути памяти
| Ключ | Тип | Описание |
|---|---|---|
extraPaths |
string[] |
Дополнительные каталоги или файлы для индексирования |
{ 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.enabled |
boolean |
false |
Включить мультимодальное индексирование |
multimodal.modalities |
string[] |
-- | ["image"], ["audio"] или ["all"] |
multimodal.maxFileBytes |
number |
10485760 |
Максимальный размер файла для индексирования (10 MiB) |
Поддерживаемые форматы: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (изображения); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (аудио).
Кеш эмбеддингов
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
cache.enabled |
boolean |
true |
Кешировать эмбеддинги фрагментов в SQLite |
cache.maxEntries |
number |
не задано | Приблизительная верхняя граница кеша эмбеддингов |
Предотвращает повторное создание эмбеддингов для неизменённого текста при переиндексировании или обновлении расшифровок. Оставьте maxEntries незаданным для неограниченного кеша; задайте его, если рост занимаемого места на диске важнее максимальной скорости переиндексирования. Если значение задано, после превышения кешем лимита сначала удаляются самые старые записи по времени последнего обновления.
Пакетное индексирование
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
Параллельные встраиваемые эмбеддинги |
remote.batch.enabled |
boolean |
false |
Включить API пакетных эмбеддингов |
remote.batch.concurrency |
number |
2 |
Параллельные пакетные задания |
remote.batch.wait |
boolean |
true |
Ожидать завершения пакетной обработки |
remote.batch.pollIntervalMs |
number |
2000 |
Интервал опроса |
remote.batch.timeoutMinutes |
number |
60 |
Тайм-аут пакетной обработки |
Доступно для gemini, openai и voyage. Пакетная обработка OpenAI обычно быстрее и дешевле всего для массового заполнения больших объёмов данных.
remote.nonBatchConcurrency управляет параллельными вызовами создания эмбеддингов, используемыми локальными или самостоятельно размещёнными провайдерами, а также облачными провайдерами, когда их API пакетной обработки не задействованы. При индексировании без пакетной обработки Ollama по умолчанию использует 1, чтобы не перегружать небольшие локальные серверы; на более мощных машинах задайте большее значение.
Этот параметр не связан с sync.embeddingBatchTimeoutSeconds, который управляет тайм-аутом параллельных вызовов создания эмбеддингов.
Поиск в памяти сеансов (экспериментальная функция)
Индексируйте расшифровки сеансов и предоставляйте их через memory_search:
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
experimental.sessionMemory |
boolean |
false |
Включить индексирование сеансов |
sources |
string[] |
["memory"] |
Добавить "sessions", чтобы включить расшифровки |
sync.sessions.deltaBytes |
number |
100000 |
Порог количества байтов для переиндексирования |
sync.sessions.deltaMessages |
number |
50 |
Порог количества сообщений для переиндексирования |
Результаты из расшифровок сеансов также подчиняются
tools.sessions.visibility. Стандартная область видимости
tree предоставляет доступ только к текущему сеансу и созданным им сеансам. Чтобы
из другого сеанса, например личной переписки, получить данные из несвязанного сеанса того же агента,
запущенного через Gateway, намеренно расширьте область видимости до agent (или до all, только
если также требуется поиск между агентами и это разрешено политикой взаимодействия агентов).
В приведённых ниже примерах эти параметры находятся в agents.defaults. Можно также
применить эквивалентные параметры memorySearch в переопределении для отдельного агента, если
индексировать расшифровки сеансов и выполнять по ним поиск должен только один агент.
Для получения данных из Gateway в личной переписке в рамках одного агента:
Встроенный бэкенд
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, tools: { sessions: { visibility: "agent" }, },}Бэкенд QMD
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, memory: { backend: "qmd", qmd: { sessions: { enabled: true }, }, }, tools: { sessions: { visibility: "agent" }, },}При использовании QMD параметры agents.defaults.memorySearch.experimental.sessionMemory и
sources: ["sessions"] сами по себе не экспортируют расшифровки в QMD. Также задайте
memory.qmd.sessions.enabled: true.
Ускорение векторных операций SQLite (sqlite-vec)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
Использовать sqlite-vec для векторных запросов |
store.vector.extensionPath |
string |
встроенный | Переопределить путь к sqlite-vec |
Если sqlite-vec недоступен, OpenClaw автоматически использует вычисление косинусного сходства внутри процесса.
Хранилище индекса
Встроенные индексы памяти хранятся в базе данных OpenClaw SQLite каждого агента по адресу
agents/<agentId>/agent/openclaw-agent.sqlite.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
store.fts.tokenizer |
string |
unicode61 |
Токенизатор FTS5 (unicode61 или trigram) |
Конфигурация бэкенда QMD
Задайте memory.backend = "qmd", чтобы включить его. Все параметры QMD находятся в memory.qmd:
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
command |
string |
qmd |
Путь к исполняемому файлу QMD; задайте абсолютный путь, если служебный PATH отличается от используемого в командной оболочке |
searchMode |
string |
search |
Команда поиска: search, vsearch, query |
rerank |
boolean |
-- | Задайте false вместе с searchMode: "query" и QMD 2.1+, чтобы пропустить повторное ранжирование QMD |
includeDefaultMemory |
boolean |
true |
Автоматически индексировать MEMORY.md и memory/**/*.md |
paths[] |
array |
-- | Дополнительные пути: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
Экспортировать расшифровки сеансов в QMD |
sessions.retentionDays |
number |
-- | Срок хранения расшифровок |
sessions.exportDir |
string |
-- | Каталог экспорта |
searchMode: "search" использует только лексический поиск/BM25. В этом режиме OpenClaw не выполняет проверки готовности семантических векторов или обслуживание эмбеддингов QMD, в том числе во время memory status --deep; vsearch и query по-прежнему требуют готовности векторов и эмбеддингов QMD.
rerank: false изменяет только режим QMD query и требует QMD 2.1 или новее. В режиме прямого CLI OpenClaw передаёт --no-rerank; в режиме MCP на базе mcporter он передаёт rerank: false унифицированному инструменту запросов QMD. Оставьте параметр незаданным, чтобы использовать стандартное поведение QMD для повторного ранжирования запросов.
OpenClaw предпочитает актуальные структуры коллекций QMD и запросов MCP, но сохраняет совместимость со старыми выпусками QMD, при необходимости пробуя совместимые флаги шаблонов коллекций и прежние имена инструментов MCP. Когда QMD заявляет о поддержке нескольких фильтров коллекций, поиск по коллекциям одного источника выполняется одним процессом QMD; старые сборки QMD продолжают использовать путь совместимости с отдельным процессом для каждой коллекции. Под одним источником понимается совместная группировка постоянных коллекций памяти — стандартных файлов памяти и пользовательских путей, — а коллекции расшифровок сеансов остаются отдельной группой, чтобы при диверсификации источников по-прежнему использовались оба входа.
Интеграция с mcporter
Все параметры находятся в memory.qmd.mcporter. Направляет поисковые запросы QMD через долгоживущий MCP-демон mcporter вместо запуска qmd для каждого запроса, сокращая накладные расходы на холодный запуск больших моделей.
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
boolean |
false |
Направлять вызовы QMD через mcporter вместо запуска qmd для каждого запроса |
serverName |
string |
qmd |
Имя сервера mcporter, запускающего qmd mcp с lifecycle: keep-alive |
startDaemon |
boolean |
true |
Автоматически запускать демон mcporter, когда enabled имеет значение true |
Требуется установленный mcporter, доступный через PATH, а также настроенный сервер mcporter, запускающий qmd mcp. Оставьте эту функцию отключённой для более простых локальных конфигураций, в которых допустимы затраты на запуск отдельного процесса для каждого запроса.
Расписание обновлений
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
update.interval |
string |
5m |
Интервал обновления |
update.debounceMs |
number |
15000 |
Устранение дребезга при изменениях файлов |
update.onBoot |
boolean |
true |
Обновлять при открытии долгоживущего менеджера QMD; установите false, чтобы пропустить немедленное обновление при запуске |
update.startup |
string |
off |
Необязательная инициализация QMD при запуске Gateway: off, idle или immediate |
update.startupDelayMs |
number |
120000 |
Задержка перед запуском обновления startup: "idle" |
update.waitForBootSync |
boolean |
false |
Блокировать открытие менеджера до завершения его первоначального обновления |
update.embedInterval |
string |
60m |
Отдельная периодичность векторизации |
update.commandTimeoutMs |
number |
30000 |
Время ожидания команд обслуживания QMD (просмотр/добавление коллекций) |
update.updateTimeoutMs |
number |
120000 |
Время ожидания каждого цикла qmd update |
update.embedTimeoutMs |
number |
120000 |
Время ожидания каждого цикла qmd embed |
Ограничения
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
limits.maxResults |
number |
4 |
Максимальное количество результатов поиска |
limits.maxSnippetChars |
number |
450 |
Ограничение длины фрагмента |
limits.maxInjectedChars |
number |
2200 |
Ограничение общего количества внедряемых символов |
limits.timeoutMs |
number |
4000 |
Время ожидания команды QMD при поиске через QMD, включая memory_search; для настройки, синхронизации, встроенного резервного варианта и дополнительной работы сохраняется стандартный срок выполнения инструмента |
Область действия
Определяет, какие сеансы могут получать результаты поиска QMD. Схема совпадает с session.sendPolicy:
{ memory: { qmd: { scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, }, },}Поставляемая конфигурация по умолчанию разрешает только личные/прямые сообщения, запрещая группы и другие типы каналов. match.keyPrefix сопоставляется с нормализованным ключом сеанса; match.rawKeyPrefix сопоставляется с исходным ключом, включая agent:<id>:.
Ссылки на источники
memory.citations применяется ко всем бэкендам:
| Значение | Поведение |
|---|---|
auto (по умолчанию) |
Включать нижний колонтитул Source: <path#line> во фрагменты |
on |
Всегда включать нижний колонтитул |
off |
Не включать нижний колонтитул (путь всё равно передаётся агенту внутренним образом) |
Когда инициализация QMD при запуске Gateway включена, OpenClaw запускает QMD только для подходящих агентов. Если update.onBoot имеет значение true и периодическое обновление или векторизация не настроены, при запуске для начального обновления используется одноразовый менеджер, который затем закрывается. Если настроен интервал обновления или векторизации, при запуске открывается долгоживущий менеджер QMD, управляющий наблюдателем и таймерами интервалов; update.onBoot: false пропускает только немедленное начальное обновление.
Полный пример QMD
{ memory: { backend: "qmd", citations: "auto", qmd: { includeDefaultMemory: true, update: { interval: "5m", debounceMs: 15000 }, limits: { maxResults: 4, 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.
Пользовательские настройки
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
boolean |
false |
Полностью включить или отключить Dreaming |
frequency |
string |
0 3 * * * |
Необязательное расписание Cron для полного прохода Dreaming |
model |
string |
модель по умолчанию | Необязательное переопределение модели субагента Dream Diary |
phases.deep.maxPromotedSnippetTokens |
number |
160 |
Максимальное расчётное количество токенов, сохраняемое из каждого фрагмента краткосрочного воспоминания, перенесённого в MEMORY.md; метаданные происхождения остаются видимыми |
Пример
{ plugins: { entries: { "memory-core": { subagent: { allowModelOverride: true, allowedModels: ["anthropic/claude-sonnet-4-6"], }, config: { dreaming: { enabled: true, frequency: "0 3 * * *", model: "anthropic/claude-sonnet-4-6", }, }, }, }, },}