Visão geral da memória
Como a memória funciona.
Mecanismo integrado
Backend SQLite padrão.
Mecanismo QMD
Processo auxiliar local-first.
Busca de memória
Pipeline de busca e ajustes.
Active Memory
Subagente de memória para sessões interativas.
agents.defaults.memorySearch no openclaw.json (ou em uma substituição agents.list[].memorySearch por agente), salvo indicação em contrário.
Se estiver procurando a opção de ativação do recurso Active Memory e a configuração do subagente, elas ficam em
plugins.entries.active-memory, e não em memorySearch.A Active Memory usa um modelo de duas condições:- o Plugin deve estar ativado e direcionado ao ID do agente atual
- a solicitação deve ser uma sessão de chat persistente, interativa e qualificada
Seleção do provedor
Quando
provider não está definido, o OpenClaw usa embeddings da OpenAI. Defina provider
explicitamente para usar Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, um modelo GGUF local ou um endpoint /v1/embeddings compatível com OpenAI.
Configurações legadas que ainda especificam provider: "auto" são resolvidas como openai.
Quando provider não está definido, o provider: "auto" legado está presente ou
provider: "none" seleciona intencionalmente o modo somente FTS, a recuperação de memória ainda pode
usar a classificação lexical FTS quando os embeddings não estão disponíveis.
Provedores não locais definidos explicitamente falham de forma fechada. Se memorySearch.provider for definido como
um provedor concreto com backend remoto, como Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage ou um provedor personalizado
compatível com OpenAI, e esse provedor estiver indisponível em tempo de execução, memory_search
retornará um resultado de indisponibilidade em vez de usar silenciosamente a recuperação somente por FTS. Corrija a
configuração do provedor ou da autenticação, mude para um provedor acessível ou defina
provider: "none" se quiser usar deliberadamente a recuperação somente por FTS.
IDs de provedores personalizados
memorySearch.provider pode apontar para uma entrada models.providers.<id> personalizada para adaptadores de provedor específicos de memória, como ollama, ou para APIs de modelos compatíveis com OpenAI, como openai-responses / openai-completions. O OpenClaw resolve o proprietário api desse provedor para o adaptador de embeddings, preservando o ID personalizado do provedor para o tratamento do endpoint, da autenticação e do prefixo do modelo. Isso permite que configurações com várias GPUs ou vários hosts dediquem os embeddings de memória a um endpoint local específico:
Resolução da chave de API
Embeddings remotos exigem uma chave de API. O Bedrock usa a cadeia padrão de credenciais do AWS SDK (funções de instância, SSO, chaves de acesso ou uma chave de API do Bedrock).O OAuth do Codex abrange apenas chat/conclusões e não atende às solicitações de embeddings.
Configuração do endpoint remoto
Useprovider: "openai-compatible" para um servidor /v1/embeddings
genérico compatível com OpenAI que não deve herdar as credenciais globais de chat da OpenAI.
string
URL base personalizada da API.
string
Substituição da chave de API.
object
Cabeçalhos HTTP adicionais (mesclados com os padrões do provedor).
Configuração específica do provedor
Gemini
Gemini
Tipos de entrada compatíveis com OpenAI
Tipos de entrada compatíveis com OpenAI
Endpoints de embeddings compatíveis com OpenAI podem optar por incluir campos de solicitação Alterar esses valores afeta a identidade do cache de embeddings para indexação em lote pelo provedor e deve ser seguido por uma reindexação da memória quando o modelo upstream tratar os rótulos de maneira diferente.
input_type específicos do provedor. Isso é útil para modelos de embeddings assimétricos que exigem rótulos diferentes para embeddings de consultas e documentos.Bedrock
Bedrock
Configuração de embeddings do Bedrock
O Bedrock usa a cadeia padrão de credenciais do AWS SDK junto com um token de portador verificado pelo OpenClaw, portanto nenhuma chave de API é armazenada na configuração. Se o OpenClaw for executado no EC2 com uma função de instância habilitada para o Bedrock, basta definir o provedor e o modelo:Modelos compatíveis (com detecção de família e dimensões padrão):
As variantes com sufixo de taxa de transferência (por exemplo,
amazon.titan-embed-text-v1:2:8k) e os IDs de perfil de inferência com prefixo de região (por exemplo, us.amazon.titan-embed-text-v2:0) herdam a configuração do modelo base.Região: resolvida nesta ordem: a substituição memorySearch.remote.baseUrl, a configuração models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION e, por fim, o padrão us-east-1.Autenticação: o OpenClaw verifica primeiro AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY ou AWS_BEARER_TOKEN_BEDROCK e, em seguida, recorre à cadeia padrão de provedores de credenciais do AWS SDK:- Variáveis de ambiente (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), a menos queAWS_PROFILEtambém esteja definida - SSO (somente quando os campos de SSO estão configurados)
- Arquivos compartilhados de credenciais e configuração (
fromIni, incluiAWS_PROFILE) - Processo de credenciais (
credential_processno arquivo de configuração da AWS) - Credenciais de token de identidade da Web
- Credenciais de metadados de instância do ECS ou EC2
InvokeModel ao modelo específico:Local (GGUF + llama.cpp)
Local (GGUF + llama.cpp)
Instale primeiro o provedor oficial do llama.cpp:
openclaw plugins install @openclaw/llama-cpp-provider.
Modelo padrão: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, baixado automaticamente). Checkouts do código-fonte ainda exigem aprovação da compilação nativa: pnpm approve-builds e depois pnpm rebuild node-llama-cpp.Use a CLI independente para verificar o mesmo caminho de provedor usado pelo Gateway:local.contextSize também orientam o posicionamento automático de camadas na GPU pelo node-llama-cpp, para que os pesos do modelo e o contexto de embedding solicitado sejam acomodados em conjunto. openclaw memory status --deep informa os últimos dados conhecidos e registrados com data e hora sobre o backend do llama.cpp, dispositivo, descarregamento, contexto solicitado e memória após o carregamento pelo runtime; o status passivo não carrega um modelo.Defina provider: "local" explicitamente para embeddings GGUF locais. hf: e referências de modelo HTTP(S) são compatíveis com configurações locais explícitas (por meio da resolução de modelos do node-llama-cpp), mas não alteram o provedor padrão.Tempo limite de embedding em linha
number
Substitui o tempo limite dos lotes de embedding em linha durante a indexação da memória.Quando não definido, usa o padrão do provedor: 600 segundos para provedores locais/auto-hospedados, como
local, ollama e lmstudio, e 120 segundos para provedores hospedados. Aumente esse valor quando os lotes de embedding locais limitados pela CPU estiverem funcionando corretamente, mas lentamente.Comportamento da indexação
Todos emmemorySearch.sync, salvo indicação em contrário:
number
Tamanho do segmento em tokens usado ao dividir as fontes de memória antes do embedding (padrão: 400).
number
Sobreposição de tokens entre segmentos adjacentes para preservar o contexto próximo aos limites de divisão (padrão: 80).
Alterar
chunking.tokens ou chunking.overlap muda os limites dos segmentos e invalida a identidade do índice existente (consulte o Aviso em Seleção do provedor).Configuração da busca híbrida
Tudo emmemorySearch.query:
E em
memorySearch.query.hybrid:
- MMR (diversidade)
- Decaimento temporal (recenticidade)
Exemplo completo
Caminhos adicionais de memória
.md. O tratamento de links simbólicos depende do backend ativo: o mecanismo integrado ignora links simbólicos, enquanto o QMD segue o comportamento do scanner QMD subjacente.
Para a 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 adicionais seguem o mesmo formato de { 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 tanto em memory.qmd.paths quanto em 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 o Gemini Embedding 2:Aplica-se somente aos arquivos em
extraPaths. As raízes de memória padrão continuam aceitando apenas Markdown. Requer gemini-embedding-2-preview. fallback deve ser "none"..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (imagens); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (áudio).
Cache de embeddings
Evita gerar novamente embeddings de texto inalterado durante a reindexação ou atualizações de transcrições. Deixe
maxEntries não definido para um cache ilimitado; defina-o quando o crescimento do uso de disco for mais importante que a velocidade máxima de reindexação. Quando definido, as entradas mais antigas (pelo horário da última atualização) são removidas primeiro assim que o cache excede o limite.
Indexação em lote
Disponível para
gemini, openai e voyage. O processamento em lote da OpenAI geralmente é a opção mais rápida e econômica para grandes preenchimentos retroativos.
remote.nonBatchConcurrency controla as chamadas de embedding em linha usadas por provedores locais/auto-hospedados e provedores hospedados quando as APIs de lote do provedor não estão ativas. O Ollama usa 1 por padrão para indexação sem lote, a fim de evitar sobrecarregar hosts locais menores; defina um valor maior em máquinas mais potentes.
Isso é independente de sync.embeddingBatchTimeoutSeconds, que controla o tempo limite das chamadas de embedding em linha.
Pesquisa na memória da sessão (experimental)
Indexe transcrições de sessões e disponibilize-as por meio dememory_search:
Os resultados de transcrições de sessões também respeitam
tools.sessions.visibility. A visibilidade padrão
tree expõe apenas a sessão atual e as sessões que ela iniciou. Para
recuperar, a partir de uma sessão diferente, como uma mensagem direta, uma sessão não relacionada do mesmo agente despachada pelo Gateway,
amplie intencionalmente a visibilidade para agent (ou somente para all
quando a recuperação entre agentes também for necessária e a política entre agentes permitir).
Os exemplos abaixo colocam essas configurações em agents.defaults. Também é possível
aplicar configurações equivalentes de memorySearch em uma substituição por agente quando apenas um
agente deve indexar e pesquisar transcrições de sessões.
Para recuperação do Gateway para mensagens diretas no mesmo agente:
- Backend integrado
- Backend QMD
agents.defaults.memorySearch.experimental.sessionMemory e
sources: ["sessions"] não exportam transcrições para o QMD por si só. Defina também
memory.qmd.sessions.enabled: true.
Aceleração vetorial do SQLite (sqlite-vec)
Quando o sqlite-vec não está disponível, o OpenClaw recorre automaticamente à similaridade de cosseno no processo.
Armazenamento do índice
Os índices de memória integrados ficam no banco de dados SQLite do OpenClaw de cada agente emagents/<agentId>/agent/openclaw-agent.sqlite.
Configuração do backend QMD
Definamemory.backend = "qmd" para habilitá-lo. Todas as configurações do QMD ficam em memory.qmd:
searchMode: "search" usa apenas pesquisa lexical/BM25. O OpenClaw não executa verificações de prontidão vetorial semântica nem manutenção de embeddings do QMD nesse modo, inclusive durante memory status --deep; vsearch e query continuam exigindo a prontidão vetorial e os embeddings do QMD.
rerank: false altera apenas o modo query do QMD e requer o QMD 2.1 ou mais recente. No modo CLI direto, o OpenClaw passa --no-rerank; no modo MCP com mcporter, passa rerank: false para a ferramenta unificada de consulta do QMD. Deixe-o não definido para usar o comportamento padrão de reclassificação de consultas do QMD.
O OpenClaw dá preferência aos formatos atuais de coleções e consultas MCP do QMD, mas mantém versões mais antigas do QMD funcionando ao tentar, quando necessário, sinalizadores compatíveis de padrões de coleções e nomes antigos de ferramentas MCP. Quando o QMD anuncia compatibilidade com vários filtros de coleções, as coleções da mesma fonte são pesquisadas com um único processo do QMD; compilações antigas do QMD mantêm o caminho de compatibilidade por coleção. Mesma fonte significa que as coleções de memória persistente (arquivos de memória padrão mais caminhos personalizados) são agrupadas, enquanto as coleções de transcrições de sessões permanecem em um grupo separado para que a diversificação de fontes continue tendo ambas as entradas.
As substituições de modelos do QMD permanecem no lado do QMD, não na configuração do OpenClaw. Caso seja necessário 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.Integração com o mcporter
Tudo emmemory.qmd.mcporter. Encaminha as pesquisas do QMD por meio de um daemon MCP mcporter de longa duração, em vez de iniciar qmd a cada consulta, reduzindo a sobrecarga de inicialização a frio para modelos maiores.
Requer
mcporter instalado e disponível no PATH, além de um servidor mcporter configurado que execute qmd mcp. Mantenha desabilitado em configurações locais mais simples, nas quais o custo de iniciar um processo por consulta seja aceitável.
Programação de atualizações
Programação de atualizações
Limites
Limites
Escopo
Escopo
Controla quais sessões podem receber resultados de busca do QMD. Mesmo esquema de O padrão fornecido permite apenas mensagens diretas/sessões diretas, negando grupos e outros tipos de canal.
session.sendPolicy:match.keyPrefix corresponde à chave normalizada da sessão; match.rawKeyPrefix corresponde à chave bruta, incluindo agent:<id>:.Citações
Citações
memory.citations se aplica a todos os backends:update.onBoot for true e nenhuma manutenção por intervalo/embedding estiver configurada, a inicialização usará um gerenciador de execução única para a atualização de inicialização e o fechará. Se um intervalo de atualização ou embedding estiver configurado, a inicialização abrirá o gerenciador QMD de longa duração para que ele possa gerenciar o observador e os temporizadores de intervalo; update.onBoot: false ignora apenas a atualização imediata de inicialização.
Exemplo completo de QMD
Dreaming
Dreaming é configurado emplugins.entries.memory-core.config.dreaming, não em agents.defaults.memorySearch.
Dreaming é executado como uma única varredura agendada e usa fases internas leve/profunda/REM como detalhe de implementação.
Para consultar o comportamento conceitual e os comandos de barra, consulte Dreaming.
Configurações do usuário
Exemplo
- Dreaming grava o estado da máquina em
memory/.dreams/. - Dreaming grava a saída narrativa legível por humanos em
DREAMS.md(ou nodreams.mdexistente). dreaming.modelusa o controle de confiança existente para subagentes do plugin; definaplugins.entries.memory-core.subagent.allowModelOverride: trueantes de habilitá-lo.- O Dream Diary tenta novamente uma vez com o modelo padrão da sessão quando o modelo configurado não está disponível. Falhas de confiança ou de lista de permissões são registradas e não são repetidas silenciosamente.
- A política e os limites das fases leve/profunda/REM são comportamentos internos, não configurações voltadas ao usuário.