Motore di memoria QMD
QMD è un sidecar di ricerca local-first che viene eseguito insieme a OpenClaw. Combina BM25, ricerca vettoriale e reranking in un unico binario, e può indicizzare contenuti oltre ai file di memoria del tuo workspace.Cosa aggiunge rispetto al motore integrato
- Reranking ed espansione della query per un recupero migliore.
- Indicizza directory aggiuntive — documentazione del progetto, note del team, qualsiasi cosa su disco.
- Indicizza le trascrizioni delle sessioni — richiama conversazioni precedenti.
- Completamente locale — viene eseguito tramite Bun + node-llama-cpp, scarica automaticamente i modelli GGUF.
- Fallback automatico — se QMD non è disponibile, OpenClaw torna senza problemi al motore integrato.
Per iniziare
Prerequisiti
- Installa QMD:
npm install -g @tobilu/qmdoppurebun install -g @tobilu/qmd - Build di SQLite che consenta le estensioni (
brew install sqlitesu macOS). - QMD deve essere nel
PATHdel gateway. - macOS e Linux funzionano subito. Windows è supportato al meglio tramite WSL2.
Abilitazione
~/.openclaw/agents/<agentId>/qmd/ e gestisce automaticamente il ciclo di vita
del sidecar — raccolte, aggiornamenti ed esecuzioni di embedding sono gestiti per te.
Preferisce le forme correnti delle raccolte QMD e delle query MCP, ma continua a usare il fallback verso
i flag legacy delle raccolte --mask e i vecchi nomi degli strumenti MCP quando necessario.
Come funziona il sidecar
- OpenClaw crea raccolte a partire dai file di memoria del tuo workspace e da qualsiasi
memory.qmd.pathsconfigurato, quindi esegueqmd update+qmd embedall’avvio e periodicamente (per impostazione predefinita ogni 5 minuti). - La raccolta predefinita del workspace tiene traccia di
MEMORY.mdpiù l’alberomemory/.memory.mdin minuscolo rimane un fallback di bootstrap, non una raccolta QMD separata. - L’aggiornamento all’avvio viene eseguito in background così l’avvio della chat non viene bloccato.
- Le ricerche usano il
searchModeconfigurato (predefinito:search; supporta anchevsearchequery). Se una modalità fallisce, OpenClaw riprova conqmd query. - Se QMD fallisce completamente, OpenClaw torna al motore SQLite integrato.
La prima ricerca può essere lenta — QMD scarica automaticamente i modelli GGUF (~2 GB) per
il reranking e l’espansione della query alla prima esecuzione di
qmd query.Override dei modelli
Le variabili d’ambiente dei modelli QMD vengono propagate inalterate dal processo gateway, quindi puoi regolare QMD globalmente senza aggiungere nuova configurazione di OpenClaw:Indicizzazione di percorsi aggiuntivi
Indirizza QMD verso directory aggiuntive per renderle ricercabili:qmd/<collection>/<relative-path> nei
risultati di ricerca. memory_get riconosce questo prefisso e legge dalla corretta
radice della raccolta.
Indicizzazione delle trascrizioni delle sessioni
Abilita l’indicizzazione delle sessioni per richiamare conversazioni precedenti:~/.openclaw/agents/<id>/qmd/sessions/.
Ambito di ricerca
Per impostazione predefinita, i risultati di ricerca QMD vengono mostrati nelle sessioni dirette e di canale (non nei gruppi). Configuramemory.qmd.scope per modificarlo:
Citazioni
Quandomemory.citations è auto oppure on, gli snippet di ricerca includono un
piè di pagina Source: <path#line>. Imposta memory.citations = "off" per omettere il piè di pagina
continuando comunque a passare internamente il percorso all’agente.
Quando usarlo
Scegli QMD quando hai bisogno di:- Reranking per risultati di qualità superiore.
- Cercare documentazione di progetto o note al di fuori del workspace.
- Richiamare conversazioni di sessioni passate.
- Ricerca completamente locale senza chiavi API.
Risoluzione dei problemi
QMD non trovato? Assicurati che il binario sia nelPATH del gateway. Se OpenClaw
viene eseguito come servizio, crea un link simbolico:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd.
Prima ricerca molto lenta? QMD scarica i modelli GGUF al primo utilizzo. Preriscaldalo
con qmd query "test" usando le stesse directory XDG usate da OpenClaw.
La ricerca va in timeout? Aumenta memory.qmd.limits.timeoutMs (predefinito: 4000ms).
Impostalo a 120000 per hardware più lento.
Risultati vuoti nelle chat di gruppo? Controlla memory.qmd.scope — per impostazione predefinita
consente solo sessioni dirette e di canale.
Repo temporanei visibili dal workspace che causano ENAMETOOLONG o indicizzazione non funzionante?
L’attraversamento QMD attualmente segue il comportamento dello scanner QMD sottostante invece delle
regole sui collegamenti simbolici del motore integrato di OpenClaw. Mantieni i checkout temporanei di monorepo in
directory nascoste come .tmp/ o fuori dalle radici QMD indicizzate finché QMD non esporrà
un attraversamento sicuro rispetto ai cicli o controlli di esclusione espliciti.
Configurazione
Per l’intera superficie di configurazione (memory.qmd.*), le modalità di ricerca, gli intervalli di aggiornamento,
le regole di ambito e tutti gli altri controlli, consulta il
Riferimento della configurazione della memoria.