Pular para o conteúdo principal

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

Esta página lista todos os ajustes de configuração da busca de memória do OpenClaw. Para visões conceituais gerais, consulte: Todas as configurações de busca de memória ficam em agents.defaults.memorySearch no openclaw.json, salvo indicação em contrário. Se você estiver procurando a alternância de recurso de active memory e a configuração do subagente, ela fica em plugins.entries.active-memory, e não em memorySearch. A Active Memory usa um modelo de dois critérios:
  1. o Plugin precisa estar ativado e apontar para o id do agente atual
  2. a solicitação precisa ser uma sessão de chat interativa persistente elegível
Consulte Active Memory para o modelo de ativação, a configuração controlada pelo Plugin, a persistência de transcrições e o padrão de implantação segura.

Seleção de provedor

ChaveTipoPadrãoDescrição
providerstringdetectado automaticamenteID do adaptador de embedding: bedrock, gemini, github-copilot, local, mistral, ollama, openai, voyage
modelstringpadrão do provedorNome do modelo de embedding
fallbackstring"none"ID do adaptador de fallback quando o primário falha
enabledbooleantrueAtiva ou desativa 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. github-copilot — se um token do GitHub Copilot puder ser resolvido (variável de ambiente ou perfil de autenticação).
  3. openai — se uma chave da OpenAI puder ser resolvida.
  4. gemini — se uma chave do Gemini puder ser resolvida.
  5. voyage — se uma chave da Voyage puder ser resolvida.
  6. mistral — se uma chave da Mistral puder ser resolvida.
  7. bedrock — se a cadeia de credenciais do AWS SDK for resolvida (função da instância, chaves de acesso, perfil, SSO, identidade web ou configuração compartilhada).
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 Bedrock usa a cadeia de credenciais padrão do AWS SDK em vez disso (funções de instância, SSO, chaves de acesso).
ProvedorVariável de ambienteChave de configuração
Bedrockcadeia de credenciais AWSNão precisa de chave de API
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKENPerfil de autenticação via login do dispositivo
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (placeholder)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
O OAuth do Codex cobre apenas chat/completions e não atende solicitações de embedding.

Configuração de endpoint remoto

Para endpoints OpenAI-compatíveis personalizados ou para sobrescrever padrões do provedor:
ChaveTipoDescrição
remote.baseUrlstringURL base da API personalizada
remote.apiKeystringSobrescreve a chave de API
remote.headersobjectCabeçalhos 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 aciona automaticamente uma reindexação completa.

Configuração de embedding do Bedrock

O Bedrock usa a cadeia de credenciais padrão do AWS SDK — não são necessárias chaves de API. Se o OpenClaw estiver sendo executado no EC2 com uma função de instância habilitada para Bedrock, basta definir o provedor e o modelo:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
ChaveTipoPadrãoDescrição
modelstringamazon.titan-embed-text-v2:0Qualquer ID de modelo de embedding do Bedrock
outputDimensionalitynumberpadrão do modeloPara Titan V2: 256, 512 ou 1024

Modelos compatíveis

Os modelos a seguir são compatíveis (com detecção de família e dimensões padrão):
ID do modeloProvedorDimensões padrãoDimensões configuráveis
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Variantes com sufixo de throughput (por exemplo, amazon.titan-embed-text-v1:2:8k) herdam a configuração do modelo base.

Autenticação

