Pular para o conteúdo principal

Referência de configuração de memória

Esta página lista todos os ajustes de configuração para a busca de memória do OpenClaw. Para visões gerais conceituais, consulte: Todas as configurações de busca de memória ficam em agents.defaults.memorySearch no openclaw.json, salvo indicação em contrário.

Seleção de provedor

ChaveTipoPadrãoDescrição
providerstringdetectado automaticamenteID do adaptador de embedding: openai, gemini, voyage, mistral, ollama, local
modelstringpadrão do provedorNome do modelo de embedding
fallbackstring"none"ID do adaptador de fallback quando o primário falha
enabledbooleantrueHabilita ou desabilita a busca de memória

Ordem de detecção automática

Quando provider não está definido, o OpenClaw seleciona o primeiro disponível:
  1. local — se memorySearch.local.modelPath estiver configurado e o arquivo existir.
  2. openai — se uma chave OpenAI puder ser resolvida.
  3. gemini — se uma chave Gemini puder ser resolvida.
  4. voyage — se uma chave Voyage puder ser resolvida.
  5. mistral — se uma chave da Mistral puder ser resolvida.
ollama é compatível, mas não é detectado automaticamente (defina-o explicitamente).

Resolução de chave de API

Embeddings remotos exigem uma chave de API. O OpenClaw resolve isso a partir de: perfis de autenticação, models.providers.*.apiKey ou variáveis de ambiente.
ProvedorVariável de ambienteChave de configuração
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 (placeholder)
O OAuth do Codex cobre apenas chat/completions e não atende a solicitações de embedding.

Configuração de endpoint remoto

Para endpoints personalizados compatíveis com OpenAI ou para sobrescrever padrões do provedor:
ChaveTipoDescrição
remote.baseUrlstringURL base personalizada da API
remote.apiKeystringSobrescreve a chave de API
remote.headersobjectHeaders HTTP extras (mesclados com os padrões do provedor)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Configuração específica do Gemini

ChaveTipoPadrãoDescrição
modelstringgemini-embedding-001Também oferece suporte a gemini-embedding-2-preview
outputDimensionalitynumber3072Para Embedding 2: 768, 1536 ou 3072
Alterar o modelo ou outputDimensionality dispara automaticamente uma reindexação completa.

Configuração de embedding local

ChaveTipoPadrãoDescrição
local.modelPathstringbaixado automaticamenteCaminho para o arquivo de modelo GGUF
local.modelCacheDirstringpadrão do node-llama-cppDiretório de cache para modelos baixados
Modelo padrão: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, baixado automaticamente). Exige build nativo: pnpm approve-builds e depois pnpm rebuild node-llama-cpp.

Configuração de busca híbrida

Tudo em memorySearch.query.hybrid:
ChaveTipoPadrãoDescrição
enabledbooleantrueHabilita busca híbrida BM25 + vetorial
vectorWeightnumber0.7Peso para pontuações vetoriais (0-1)
textWeightnumber0.3Peso para pontuações BM25 (0-1)
candidateMultipliernumber4Multiplicador do tamanho do conjunto de candidatos

MMR (diversidade)

ChaveTipoPadrãoDescrição
mmr.enabledbooleanfalseHabilita reranqueamento por MMR
mmr.lambdanumber0.70 = máxima diversidade, 1 = máxima relevância

Decaimento temporal (recência)

ChaveTipoPadrãoDescrição
temporalDecay.enabledbooleanfalseHabilita boost de recência
temporalDecay.halfLifeDaysnumber30A pontuação cai pela metade a cada N dias
Arquivos evergreen (MEMORY.md, arquivos sem data em memory/) nunca sofrem decaimento.

Exemplo completo

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

Caminhos adicionais de memória

ChaveTipoDescrição
extraPathsstring[]Diretórios ou arquivos adicionais para indexar
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Os caminhos podem ser absolutos ou relativos ao workspace. Diretórios são varridos recursivamente em busca de arquivos .md. O tratamento de symlinks depende do backend ativo: o engine integrado ignora symlinks, enquanto o QMD segue o comportamento do scanner QMD subjacente. Para busca entre transcrições de vários agentes com escopo por agente, use agents.list[].memorySearch.qmd.extraCollections em vez de memory.qmd.paths. Essas coleções extras seguem o mesmo formato { path, name, pattern? }, mas são mescladas por agente e podem preservar nomes compartilhados explícitos quando o caminho aponta para fora do workspace atual. Se o mesmo caminho resolvido aparecer em memory.qmd.paths e memorySearch.qmd.extraCollections, o QMD mantém a primeira entrada e ignora a duplicada.

Memória multimodal (Gemini)

Indexe imagens e áudio junto com Markdown usando Gemini Embedding 2:
ChaveTipoPadrãoDescrição
multimodal.enabledbooleanfalseHabilita indexação multimodal
multimodal.modalitiesstring[]["image"], ["audio"] ou ["all"]
multimodal.maxFileBytesnumber10000000Tamanho máximo de arquivo para indexação
Aplica-se apenas a arquivos em extraPaths. As raízes de memória padrão continuam apenas com Markdown. Exige gemini-embedding-2-preview. fallback deve ser "none". Formatos compatíveis: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (imagens); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (áudio).

Cache de embedding

