Vai al contenuto principale

Ricerca nella memory

memory_search trova note rilevanti dai tuoi file di memory, anche quando la formulazione è diversa dal testo originale. Funziona indicizzando la memory in piccoli blocchi e cercandoli usando embedding, parole chiave o entrambi.

Avvio rapido

Se hai configurato una chiave API OpenAI, Gemini, Voyage o Mistral, la ricerca nella memory funziona automaticamente. Per impostare esplicitamente un provider:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai", // or "gemini", "local", "ollama", etc.
      },
    },
  },
}
Per embedding locali senza chiave API, usa provider: "local" (richiede node-llama-cpp).

Provider supportati

ProviderIDRichiede chiave APINote
OpenAIopenaiRilevato automaticamente, veloce
GeminigeminiSupporta l’indicizzazione di immagini/audio
VoyagevoyageRilevato automaticamente
MistralmistralRilevato automaticamente
OllamaollamaNoLocale, va impostato esplicitamente
LocallocalNoModello GGUF, download di ~0.6 GB

Come funziona la ricerca

OpenClaw esegue in parallelo due percorsi di recupero e unisce i risultati:
  • Ricerca vettoriale trova note con significato simile (“gateway host” corrisponde a “the machine running OpenClaw”).
  • Ricerca per parole chiave BM25 trova corrispondenze esatte (ID, stringhe di errore, chiavi di configurazione).
Se è disponibile un solo percorso (niente embedding o niente FTS), viene eseguito solo l’altro.

Migliorare la qualità della ricerca

Due funzionalità facoltative aiutano quando hai una grande cronologia di note:

Decadimento temporale

Le note vecchie perdono gradualmente peso nel ranking, così le informazioni recenti emergono per prime. Con l’half-life predefinita di 30 giorni, una nota del mese scorso ottiene il 50% del suo peso originale. I file evergreen come MEMORY.md non decadono mai.
Abilita il decadimento temporale se il tuo agente ha mesi di note quotidiane e le informazioni obsolete continuano a classificarsi sopra il contesto recente.

MMR (diversità)

Riduce i risultati ridondanti. Se cinque note menzionano tutte la stessa configurazione del router, MMR garantisce che i risultati principali coprano argomenti diversi invece di ripetersi.
Abilita MMR se memory_search continua a restituire snippet quasi duplicati da diverse note quotidiane.

Abilitare entrambi

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            mmr: { enabled: true },
            temporalDecay: { enabled: true },
          },
        },
      },
    },
  },
}

Memory multimodale

Con Gemini Embedding 2, puoi indicizzare immagini e file audio insieme al Markdown. Le query di ricerca restano testuali, ma trovano corrispondenze con contenuti visivi e audio. Vedi il riferimento di configurazione della memory per la configurazione.

Ricerca nella memory della sessione

Puoi facoltativamente indicizzare le trascrizioni delle sessioni in modo che memory_search possa richiamare conversazioni precedenti. Questa funzionalità è attivabile tramite memorySearch.experimental.sessionMemory. Vedi il riferimento di configurazione per i dettagli.

Risoluzione dei problemi

Nessun risultato? Esegui openclaw memory status per controllare l’indice. Se è vuoto, esegui openclaw memory index --force. Solo corrispondenze per parole chiave? Il tuo provider di embedding potrebbe non essere configurato. Controlla openclaw memory status --deep. Testo CJK non trovato? Ricostruisci l’indice FTS con openclaw memory index --force.

Approfondimenti