A autenticação do Bedrock usa a ordem padrão de resolução de credenciais do AWS SDK:
  1. Variáveis de ambiente (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Cache de token SSO
  3. Credenciais de token de identidade web
  4. Arquivos compartilhados de credenciais e configuração
  5. Credenciais de metadados do ECS ou EC2
A região é resolvida a partir de AWS_REGION, AWS_DEFAULT_REGION, do baseUrl do provedor amazon-bedrock, ou assume o padrão us-east-1.

Permissões de IAM

A função ou usuário do IAM precisa de:
{
  "Effect": "Allow",
  "Action": "bedrock:InvokeModel",
  "Resource": "*"
}
Para princípio do menor privilégio, restrinja InvokeModel ao modelo específico:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0

Configuração de embedding local

ChaveTipoPadrãoDescrição
local.modelPathstringbaixado automaticamenteCaminho para o arquivo do 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
enabledbooleantrueAtiva a busca híbrida BM25 + vetorial
vectorWeightnumber0.7Peso para pontuações vetoriais (0-1)
textWeightnumber0.3Peso para pontuações de BM25 (0-1)
candidateMultipliernumber4Multiplicador do tamanho do pool de candidatos

MMR (diversidade)

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

Decaimento temporal (recência)

ChaveTipoPadrãoDescrição
temporalDecay.enabledbooleanfalseAtiva o ganho por recência
temporalDecay.halfLifeDaysnumber30A pontuação cai pela metade a cada N dias
Arquivos perenes (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 de memória adicionais

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: a engine integrada ignora symlinks, enquanto o QMD segue o comportamento do scanner QMD subjacente. Para busca de transcrições entre 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 duplicata.

Memória multimodal (Gemini)

Indexe imagens e áudio junto com Markdown usando Gemini Embedding 2:
ChaveTipoPadrãoDescrição
multimodal.enabledbooleanfalseAtiva a 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 restritas a Markdown. Requer gemini-embedding-2-preview. fallback precisa ser "none". Formatos compatíveis: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (imagens); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (áudio).

Cache de embeddings

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

Indexação em lote

ChaveTipoPadrãoDescrição
remote.batch.enabledbooleanfalseAtiva 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.timeoutMinutesnumberTempo limite do lote
Disponível para openai, gemini e voyage. O lote da OpenAI normalmente é o mais rápido e barato para grandes preenchimentos retroativos.

Busca na memória da sessão (experimental)

Indexe transcrições de sessão e apresente-as via memory_search:
ChaveTipoPadrãoDescrição
experimental.sessionMemorybooleanfalseAtiva a indexação de sessões
sourcesstring[]["memory"]Adicione "sessions" para incluir transcrições
sync.sessions.deltaBytesnumber100000Limite em bytes para reindexação
sync.sessions.deltaMessagesnumber50Limite de mensagens para reindexação
A indexação de sessão é opt-in e é executada 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 do SQLite (sqlite-vec)

ChaveTipoPadrãoDescrição
store.vector.enabledbooleantrueUsa sqlite-vec para consultas vetoriais
store.vector.extensionPathstringbundledSobrescreve o caminho do sqlite-vec
Quando o sqlite-vec não está disponível, o OpenClaw recorre automaticamente à 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 ativar. Todas as configurações do QMD ficam em memory.qmd:
ChaveTipoPadrãoDescrição
commandstringqmdCaminho do executável do 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
O OpenClaw prefere os formatos atuais de coleção e consulta MCP do QMD, mas mantém versões antigas do QMD funcionando ao recorrer a flags legadas de coleção --mask e a nomes antigos de ferramentas MCP quando necessário. As substituições de modelo do QMD permanecem do lado do QMD, não na configuração do OpenClaw. Se você precisar substituir globalmente os modelos do QMD, defina variáveis de ambiente como QMD_EMBED_MODEL, QMD_RERANK_MODEL e QMD_GENERATE_MODEL no ambiente de execução do Gateway.

Agenda de atualização

ChaveTipoPadrãoDescrição
update.intervalstring5mIntervalo de atualização
update.debounceMsnumber15000Debounce de alterações de arquivos
update.onBootbooleantrueAtualiza na inicialização
update.waitForBootSyncbooleanfalseBloqueia a inicialização até a atualização terminar
update.embedIntervalstringCadência separada para embeddings
update.commandTimeoutMsnumberTempo limite para comandos do QMD
update.updateTimeoutMsnumberTempo limite para operações de atualização do QMD
update.embedTimeoutMsnumberTempo limite para operações de embedding do QMD

Limites

ChaveTipoPadrãoDescrição
limits.maxResultsnumber6Máximo de resultados de busca
limits.maxSnippetCharsnumberLimita o comprimento do snippet
limits.maxInjectedCharsnumberLimita o total de caracteres injetados
limits.timeoutMsnumber4000Tempo limite 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 enviado permite sessões diretas e de canal, mas ainda nega grupos. O padrão é somente 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

Dreaming é configurado em plugins.entries.memory-core.config.dreaming, não em agents.defaults.memorySearch. Dreaming é executado como uma única varredura agendada e usa internamente as fases light/deep/REM como detalhe de implementação. Para o comportamento conceitual e comandos slash, consulte Dreaming.

Configurações do usuário

ChaveTipoPadrãoDescrição
enabledbooleanfalseAtiva ou desativa totalmente o Dreaming
frequencystring0 3 * * *Cadência Cron opcional para a varredura completa do Dreaming

Exemplo

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
          },
        },
      },
    },
  },
}
Observações:
  • O Dreaming grava o estado da máquina em memory/.dreams/.
  • O Dreaming grava saída narrativa legível por humanos em DREAMS.md (ou dreams.md existente).
  • A política e os limites das fases light/deep/REM são comportamento interno, não configuração voltada ao usuário.