ChaveTipoPadrãoDescrição
cache.enabledbooleanfalseArmazena embeddings de chunks em cache no SQLite
cache.maxEntriesnumber50000Máximo de embeddings em cache
Evita reprocessar embeddings de texto inalterado durante reindexação ou atualizações de transcrições.

Indexação em lote

ChaveTipoPadrãoDescrição
remote.batch.enabledbooleanfalseHabilita a API de embedding em lote
remote.batch.concurrencynumber2Jobs em lote paralelos
remote.batch.waitbooleantrueAguarda a conclusão do lote
remote.batch.pollIntervalMsnumberIntervalo de polling
remote.batch.timeoutMinutesnumberTimeout do lote
Disponível para openai, gemini e voyage. O batch do OpenAI normalmente é o mais rápido e barato para grandes backfills.

Busca de memória de sessão (experimental)

Indexe transcrições de sessão e exponha-as via memory_search:
ChaveTipoPadrãoDescrição
experimental.sessionMemorybooleanfalseHabilita indexação de sessão
sourcesstring[]["memory"]Adicione "sessions" para incluir transcrições
sync.sessions.deltaBytesnumber100000Limite em bytes para reindexação
sync.sessions.deltaMessagesnumber50Limite em mensagens para reindexação
A indexação de sessões é opt-in e roda de forma assíncrona. Os resultados podem ficar ligeiramente desatualizados. Os logs de sessão ficam em disco, então trate o acesso ao sistema de arquivos como o limite de confiança.

Aceleração vetorial SQLite (sqlite-vec)

ChaveTipoPadrãoDescrição
store.vector.enabledbooleantrueUsa sqlite-vec para consultas vetoriais
store.vector.extensionPathstringempacotadoSobrescreve o caminho do sqlite-vec
Quando sqlite-vec não está disponível, o OpenClaw volta automaticamente para similaridade de cosseno em processo.

Armazenamento de índice

ChaveTipoPadrãoDescrição
store.pathstring~/.openclaw/memory/{agentId}.sqliteLocal do índice (compatível com o token {agentId})
store.fts.tokenizerstringunicode61Tokenizer FTS5 (unicode61 ou trigram)

Configuração do backend QMD

Defina memory.backend = "qmd" para habilitar. Todas as configurações do QMD ficam em memory.qmd:
ChaveTipoPadrãoDescrição
commandstringqmdCaminho do executável QMD
searchModestringsearchComando de busca: search, vsearch, query
includeDefaultMemorybooleantrueIndexa automaticamente MEMORY.md + memory/**/*.md
paths[]arrayCaminhos extras: { name, path, pattern? }
sessions.enabledbooleanfalseIndexa transcrições de sessão
sessions.retentionDaysnumberRetenção de transcrições
sessions.exportDirstringDiretório de exportação

Agenda de atualização

ChaveTipoPadrãoDescrição
update.intervalstring5mIntervalo de atualização
update.debounceMsnumber15000Debounce de alterações em arquivos
update.onBootbooleantrueAtualiza na inicialização
update.waitForBootSyncbooleanfalseBloqueia a inicialização até a atualização terminar
update.embedIntervalstringCadência separada de embedding
update.commandTimeoutMsnumberTimeout para comandos QMD
update.updateTimeoutMsnumberTimeout para operações de atualização QMD
update.embedTimeoutMsnumberTimeout para operações de embedding QMD

Limites

ChaveTipoPadrãoDescrição
limits.maxResultsnumber6Máximo de resultados de busca
limits.maxSnippetCharsnumberLimita o tamanho do snippet
limits.maxInjectedCharsnumberLimita o total de caracteres injetados
limits.timeoutMsnumber4000Timeout da busca

Escopo

Controla quais sessões podem receber resultados de busca do QMD. Mesmo esquema de session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
O padrão é apenas DM. match.keyPrefix corresponde à chave de sessão normalizada; match.rawKeyPrefix corresponde à chave bruta, incluindo agent:<id>:.

Citações

memory.citations aplica-se a todos os backends:
ValorComportamento
auto (padrão)Inclui rodapé Source: <path#line> nos snippets
onSempre inclui o rodapé
offOmite o rodapé (o caminho ainda é passado internamente ao agente)

Exemplo completo de 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 (experimental)

O Dreaming é configurado em plugins.entries.memory-core.config.dreaming, não em agents.defaults.memorySearch. Para detalhes conceituais e comandos de chat, consulte Dreaming.
ChaveTipoPadrão do presetDescrição
modestring"off"Preset: off, core, rem ou deep
cronstringpadrão do presetSobrescreve a expressão cron da agenda
timezonestringfuso horário do usuárioFuso horário para avaliação da agenda
limitnumberpadrão do presetMáximo de candidatos a promover por ciclo
minScorenumberpadrão do presetPontuação ponderada mínima para promoção
minRecallCountnumberpadrão do presetLimite mínimo de contagem de recall
minUniqueQueriesnumberpadrão do presetLimite mínimo de contagem de consultas distintas

Padrões dos presets

ModoCadênciaminScoreminRecallCountminUniqueQueries
offDesabilitado
coreDiariamente às 3h0.7532
remA cada 6 horas0.8543
deepA cada 12 horas0.8033

Exemplo

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}