Geheugenoverzicht
Hoe geheugen werkt.
Ingebouwde engine
Standaard SQLite-backend.
QMD-engine
Lokale-first nevencomponent.
Geheugenzoekopdrachten
Zoekpijplijn en afstemming.
Active Memory
Geheugen-subagent voor interactieve sessies.
agents.defaults.memorySearch in openclaw.json, tenzij anders vermeld.
Als je zoekt naar de functieschakelaar voor Active Memory en de subagentconfiguratie, die staat onder
plugins.entries.active-memory in plaats van memorySearch.Active Memory gebruikt een model met twee poorten:- de Plugin moet zijn ingeschakeld en gericht zijn op de huidige agent-id
- de aanvraag moet een geschikte interactieve persistente chatsessie zijn
Providerselectie
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
provider | string | "openai" | Embeddingadapter-id zoals bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible of voyage; kan ook een geconfigureerde models.providers.<id> zijn waarvan api naar een geheugen-embeddingadapter of OpenAI-compatibele model-API wijst |
model | string | providerstandaard | Naam van het embeddingmodel |
fallback | string | "none" | Fallbackadapter-id wanneer de primaire adapter faalt |
enabled | boolean | true | Schakel geheugenzoekopdrachten in of uit |
provider niet is ingesteld, gebruikt OpenClaw OpenAI-embeddings. Stel provider
expliciet in om Gemini, Voyage, Mistral, DeepInfra, Bedrock, GitHub Copilot,
Ollama, een lokaal GGUF-model of een OpenAI-compatibel /v1/embeddings-eindpunt
te gebruiken. Verouderde configuraties die nog provider: "auto" zeggen, worden
opgelost naar openai.
Wanneer provider niet is ingesteld, de verouderde provider: "auto" aanwezig is, of
provider: "none" bewust de modus alleen met FTS selecteert, kan geheugenherinnering nog steeds
lexicale FTS-rangschikking gebruiken wanneer embeddings niet beschikbaar zijn.
Expliciete niet-lokale providers falen gesloten. Als je memorySearch.provider instelt op
een concrete extern ondersteunde provider zoals OpenAI, Gemini, Voyage, Mistral,
Bedrock, GitHub Copilot, DeepInfra, Ollama, LM Studio of een OpenAI-compatibele
aangepaste provider, en die provider is tijdens runtime niet beschikbaar, retourneert
memory_search een resultaat dat aangeeft dat dit niet beschikbaar is in plaats van stilzwijgend
alleen FTS-herinnering te gebruiken. Herstel de provider-/authconfiguratie, schakel over naar
een bereikbare provider, of stel provider: "none" in als je bewust alleen FTS-herinnering wilt.
Aangepaste provider-id’s
memorySearch.provider kan verwijzen naar een aangepaste models.providers.<id>-vermelding voor geheugenspecifieke provideradapters zoals ollama, of voor OpenAI-compatibele model-API’s zoals openai-responses / openai-completions. OpenClaw bepaalt de api-eigenaar van die provider voor de embeddingadapter, terwijl de aangepaste provider-id behouden blijft voor eindpunt-, auth- en modelprefixafhandeling. Hierdoor kunnen multi-GPU- of multi-hostopstellingen geheugenembeddings toewijzen aan een specifiek lokaal eindpunt:
API-sleutelresolutie
Externe embeddings vereisen een API-sleutel. Bedrock gebruikt in plaats daarvan de standaardreferentieketen van de AWS SDK (instancerollen, SSO, toegangssleutels).| Provider | Omgevingsvariabele | Configuratiesleutel |
|---|---|---|
| Bedrock | AWS-referentieketen | Geen API-sleutel nodig |
| DeepInfra | DEEPINFRA_API_KEY | models.providers.deepinfra.apiKey |
| Gemini | GEMINI_API_KEY | models.providers.google.apiKey |
| GitHub Copilot | COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN | Authprofiel via apparaatlogin |
| Mistral | MISTRAL_API_KEY | models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (placeholder) | — |
| OpenAI | OPENAI_API_KEY | models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY | models.providers.voyage.apiKey |
Codex OAuth dekt alleen chat/aanvullingen en voldoet niet voor embeddingaanvragen.
Configuratie van externe eindpunten
Gebruikprovider: "openai-compatible" voor een generieke OpenAI-compatibele
/v1/embeddings-server die geen globale OpenAI-chatreferenties moet overnemen.
Aangepaste basis-URL voor de API.
API-sleutel overschrijven.
Extra HTTP-headers (samengevoegd met providerstandaarden).
Providerspecifieke configuratie
Gemini
Gemini
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
model | string | gemini-embedding-001 | Ondersteunt ook gemini-embedding-2-preview |
outputDimensionality | number | 3072 | Voor Embedding 2: 768, 1536 of 3072 |
OpenAI-compatibele invoertypen
OpenAI-compatibele invoertypen
OpenAI-compatibele embeddingeindpunten kunnen providerspecifieke
Het wijzigen van deze waarden beïnvloedt de identiteit van de embeddingcache voor providerbatchindexering en moet worden gevolgd door een herindexering van het geheugen wanneer het upstreammodel de labels verschillend behandelt.
input_type-aanvraagvelden gebruiken. Dit is nuttig voor asymmetrische embeddingmodellen die verschillende labels vereisen voor query- en documentembeddings.| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
inputType | string | niet ingesteld | Gedeelde input_type voor query- en documentembeddings |
queryInputType | string | niet ingesteld | input_type tijdens query’s; overschrijft inputType |
documentInputType | string | niet ingesteld | Index-/document-input_type; overschrijft inputType |
Bedrock
Bedrock
Bedrock-embeddingconfiguratie
Bedrock gebruikt de standaardreferentieketen van de AWS SDK — er zijn geen API-sleutels nodig. Als OpenClaw op EC2 draait met een Bedrock-ingeschakelde instancerol, stel je alleen de provider en het model in:| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
model | string | amazon.titan-embed-text-v2:0 | Elk Bedrock-embeddingmodel-id |
outputDimensionality | number | modelstandaard | Voor Titan V2: 256, 512 of 1024 |
| Model-ID | Provider | Standaarddimensies | Configureerbare dimensies |
|---|---|---|---|
amazon.titan-embed-text-v2:0 | Amazon | 1024 | 256, 512, 1024 |
amazon.titan-embed-text-v1 | Amazon | 1536 | — |
amazon.titan-embed-g1-text-02 | Amazon | 1536 | — |
amazon.titan-embed-image-v1 | Amazon | 1024 | — |
amazon.nova-2-multimodal-embeddings-v1:0 | Amazon | 1024 | 256, 384, 1024, 3072 |
cohere.embed-english-v3 | Cohere | 1024 | — |
cohere.embed-multilingual-v3 | Cohere | 1024 | — |
cohere.embed-v4:0 | Cohere | 1536 | 256-1536 |
twelvelabs.marengo-embed-3-0-v1:0 | TwelveLabs | 512 | — |
twelvelabs.marengo-embed-2-7-v1:0 | TwelveLabs | 1024 | — |
amazon.titan-embed-text-v1:2:8k) erven de configuratie van het basismodel.Authenticatie: Bedrock-authenticatie gebruikt de standaardvolgorde voor credential-resolutie van de AWS SDK:- Omgevingsvariabelen (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY) - SSO-tokencache
- Credentials voor webidentiteitstokens
- Gedeelde credentials- en configuratiebestanden
- ECS- of EC2-metadatacredentials
AWS_REGION, AWS_DEFAULT_REGION, de amazon-bedrock-provider baseUrl, of valt terug op us-east-1.IAM-machtigingen: de IAM-rol of -gebruiker heeft nodig:InvokeModel tot het specifieke model:Local (GGUF + llama.cpp)
Local (GGUF + llama.cpp)
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
local.modelPath | string | automatisch gedownload | Pad naar GGUF-modelbestand |
local.modelCacheDir | string | node-llama-cpp-standaard | Cachemap voor gedownloade modellen |
local.contextSize | number | "auto" | 4096 | Grootte van het contextvenster voor de embeddingcontext. 4096 dekt typische chunks (128-512 tokens) terwijl niet-gewicht-VRAM begrensd blijft. Verlaag naar 1024-2048 op beperkte hosts. "auto" gebruikt het getrainde maximum van het model — niet aanbevolen voor 8B+-modellen (Qwen3-Embedding-8B: 40 960 tokens → ~32 GB VRAM versus ~8.8 GB bij 4096). |
openclaw plugins install @openclaw/llama-cpp-provider.
Standaardmodel: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, automatisch gedownload). Source-checkouts vereisen nog steeds goedkeuring voor native builds: pnpm approve-builds en daarna pnpm rebuild node-llama-cpp.Gebruik de zelfstandige CLI om hetzelfde providerpad te verifiëren dat de Gateway gebruikt:provider: "local" expliciet in voor lokale GGUF-embeddings. hf:- en HTTP(S)-modelverwijzingen worden ondersteund voor expliciete lokale configuraties, maar ze wijzigen de standaardprovider niet.Timeout voor inline embedding
Overschrijf de timeout voor inline embeddingbatches tijdens geheugenindexering.Niet ingesteld gebruikt de providerstandaard: 600 seconden voor lokale/zelfgehoste providers zoals
local, ollama en lmstudio, en 120 seconden voor gehoste providers. Verhoog dit wanneer lokale CPU-gebonden embeddingbatches gezond maar traag zijn.Configuratie voor hybride zoeken
Alles ondermemorySearch.query.hybrid:
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
enabled | boolean | true | Schakel hybride BM25 + vectorzoeken in |
vectorWeight | number | 0.7 | Gewicht voor vectorscores (0-1) |
textWeight | number | 0.3 | Gewicht voor BM25-scores (0-1) |
candidateMultiplier | number | 4 | Vermenigvuldiger voor grootte van kandidaatpool |
- MMR (diversity)
- Temporal decay (recency)
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
mmr.enabled | boolean | false | Schakel MMR-herordening in |
mmr.lambda | number | 0.7 | 0 = maximale diversiteit, 1 = maximale relevantie |
Volledig voorbeeld
Aanvullende geheugenpaden
| Sleutel | Type | Beschrijving |
|---|---|---|
extraPaths | string[] | Aanvullende mappen of bestanden om te indexeren |
.md-bestanden. De afhandeling van symlinks hangt af van de actieve backend: de ingebouwde engine negeert symlinks, terwijl QMD het gedrag van de onderliggende QMD-scanner volgt.
Gebruik voor agent-gebonden transcriptzoekopdrachten tussen agents agents.list[].memorySearch.qmd.extraCollections in plaats van memory.qmd.paths. Die extra verzamelingen volgen dezelfde { path, name, pattern? }-vorm, maar worden per agent samengevoegd en kunnen expliciete gedeelde namen behouden wanneer het pad buiten de huidige werkruimte wijst. Als hetzelfde opgeloste pad zowel in memory.qmd.paths als in memorySearch.qmd.extraCollections voorkomt, behoudt QMD de eerste vermelding en slaat het de duplicaatvermelding over.
Multimodaal geheugen (Gemini)
Indexeer afbeeldingen en audio naast Markdown met Gemini Embedding 2:| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
multimodal.enabled | boolean | false | Multimodale indexering inschakelen |
multimodal.modalities | string[] | — | ["image"], ["audio"], of ["all"] |
multimodal.maxFileBytes | number | 10000000 | Maximale bestandsgrootte voor indexering |
Alleen van toepassing op bestanden in
extraPaths. Standaard geheugenroots blijven alleen Markdown. Vereist gemini-embedding-2-preview. fallback moet "none" zijn..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (afbeeldingen); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).
Embedding-cache
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
cache.enabled | boolean | true | Chunk-embeddings cachen in SQLite |
cache.maxEntries | number | 50000 | Maximaal aantal gecachte embeddings |
Batchindexering
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
remote.nonBatchConcurrency | number | 4 | Parallelle inline embeddings |
remote.batch.enabled | boolean | false | Batch-embedding-API inschakelen |
remote.batch.concurrency | number | 2 | Parallelle batchtaken |
remote.batch.wait | boolean | true | Wachten op batchvoltooiing |
remote.batch.pollIntervalMs | number | — | Pollinterval |
remote.batch.timeoutMinutes | number | — | Batch-time-out |
openai, gemini en voyage. OpenAI-batches zijn doorgaans het snelst en goedkoopst voor grote backfills.
remote.nonBatchConcurrency beheert inline embedding-aanroepen die worden gebruikt door lokale/self-hosted providers en gehoste providers wanneer provider-batch-API’s niet actief zijn. Ollama gebruikt standaard 1 voor niet-batchindexering om te voorkomen dat kleinere lokale hosts worden overbelast; stel een hogere waarde in op grotere machines.
Dit staat los van sync.embeddingBatchTimeoutSeconds, dat de time-out voor inline embedding-aanroepen beheert.
Zoekopdrachten in sessiegeheugen (experimenteel)
Indexeer sessietranscripten en maak ze beschikbaar viamemory_search:
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
experimental.sessionMemory | boolean | false | Sessie-indexering inschakelen |
sources | string[] | ["memory"] | Voeg "sessions" toe om transcripten op te nemen |
sync.sessions.deltaBytes | number | 100000 | Bytedrempel voor herindexering |
sync.sessions.deltaMessages | number | 50 | Berichtdrempel voor herindexering |
tools.sessions.visibility. De standaardzichtbaarheid
tree toont alleen de huidige sessie en sessies die deze heeft gestart. Om
een niet-gerelateerde, door de Gateway gestarte sessie van dezelfde agent vanuit
een andere sessie op te halen, zoals een DM, verruim je de zichtbaarheid bewust
naar agent (of alleen naar all wanneer ophalen tussen agents ook vereist is
en het agent-naar-agentbeleid dit toestaat).
De onderstaande voorbeelden plaatsen deze instellingen onder agents.defaults. Je kunt ook
equivalente memorySearch-instellingen toepassen in een override per agent wanneer slechts één
agent sessietranscripten moet indexeren en doorzoeken.
Voor ophalen van Gateway naar DM binnen dezelfde agent:
- Ingebouwde backend
- QMD-backend
agents.defaults.memorySearch.experimental.sessionMemory en
sources: ["sessions"] op zichzelf geen transcripten naar QMD. Stel daarnaast ook
memory.qmd.sessions.enabled: true in.
SQLite-vectorversnelling (sqlite-vec)
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
store.vector.enabled | boolean | true | Gebruik sqlite-vec voor vectorquery’s |
store.vector.extensionPath | string | gebundeld | Overschrijf het pad naar sqlite-vec |
Indexopslag
Ingebouwde geheugenindexen staan in de OpenClaw SQLite-database van elke agent opagents/<agentId>/agent/openclaw-agent.sqlite.
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
store.fts.tokenizer | string | unicode61 | FTS5-tokenizer (unicode61 of trigram) |
QMD-backendconfig
Stelmemory.backend = "qmd" in om dit in te schakelen. Alle QMD-instellingen staan onder memory.qmd:
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
command | string | qmd | Pad naar het QMD-uitvoerbare bestand; stel een absoluut pad in wanneer service-PATH verschilt van je shell |
searchMode | string | search | Zoekcommando: search, vsearch, query |
rerank | boolean | — | Stel in op false met searchMode: "query" en QMD 2.1+ om QMD-herschikking over te slaan |
includeDefaultMemory | boolean | true | Indexeer MEMORY.md + memory/**/*.md automatisch |
paths[] | array | — | Extra paden: { name, path, pattern? } |
sessions.enabled | boolean | false | Exporteer sessietranscripten naar QMD |
sessions.retentionDays | number | — | Bewaartermijn voor transcripten |
sessions.exportDir | string | — | Exportmap |
searchMode: "search" is alleen lexicaal/BM25. OpenClaw voert voor die modus geen gereedheidsprobes voor semantische vectoren of QMD-embeddingonderhoud uit, ook niet tijdens memory status --deep; vsearch en query blijven QMD-vectorgereedheid en embeddings vereisen.
rerank: false wijzigt alleen de QMD-query-modus en vereist QMD 2.1 of nieuwer. In directe CLI-modus geeft OpenClaw --no-rerank door; in door mcporter ondersteunde MCP-modus geeft het rerank: false door aan de uniforme querytool van QMD. Laat dit oningesteld om het standaardgedrag van QMD voor queryherschikking te gebruiken.
OpenClaw geeft de voorkeur aan actuele QMD-collectie- en MCP-queryvormen, maar houdt oudere QMD-releases werkend door waar nodig compatibele vlaggen voor collectiepatronen en oudere MCP-toolnamen te proberen. Wanneer QMD ondersteuning voor meerdere collectiefilters adverteert, worden collecties met dezelfde bron met één QMD-proces doorzocht; oudere QMD-builds behouden het compatibiliteitspad per collectie. Dezelfde bron betekent dat duurzame geheugencollecties samen worden gegroepeerd, terwijl sessietranscriptcollecties een aparte groep blijven zodat brondiversificatie nog steeds beide invoeren heeft.
QMD-modeloverrides blijven aan de QMD-kant, niet in OpenClaw-configuratie. Als je de modellen van QMD globaal moet overschrijven, stel dan omgevingsvariabelen zoals
QMD_EMBED_MODEL, QMD_RERANK_MODEL en QMD_GENERATE_MODEL in de Gateway-runtimeomgeving in.Updateschema
Updateschema
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
update.interval | string | 5m | Vernieuwingsinterval |
update.debounceMs | number | 15000 | Bestandswijzigingen debouncen |
update.onBoot | boolean | true | Vernieuwen wanneer de langlevende QMD-manager wordt geopend; stel in op false om de directe opstartupdate over te slaan |
update.startup | string | off | Optionele QMD-initialisatie bij Gateway-start: off, idle of immediate |
update.startupDelayMs | number | 120000 | Vertraging voordat de vernieuwing voor startup: "idle" wordt uitgevoerd |
update.waitForBootSync | boolean | false | Blokkeer het openen van de manager totdat de eerste vernieuwing is voltooid |
update.embedInterval | string | — | Afzonderlijk embedritme |
update.commandTimeoutMs | number | — | Time-out voor QMD-opdrachten |
update.updateTimeoutMs | number | — | Time-out voor QMD-updatebewerkingen |
update.embedTimeoutMs | number | — | Time-out voor QMD-embedbewerkingen |
Limieten
Limieten
| Sleutel | Type | Standaard | Beschrijving |
|---|---|---|---|
limits.maxResults | number | 6 | Maximaal aantal zoekresultaten |
limits.maxSnippetChars | number | — | Fragmentlengte begrenzen |
limits.maxInjectedChars | number | — | Totaal aantal geïnjecteerde tekens begrenzen |
limits.timeoutMs | number | 4000 | Zoektime-out |
Bereik
Bereik
Bepaalt welke sessies QMD-zoekresultaten kunnen ontvangen. Zelfde schema als De meegeleverde standaardinstelling staat directe sessies en kanaalsessies toe, terwijl groepen nog steeds worden geweigerd.Standaard is alleen DM.
session.sendPolicy:match.keyPrefix komt overeen met de genormaliseerde sessiesleutel; match.rawKeyPrefix komt overeen met de ruwe sleutel inclusief agent:<id>:.Citaties
Citaties
memory.citations geldt voor alle backends:| Waarde | Gedrag |
|---|---|
auto (standaard) | Neem de footer Source: <path#line> op in fragmenten |
on | Neem de footer altijd op |
off | Laat de footer weg (pad wordt intern nog steeds aan de agent doorgegeven) |
update.onBoot true is en er geen interval-/embedonderhoud is geconfigureerd, gebruikt opstarten een eenmalige manager voor de opstartvernieuwing en sluit die daarna. Als er een update- of embedinterval is geconfigureerd, opent opstarten de langlevende QMD-manager zodat die eigenaar kan zijn van de watcher en intervaltimers; update.onBoot: false slaat alleen de directe opstartvernieuwing over.
Volledig QMD-voorbeeld
Dreaming
Dreaming wordt geconfigureerd onderplugins.entries.memory-core.config.dreaming, niet onder agents.defaults.memorySearch.
Dreaming wordt uitgevoerd als één geplande sweep en gebruikt interne light/deep/REM-fasen als implementatiedetail.
Zie Dreaming voor conceptueel gedrag en slash-opdrachten.
Gebruikersinstellingen
| Sleutel | Type | Standaardmodel | Beschrijving |
|---|---|---|---|
enabled | boolean | false | Dreaming volledig in- of uitschakelen |
frequency | string | 0 3 * * * | Optioneel Cron-ritme voor de volledige Dreaming-sweep |
model | string | standaardmodel | Optionele modeloverride voor de Dream Diary-subagent |
phases.deep.maxPromotedSnippetTokens | number | 160 | Maximum aantal geschatte tokens dat wordt bewaard uit elk kortetermijnherinneringsfragment dat naar MEMORY.md wordt gepromoveerd; herkomstmetadata blijft zichtbaar |
Voorbeeld
- Dreaming schrijft machinestatus naar
memory/.dreams/. - Dreaming schrijft menselijk leesbare narratieve uitvoer naar
DREAMS.md(of bestaandedreams.md). dreaming.modelgebruikt de bestaande vertrouwenspoort voor Plugin-subagents; stelplugins.entries.memory-core.subagent.allowModelOverride: truein voordat u dit inschakelt.- Dream Diary probeert het één keer opnieuw met het standaardsessiemodel wanneer het geconfigureerde model niet beschikbaar is. Vertrouwens- of allowlist-fouten worden gelogd en worden niet stilzwijgend opnieuw geprobeerd.
- Het beleid en de drempels voor de light/deep/REM-fasen zijn intern gedrag, geen gebruikersgerichte configuratie.