Technical reference
Dokumentacja konfiguracji pamięci
Ta strona zawiera listę wszystkich ustawień konfiguracyjnych wyszukiwania pamięci w OpenClaw. Omówienia koncepcyjne znajdziesz tutaj:
Jak działa pamięć.
Domyślny backend SQLite.
Lokalny proces pomocniczy.
Potok wyszukiwania i dostrajanie.
Podagent pamięci dla sesji interaktywnych.
Wszystkie ustawienia wyszukiwania pamięci znajdują się w agents.defaults.memorySearch w pliku openclaw.json (lub w nadpisaniu agents.list[].memorySearch dla poszczególnych agentów), chyba że zaznaczono inaczej.
Wybór dostawcy
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
enabled |
boolean |
true |
Włącza lub wyłącza wyszukiwanie pamięci |
provider |
string |
"openai" |
Identyfikator adaptera osadzania, taki jak bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible lub voyage; może to być również skonfigurowany models.providers.<id>, którego api wskazuje adapter osadzania pamięci lub interfejs API modelu zgodny z OpenAI |
model |
string |
domyślna dostawcy | Nazwa modelu osadzania |
fallback |
string |
"none" |
Identyfikator adaptera zapasowego używanego w razie awarii adaptera głównego |
Gdy provider nie jest ustawiony, OpenClaw korzysta z osadzeń OpenAI. Ustaw provider
jawnie, aby używać Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, lokalnego modelu GGUF lub punktu końcowego /v1/embeddings zgodnego z OpenAI.
Starsze konfiguracje, które nadal zawierają provider: "auto", są interpretowane jako openai.
Gdy provider nie jest ustawiony, występuje starsze ustawienie provider: "auto" lub
provider: "none" celowo wybiera tryb wyłącznie FTS, przywoływanie pamięci nadal może
korzystać z leksykalnego rankingu FTS, gdy osadzenia są niedostępne.
Jawnie określeni dostawcy nielokalni stosują zasadę bezpiecznego odrzucania. Jeśli ustawisz memorySearch.provider na
konkretnego dostawcę zdalnego, takiego jak Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage lub niestandardowego dostawcę
zgodnego z OpenAI, a dostawca ten będzie niedostępny w czasie działania, memory_search
zwróci wynik informujący o niedostępności, zamiast niejawnie użyć przywoływania wyłącznie przez FTS. Popraw
konfigurację dostawcy lub uwierzytelniania, przełącz się na dostępnego dostawcę albo ustaw
provider: "none", jeśli chcesz świadomie korzystać z przywoływania wyłącznie przez FTS.
Niestandardowe identyfikatory dostawców
memorySearch.provider może wskazywać niestandardowy wpis models.providers.<id> dla adapterów dostawców przeznaczonych dla pamięci, takich jak ollama, lub interfejsów API modeli zgodnych z OpenAI, takich jak openai-responses / openai-completions. OpenClaw ustala właściciela api tego dostawcy dla adaptera osadzania, zachowując niestandardowy identyfikator dostawcy na potrzeby obsługi punktu końcowego, uwierzytelniania i prefiksu modelu. Dzięki temu konfiguracje z wieloma procesorami GPU lub hostami mogą przypisać osadzanie pamięci do konkretnego lokalnego punktu końcowego:
{ models: { providers: { "ollama-5080": { api: "ollama", baseUrl: "http://gpu-box.local:11435", apiKey: "ollama-local", models: [{ id: "qwen3-embedding:0.6b", name: "Qwen3 Embedding 0.6B" }], }, }, }, agents: { defaults: { memorySearch: { provider: "ollama-5080", model: "qwen3-embedding:0.6b", }, }, },}Ustalanie klucza API
Zdalne osadzanie wymaga klucza API. Bedrock korzysta zamiast niego z domyślnego łańcucha poświadczeń AWS SDK (ról instancji, SSO, kluczy dostępu lub klucza API Bedrock).
| Dostawca | Zmienna środowiskowa | Klucz konfiguracji |
|---|---|---|
| Bedrock | Łańcuch poświadczeń AWS lub AWS_BEARER_TOKEN_BEDROCK |
Klucz API nie jest wymagany |
| 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 |
Profil uwierzytelniania przez logowanie na urządzeniu |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (wartość zastępcza) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
Konfiguracja zdalnego punktu końcowego
Użyj provider: "openai-compatible" dla ogólnego serwera
/v1/embeddings zgodnego z OpenAI, który nie powinien dziedziczyć globalnych poświadczeń czatu OpenAI.
remote.baseUrlstringNiestandardowy bazowy adres URL interfejsu API.
remote.apiKeystringZastępczy klucz API.
remote.headersobjectDodatkowe nagłówki HTTP (scalane z domyślnymi ustawieniami dostawcy).
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", model: "text-embedding-3-small", remote: { baseUrl: "https://api.example.com/v1/", apiKey: "YOUR_KEY", }, }, }, },}Konfiguracja właściwa dla dostawcy
Gemini
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
model |
string |
gemini-embedding-001 |
Obsługuje również gemini-embedding-2-preview |
outputDimensionality |
number |
3072 |
Dla Embedding 2: 768, 1536 lub 3072 |
Typy danych wejściowych zgodne z OpenAI
Punkty końcowe osadzania zgodne z OpenAI mogą opcjonalnie używać pól żądania input_type właściwych dla dostawcy. Jest to przydatne w przypadku asymetrycznych modeli osadzania, które wymagają różnych etykiet dla osadzeń zapytań i dokumentów.
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
inputType |
string |
nie ustawiono | Wspólna wartość input_type dla osadzeń zapytań i dokumentów |
queryInputType |
string |
nie ustawiono | Wartość input_type podczas zapytania; zastępuje inputType |
documentInputType |
string |
nie ustawiono | Wartość input_type indeksu/dokumentu; zastępuje inputType |
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", remote: { baseUrl: "https://embeddings.example/v1", apiKey: "${EMBEDDINGS_API_KEY}", }, model: "asymmetric-embedder", queryInputType: "query", documentInputType: "passage", }, }, },}Zmiana tych wartości wpływa na tożsamość pamięci podręcznej osadzeń podczas indeksowania wsadowego przez dostawcę i powinna zostać uzupełniona ponownym indeksowaniem pamięci, jeśli model nadrzędny traktuje te etykiety odmiennie.
Bedrock
Konfiguracja osadzania Bedrock
Bedrock korzysta z domyślnego łańcucha poświadczeń AWS SDK oraz tokenu okaziciela sprawdzanego przez OpenClaw, dlatego w konfiguracji nie są przechowywane żadne klucze API. Jeśli OpenClaw działa na EC2 z rolą instancji obsługującą Bedrock, wystarczy ustawić dostawcę i model:
{ agents: { defaults: { memorySearch: { provider: "bedrock", model: "amazon.titan-embed-text-v2:0", }, }, },}| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
Dowolny identyfikator modelu osadzania Bedrock |
outputDimensionality |
number |
domyślna modelu | Dla Titan V2: 256, 512 lub 1024 |
Obsługiwane modele (z wykrywaniem rodziny i domyślnymi wymiarami):
| Identyfikator modelu | Dostawca | Domyślne wymiary | Konfigurowalne wymiary |
|---|---|---|---|
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, 384, 512, 768, 1024, 1536 |
twelvelabs.marengo-embed-3-0-v1:0 |
TwelveLabs | 512 | -- |
twelvelabs.marengo-embed-2-7-v1:0 |
TwelveLabs | 1024 | -- |
Warianty z sufiksem przepustowości (np. amazon.titan-embed-text-v1:2:8k) oraz identyfikatory profili wnioskowania z prefiksem regionu (np. us.amazon.titan-embed-text-v2:0) dziedziczą konfigurację modelu bazowego.
Region: rozwiązywany w następującej kolejności: nadpisanie memorySearch.remote.baseUrl, konfiguracja models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION, a następnie domyślna wartość us-east-1.
Uwierzytelnianie: OpenClaw najpierw sprawdza AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY lub AWS_BEARER_TOKEN_BEDROCK, a następnie przechodzi do standardowego domyślnego łańcucha dostawców poświadczeń AWS SDK:
- Zmienne środowiskowe (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), chyba że ustawiono równieżAWS_PROFILE - SSO (tylko gdy skonfigurowano pola SSO)
- Współdzielone pliki poświadczeń i konfiguracji (
fromIni, obejmujeAWS_PROFILE) - Proces poświadczeń (
credential_processw pliku konfiguracji AWS) - Poświadczenia tokenu tożsamości internetowej
- Poświadczenia z metadanych instancji ECS lub EC2
Uprawnienia IAM: rola lub użytkownik IAM wymaga:
{ "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": "*"}Aby zastosować zasadę najmniejszych uprawnień, ogranicz InvokeModel do konkretnego modelu:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0Lokalnie (GGUF + llama.cpp)
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
local.modelPath |
string |
pobierany automatycznie | Ścieżka do pliku modelu GGUF |
local.modelCacheDir |
string |
domyślna node-llama-cpp | Katalog pamięci podręcznej pobranych modeli |
local.contextSize |
number | "auto" |
4096 |
Rozmiar okna kontekstu dla kontekstu osadzania. Wartość 4096 obejmuje typowe fragmenty (128–512 tokenów), jednocześnie ograniczając pamięć VRAM niezajmowaną przez wagi. Na hostach o ograniczonych zasobach zmniejsz do 1024–2048. "auto" używa wytrenowanego maksimum modelu — niezalecane dla modeli 8B+ (Qwen3-Embedding-8B: do 40 960 tokenów może zwiększyć użycie VRAM do około 32 GB). |
Najpierw zainstaluj oficjalnego dostawcę llama.cpp: openclaw plugins install @openclaw/llama-cpp-provider.
Model domyślny: embeddinggemma-300m-qat-Q8_0.gguf (około 0,6 GB, pobierany automatycznie). Kopie robocze kodu źródłowego nadal wymagają zatwierdzenia natywnej kompilacji: pnpm approve-builds, a następnie pnpm rebuild node-llama-cpp.
Użyj samodzielnego CLI, aby zweryfikować tę samą ścieżkę dostawcy, której używa Gateway:
openclaw memory status --deep --agent mainopenclaw memory index --force --agent mainNumeryczne wartości local.contextSize wpływają również na automatyczne rozmieszczanie warstw GPU przez node-llama-cpp, dzięki czemu wagi modelu i żądany kontekst osadzania mieszczą się razem. Po załadowaniu środowiska uruchomieniowego polecenie openclaw memory status --deep raportuje ostatnio znane informacje o mechanizmie llama.cpp, urządzeniu, odciążaniu, żądanym kontekście i użyciu pamięci wraz ze znacznikami czasu; pasywne sprawdzenie stanu nie ładuje modelu.
Ustaw jawnie provider: "local" dla lokalnych osadzeń GGUF. Odwołania do modeli hf: i HTTP(S) są obsługiwane w jawnych konfiguracjach lokalnych (za pośrednictwem mechanizmu rozwiązywania modeli node-llama-cpp), ale nie zmieniają domyślnego dostawcy.
Limit czasu osadzania w trybie bezpośrednim
sync.embeddingBatchTimeoutSecondsnumberNadpisuje limit czasu dla bezpośrednich partii osadzania podczas indeksowania pamięci.
Brak ustawienia powoduje użycie wartości domyślnej dostawcy: 600 sekund dla dostawców lokalnych/samodzielnie hostowanych, takich jak local, ollama i lmstudio, oraz 120 sekund dla dostawców hostowanych. Zwiększ tę wartość, gdy lokalne partie osadzania obciążające procesor działają prawidłowo, ale wolno.
Zachowanie indeksowania
Wszystkie opcje znajdują się w memorySearch.sync, chyba że zaznaczono inaczej:
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
onSessionStart |
boolean |
true |
Synchronizuje indeks pamięci przy rozpoczęciu sesji |
onSearch |
boolean |
true |
Synchronizuje leniwie podczas wyszukiwania po wykryciu zmian zawartości |
watch |
boolean |
true |
Monitoruje pliki pamięci (chokidar) i planuje ponowne indeksowanie po zmianach |
watchDebounceMs |
number |
1500 |
Okno opóźnienia do łączenia szybko następujących zdarzeń monitorowania plików |
intervalMinutes |
number |
0 |
Okres ponownego indeksowania w minutach (0 wyłącza) |
sessions.postCompactionForce |
boolean |
true |
Wymusza ponowne indeksowanie sesji po aktualizacjach transkrypcji wywołanych przez Compaction |
chunking.tokensnumberRozmiar fragmentu w tokenach używany podczas dzielenia źródeł pamięci przed osadzaniem (domyślnie: 400).
chunking.overlapnumberNakładanie się tokenów między sąsiednimi fragmentami w celu zachowania kontekstu w pobliżu granic podziału (domyślnie: 80).
Konfiguracja wyszukiwania hybrydowego
Wszystkie poniższe ustawienia znajdują się w memorySearch.query:
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
maxResults |
number |
6 |
Maksymalna liczba trafień z pamięci zwracanych przed wstrzyknięciem |
minScore |
number |
0.35 |
Minimalny wynik trafności wymagany do uwzględnienia trafienia |
Oraz w memorySearch.query.hybrid:
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
enabled |
boolean |
true |
Włącza hybrydowe wyszukiwanie BM25 i wektorowe |
vectorWeight |
number |
0.7 |
Waga wyników wektorowych (0–1) |
textWeight |
number |
0.3 |
Waga wyników BM25 (0–1) |
candidateMultiplier |
number |
4 |
Mnożnik rozmiaru puli kandydatów |
MMR (różnorodność)
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
mmr.enabled |
boolean |
false |
Włącza ponowne uszeregowanie za pomocą MMR |
mmr.lambda |
number |
0.7 |
0 = maksymalna różnorodność, 1 = maksymalna trafność |
Spadek czasowy (aktualność)
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
temporalDecay.enabled |
boolean |
false |
Włącza premiowanie aktualności |
temporalDecay.halfLifeDays |
number |
30 |
Wynik zmniejsza się o połowę co N dni |
Pliki o trwałej aktualności (MEMORY.md oraz pliki bez daty w memory/) nigdy nie podlegają obniżaniu wyniku.
Pełny przykład
{ agents: { defaults: { memorySearch: { query: { maxResults: 6, minScore: 0.35, hybrid: { vectorWeight: 0.7, textWeight: 0.3, mmr: { enabled: true, lambda: 0.7 }, temporalDecay: { enabled: true, halfLifeDays: 30 }, }, }, }, }, },}Dodatkowe ścieżki pamięci
| Klucz | Typ | Opis |
|---|---|---|
extraPaths |
string[] |
Dodatkowe katalogi lub pliki do indeksowania |
{ agents: { defaults: { memorySearch: { extraPaths: ["../team-docs", "/srv/shared-notes"], }, }, },}Ścieżki mogą być bezwzględne lub względne wobec obszaru roboczego. Katalogi są skanowane rekurencyjnie w poszukiwaniu plików .md. Obsługa dowiązań symbolicznych zależy od aktywnego mechanizmu: wbudowany mechanizm pomija dowiązania symboliczne, natomiast QMD stosuje zachowanie bazowego skanera QMD.
Do wyszukiwania transkrypcji między agentami w zakresie danego agenta użyj agents.list[].memorySearch.qmd.extraCollections zamiast memory.qmd.paths. Te dodatkowe kolekcje mają ten sam format { path, name, pattern? }, ale są scalane osobno dla każdego agenta i mogą zachowywać jawnie określone współdzielone nazwy, gdy ścieżka wskazuje poza bieżący obszar roboczy. Jeśli ta sama rozwiązana ścieżka występuje zarówno w memory.qmd.paths, jak i w memorySearch.qmd.extraCollections, QMD zachowuje pierwszy wpis i pomija duplikat.
Pamięć multimodalna (Gemini)
Indeksuj obrazy i dźwięk wraz z plikami Markdown za pomocą Gemini Embedding 2:
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
multimodal.enabled |
boolean |
false |
Włącza indeksowanie multimodalne |
multimodal.modalities |
string[] |
-- | ["image"], ["audio"] lub ["all"] |
multimodal.maxFileBytes |
number |
10485760 |
Maksymalny rozmiar indeksowanego pliku (10 MiB) |
Obsługiwane formaty: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (obrazy); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (dźwięk).
Pamięć podręczna osadzeń
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
cache.enabled |
boolean |
true |
Przechowuje osadzenia fragmentów w pamięci podręcznej SQLite |
cache.maxEntries |
number |
nie ustawiono | Orientacyjny górny limit osadzeń w pamięci podręcznej |
Zapobiega ponownemu tworzeniu osadzeń dla niezmienionego tekstu podczas ponownego indeksowania lub aktualizacji transkrypcji. Pozostaw maxEntries bez wartości, aby pamięć podręczna była nieograniczona; ustaw ją, gdy ograniczenie zajętości dysku jest ważniejsze niż maksymalna szybkość ponownego indeksowania. Po ustawieniu tej wartości i przekroczeniu limitu najstarsze wpisy (według czasu ostatniej aktualizacji) są usuwane jako pierwsze.
Indeksowanie wsadowe
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
Równoległe osadzanie bezpośrednie |
remote.batch.enabled |
boolean |
false |
Włącza interfejs API osadzania wsadowego |
remote.batch.concurrency |
number |
2 |
Równoległe zadania wsadowe |
remote.batch.wait |
boolean |
true |
Oczekuje na zakończenie zadań wsadowych |
remote.batch.pollIntervalMs |
number |
2000 |
Interwał odpytywania |
remote.batch.timeoutMinutes |
number |
60 |
Limit czasu zadania wsadowego |
Dostępne dla gemini, openai i voyage. Przetwarzanie wsadowe OpenAI jest zazwyczaj najszybsze i najtańsze w przypadku uzupełniania dużych zbiorów danych.
remote.nonBatchConcurrency steruje bezpośrednimi wywołaniami osadzania używanymi przez dostawców lokalnych lub samodzielnie hostowanych oraz dostawców hostowanych, gdy ich interfejsy API przetwarzania wsadowego nie są aktywne. W przypadku indeksowania niewsadowego Ollama domyślnie używa wartości 1, aby nie przeciążać mniejszych hostów lokalnych; na większych maszynach ustaw wyższą wartość.
To ustawienie jest niezależne od sync.embeddingBatchTimeoutSeconds, które określa limit czasu bezpośrednich wywołań osadzania.
Wyszukiwanie w pamięci sesji (eksperymentalne)
Indeksuj transkrypcje sesji i udostępniaj je za pomocą memory_search:
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
experimental.sessionMemory |
boolean |
false |
Włącza indeksowanie sesji |
sources |
string[] |
["memory"] |
Dodaj "sessions", aby uwzględnić transkrypcje |
sync.sessions.deltaBytes |
number |
100000 |
Próg liczby bajtów dla ponownego indeksowania |
sync.sessions.deltaMessages |
number |
50 |
Próg liczby wiadomości dla ponownego indeksowania |
Trafienia w transkrypcjach sesji również podlegają ustawieniu
tools.sessions.visibility. Domyślna
widoczność tree udostępnia tylko bieżącą sesję i sesje przez nią utworzone. Aby
przywołać z innej sesji niepowiązaną sesję tego samego agenta, wysłaną przez
Gateway, na przykład wiadomość prywatną, celowo rozszerz widoczność do agent
(lub do all tylko wtedy, gdy wymagane jest również przywoływanie między
agentami i zezwalają na nie zasady komunikacji między agentami).
Poniższe przykłady umieszczają te ustawienia w agents.defaults. Równoważne
ustawienia memorySearch można również zastosować w nadpisaniu dla konkretnego
agenta, gdy tylko jeden agent ma indeksować i przeszukiwać transkrypcje sesji.
Aby umożliwić przywoływanie wiadomości prywatnych przez Gateway w obrębie tego samego agenta:
Wbudowany backend
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, tools: { sessions: { visibility: "agent" }, },}Backend QMD
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, memory: { backend: "qmd", qmd: { sessions: { enabled: true }, }, }, tools: { sessions: { visibility: "agent" }, },}Podczas korzystania z QMD ustawienia agents.defaults.memorySearch.experimental.sessionMemory i
sources: ["sessions"] same nie eksportują transkrypcji do QMD. Ustaw również
memory.qmd.sessions.enabled: true.
Akceleracja wektorowa SQLite (sqlite-vec)
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
Używaj sqlite-vec do zapytań wektorowych |
store.vector.extensionPath |
string |
wbudowana | Zastąp ścieżkę do sqlite-vec |
Gdy sqlite-vec jest niedostępne, OpenClaw automatycznie przełącza się na podobieństwo cosinusowe obliczane w procesie.
Przechowywanie indeksów
Wbudowane indeksy pamięci znajdują się w bazie danych SQLite OpenClaw każdego agenta pod ścieżką
agents/<agentId>/agent/openclaw-agent.sqlite.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
store.fts.tokenizer |
string |
unicode61 |
Tokenizator FTS5 (unicode61 lub trigram) |
Konfiguracja backendu QMD
Aby włączyć, ustaw memory.backend = "qmd". Wszystkie ustawienia QMD znajdują się w memory.qmd:
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
command |
string |
qmd |
Ścieżka do pliku wykonywalnego QMD; ustaw ścieżkę bezwzględną, gdy PATH usługi różni się od powłoki |
searchMode |
string |
search |
Polecenie wyszukiwania: search, vsearch, query |
rerank |
boolean |
-- | Ustaw false z searchMode: "query" i QMD 2.1+, aby pominąć ponowne szeregowanie wyników przez QMD |
includeDefaultMemory |
boolean |
true |
Automatycznie indeksuj MEMORY.md i memory/**/*.md |
paths[] |
array |
-- | Dodatkowe ścieżki: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
Eksportuj transkrypcje sesji do QMD |
sessions.retentionDays |
number |
-- | Okres przechowywania transkrypcji |
sessions.exportDir |
string |
-- | Katalog eksportu |
searchMode: "search" korzysta wyłącznie z wyszukiwania leksykalnego/BM25. W tym trybie OpenClaw nie wykonuje testów gotowości semantycznych wektorów ani konserwacji osadzeń QMD, również podczas memory status --deep; tryby vsearch i query nadal wymagają gotowości wektorowej QMD oraz osadzeń.
rerank: false zmienia wyłącznie tryb query QMD i wymaga QMD 2.1 lub nowszego. W bezpośrednim trybie CLI OpenClaw przekazuje --no-rerank; w trybie MCP obsługiwanym przez mcporter przekazuje rerank: false do ujednoliconego narzędzia zapytań QMD. Pozostaw tę opcję nieustawioną, aby używać domyślnego mechanizmu ponownego szeregowania zapytań QMD.
OpenClaw preferuje aktualne formaty kolekcji QMD i zapytań MCP, ale zachowuje zgodność ze starszymi wersjami QMD, w razie potrzeby wypróbowując zgodne flagi wzorców kolekcji i starsze nazwy narzędzi MCP. Gdy QMD deklaruje obsługę wielu filtrów kolekcji, kolekcje z tego samego źródła są przeszukiwane przez jeden proces QMD; starsze kompilacje QMD zachowują ścieżkę zgodności osobną dla każdej kolekcji. To samo źródło oznacza, że kolekcje trwałej pamięci — domyślne pliki pamięci i niestandardowe ścieżki — są grupowane razem, natomiast kolekcje transkrypcji sesji pozostają osobną grupą, dzięki czemu dywersyfikacja źródeł nadal uwzględnia oba rodzaje danych wejściowych.
Integracja z mcporter
Wszystkie ustawienia znajdują się w memory.qmd.mcporter. Kieruje wyszukiwania QMD przez długotrwale działającego demona MCP mcporter zamiast uruchamiać qmd dla każdego zapytania, ograniczając narzut zimnego startu w przypadku większych modeli.
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
enabled |
boolean |
false |
Kieruj wywołania QMD przez mcporter zamiast uruchamiać qmd dla każdego żądania |
serverName |
string |
qmd |
Nazwa serwera mcporter uruchamiającego qmd mcp z lifecycle: keep-alive |
startDaemon |
boolean |
true |
Automatycznie uruchamiaj demona mcporter, gdy enabled ma wartość true |
Wymaga zainstalowanego programu mcporter, dostępnego w PATH, oraz skonfigurowanego serwera mcporter uruchamiającego qmd mcp. Pozostaw wyłączone w prostszych konfiguracjach lokalnych, w których koszt uruchamiania procesu dla każdego zapytania jest akceptowalny.
Update schedule
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
update.interval |
string |
5m |
Interwał odświeżania |
update.debounceMs |
number |
15000 |
Opóźnienie stabilizujące zmiany plików |
update.onBoot |
boolean |
true |
Odświeżaj po otwarciu długotrwale działającego menedżera QMD; ustaw false, aby pominąć natychmiastową aktualizację po uruchomieniu |
update.startup |
string |
off |
Opcjonalna inicjalizacja QMD przy uruchamianiu Gateway: off, idle lub immediate |
update.startupDelayMs |
number |
120000 |
Opóźnienie przed odświeżeniem startup: "idle" |
update.waitForBootSync |
boolean |
false |
Blokuj otwarcie menedżera do czasu ukończenia jego początkowego odświeżania |
update.embedInterval |
string |
60m |
Osobny harmonogram generowania osadzeń |
update.commandTimeoutMs |
number |
30000 |
Limit czasu poleceń konserwacyjnych QMD (wyświetlanie/dodawanie kolekcji) |
update.updateTimeoutMs |
number |
120000 |
Limit czasu każdego cyklu qmd update |
update.embedTimeoutMs |
number |
120000 |
Limit czasu każdego cyklu qmd embed |
Limits
| Klucz | Typ | Domyślnie | Opis |
|---|---|---|---|
limits.maxResults |
number |
4 |
Maksymalna liczba wyników wyszukiwania |
limits.maxSnippetChars |
number |
450 |
Ograniczenie długości fragmentu |
limits.maxInjectedChars |
number |
2200 |
Ograniczenie łącznej liczby wstrzykniętych znaków |
limits.timeoutMs |
number |
4000 |
Limit czasu wyszukiwania |
Scope
Określa, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Schemat jest taki sam jak w session.sendPolicy:
{ memory: { qmd: { scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, }, },}Domyślna dostarczana konfiguracja zezwala wyłącznie na wiadomości prywatne/bezpośrednie, odrzucając grupy i inne typy kanałów. match.keyPrefix dopasowuje znormalizowany klucz sesji; match.rawKeyPrefix dopasowuje nieprzetworzony klucz zawierający agent:<id>:.
Cytowania
memory.citations ma zastosowanie do wszystkich backendów:
| Wartość | Zachowanie |
|---|---|
auto (domyślnie) |
Dołącz stopkę Source: <path#line> do fragmentów |
on |
Zawsze dołączaj stopkę |
off |
Pomijaj stopkę (ścieżka nadal jest wewnętrznie przekazywana agentowi) |
Gdy inicjalizacja QMD podczas uruchamiania Gateway jest włączona, OpenClaw uruchamia QMD tylko dla kwalifikujących się agentów. Jeśli update.onBoot ma wartość true i nie skonfigurowano okresowej konserwacji aktualizacji ani osadzania, podczas uruchamiania używany jest jednorazowy menedżer do wykonania odświeżenia startowego, a następnie zostaje zamknięty. Jeśli skonfigurowano interwał aktualizacji lub osadzania, podczas uruchamiania otwierany jest długotrwały menedżer QMD, który zarządza obserwatorem i licznikami interwałów; update.onBoot: false pomija tylko natychmiastowe odświeżenie startowe.
Pełny przykład QMD
{ memory: { backend: "qmd", citations: "auto", qmd: { includeDefaultMemory: true, update: { interval: "5m", debounceMs: 15000 }, limits: { maxResults: 4, timeoutMs: 4000 }, scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }], }, },}Dreaming
Dreaming konfiguruje się w plugins.entries.memory-core.config.dreaming, a nie w agents.defaults.memorySearch.
Dreaming działa jako jedno zaplanowane przetwarzanie i wykorzystuje wewnętrzne fazy lekką, głęboką i REM jako szczegół implementacyjny.
Opis działania koncepcyjnego i poleceń z ukośnikiem zawiera sekcja Dreaming.
Ustawienia użytkownika
| Klucz | Typ | Wartość domyślna | Opis |
|---|---|---|---|
enabled |
boolean |
false |
Całkowicie włącza lub wyłącza Dreaming |
frequency |
string |
0 3 * * * |
Opcjonalna częstotliwość Cron dla pełnego przebiegu Dreaming |
model |
string |
model domyślny | Opcjonalne zastąpienie modelu podagenta Dream Diary |
phases.deep.maxPromotedSnippetTokens |
number |
160 |
Maksymalna szacowana liczba tokenów zachowywanych z każdego fragmentu pamięci krótkotrwałej przeniesionego do MEMORY.md; metadane pochodzenia pozostają widoczne |
Przykład
{ plugins: { entries: { "memory-core": { subagent: { allowModelOverride: true, allowedModels: ["anthropic/claude-sonnet-4-6"], }, config: { dreaming: { enabled: true, frequency: "0 3 * * *", model: "anthropic/claude-sonnet-4-6", }, }, }, }, },}