Przejdź do głównej treści

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Ta strona zawiera listę wszystkich ustawień konfiguracji wyszukiwania w pamięci OpenClaw. Omówienia koncepcyjne znajdziesz tutaj:

Omówienie pamięci

Jak działa pamięć.

Wbudowany silnik

Domyślny backend SQLite.

Silnik QMD

Lokalny sidecar.

Wyszukiwanie w pamięci

Potok wyszukiwania i dostrajanie.

Active Memory

Subagent pamięci dla sesji interaktywnych.
Wszystkie ustawienia wyszukiwania w pamięci znajdują się w agents.defaults.memorySearch w openclaw.json, o ile nie wskazano inaczej.
Jeśli szukasz przełącznika funkcji Active Memory i konfiguracji subagenta, znajduje się ona w plugins.entries.active-memory, a nie w memorySearch.Active Memory używa modelu dwóch bramek:
  1. plugin musi być włączony i wskazywać bieżący identyfikator agenta
  2. żądanie musi być kwalifikującą się interaktywną trwałą sesją czatu
Zobacz Active Memory, aby poznać model aktywacji, konfigurację należącą do pluginu, utrwalanie transkrypcji i bezpieczny wzorzec wdrażania.

Wybór dostawcy

KluczTypDomyślnieOpis
providerstringwykrywane automatycznieIdentyfikator adaptera osadzania, taki jak bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai lub voyage; może też być skonfigurowanym models.providers.<id>, którego api wskazuje jeden z tych adapterów
modelstringdomyślne dostawcyNazwa modelu osadzania
fallbackstring"none"Identyfikator adaptera zapasowego, gdy podstawowy zawiedzie
enabledbooleantrueWłącza lub wyłącza wyszukiwanie w pamięci

Kolejność automatycznego wykrywania

Gdy provider nie jest ustawione, OpenClaw wybiera pierwszą dostępną opcję:
1

local

Wybrane, jeśli skonfigurowano memorySearch.local.modelPath i plik istnieje.
2

github-copilot

Wybrane, jeśli można rozpoznać token GitHub Copilot (zmienna środowiskowa lub profil uwierzytelniania).
3

openai

Wybrane, jeśli można rozpoznać klucz OpenAI.
4

gemini

Wybrane, jeśli można rozpoznać klucz Gemini.
5

voyage

Wybrane, jeśli można rozpoznać klucz Voyage.
6

mistral

Wybrane, jeśli można rozpoznać klucz Mistral.
7

deepinfra

Wybrane, jeśli można rozpoznać klucz DeepInfra.
8

bedrock

Wybrane, jeśli łańcuch poświadczeń AWS SDK zostanie rozpoznany (rola instancji, klucze dostępu, profil, SSO, tożsamość internetowa lub współdzielona konfiguracja).
ollama jest obsługiwane, ale nie jest wykrywane automatycznie (ustaw je jawnie).

Niestandardowe identyfikatory dostawców

memorySearch.provider może wskazywać niestandardowy wpis models.providers.<id>. OpenClaw rozpoznaje 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 GPU lub wieloma hostami mogą przypisać osadzania 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" }],
      },
    },
  },
  agents: {
    defaults: {
      memorySearch: {
        provider: "ollama-5080",
        model: "qwen3-embedding:0.6b",
      },
    },
  },
}

Rozpoznawanie klucza API

Zdalne osadzania wymagają klucza API. Bedrock używa zamiast tego domyślnego łańcucha poświadczeń AWS SDK (role instancji, SSO, klucze dostępu).
DostawcaZmienna środowiskowaKlucz konfiguracji
BedrockŁańcuch poświadczeń AWSKlucz API nie jest potrzebny
DeepInfraDEEPINFRA_API_KEYmodels.providers.deepinfra.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKENProfil uwierzytelniania przez logowanie urządzenia
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (placeholder)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
OAuth Codex obejmuje tylko czat/uzupełnienia i nie spełnia wymagań żądań osadzania.

Konfiguracja zdalnego punktu końcowego

Dla niestandardowych punktów końcowych zgodnych z OpenAI lub nadpisywania ustawień domyślnych dostawcy:
remote.baseUrl
string
Niestandardowy bazowy URL API.
remote.apiKey
string
Nadpisanie klucza API.
remote.headers
object
Dodatkowe nagłówki HTTP (scalane z ustawieniami domyślnymi dostawcy).
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Konfiguracja specyficzna dla dostawcy

KluczTypDomyślnieOpis
modelstringgemini-embedding-001Obsługuje także gemini-embedding-2-preview
outputDimensionalitynumber3072Dla Embedding 2: 768, 1536 lub 3072
Zmiana modelu lub outputDimensionality wyzwala automatyczne pełne ponowne indeksowanie.
Punkty końcowe osadzania zgodne z OpenAI mogą włączyć specyficzne dla dostawcy pola żądania input_type. Jest to przydatne w przypadku asymetrycznych modeli osadzania, które wymagają różnych etykiet dla osadzań zapytań i dokumentów.
KluczTypDomyślnieOpis
inputTypestringnieustawioneWspólne input_type dla osadzań zapytań i dokumentów
queryInputTypestringnieustawioneinput_type w czasie zapytania; nadpisuje inputType
documentInputTypestringnieustawioneinput_type indeksu/dokumentu; nadpisuje inputType
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        remote: {
          baseUrl: "https://embeddings.example/v1",
          apiKey: "env:EMBEDDINGS_API_KEY",
        },
        model: "asymmetric-embedder",
        queryInputType: "query",
        documentInputType: "passage",
      },
    },
  },
}
Zmiana tych wartości wpływa na tożsamość pamięci podręcznej osadzania dla indeksowania wsadowego dostawcy i powinna być po niej wykonana ponowna indeksacja pamięci, gdy model nadrzędny różnie traktuje etykiety.

Konfiguracja osadzania Bedrock

Bedrock używa domyślnego łańcucha poświadczeń AWS SDK — klucze API nie są potrzebne. Jeśli OpenClaw działa na EC2 z rolą instancji z włączonym Bedrock, wystarczy ustawić dostawcę i model:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
KluczTypDomyślnieOpis
modelstringamazon.titan-embed-text-v2:0Dowolny identyfikator modelu osadzania Bedrock
outputDimensionalitynumberdomyślne modeluDla Titan V2: 256, 512 lub 1024
Obsługiwane modele (z wykrywaniem rodziny i domyślnymi wymiarami):
Identyfikator modeluDostawcaDomyślne wymiaryKonfigurowalne wymiary
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Warianty z sufiksem przepustowości (np. amazon.titan-embed-text-v1:2:8k) dziedziczą konfigurację modelu bazowego.Uwierzytelnianie: uwierzytelnianie Bedrock używa standardowej kolejności rozpoznawania poświadczeń AWS SDK:
  1. Zmienne środowiskowe (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Pamięć podręczna tokenów SSO
  3. Poświadczenia tokenu tożsamości internetowej
  4. Współdzielone poświadczenia i pliki konfiguracyjne
  5. Poświadczenia metadanych ECS lub EC2
Region jest rozpoznawany z AWS_REGION, AWS_DEFAULT_REGION, baseUrl dostawcy amazon-bedrock albo domyślnie ustawiany na us-east-1.Uprawnienia IAM: rola lub użytkownik IAM potrzebuje:
{
  "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:0
KluczTypDomyślneOpis
local.modelPathstringpobierany automatycznieŚcieżka do pliku modelu GGUF
local.modelCacheDirstringdomyślne node-llama-cppKatalog pamięci podręcznej dla pobranych modeli
local.contextSizenumber | "auto"4096Rozmiar okna kontekstu dla kontekstu embeddingów. 4096 obejmuje typowe fragmenty (128–512 tokenów), ograniczając jednocześnie pamięć VRAM poza wagami. Obniż do 1024–2048 na hostach z ograniczeniami. "auto" używa wytrenowanego maksimum modelu — niezalecane dla modeli 8B+ (Qwen3-Embedding-8B: 40 960 tokenów → ~32 GB VRAM vs ~8,8 GB przy 4096).
Model domyślny: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, pobierany automatycznie). Check-outy źródłowe 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 main
openclaw memory index --force --agent main
Jeśli provider to auto, local jest wybierany tylko wtedy, gdy local.modelPath wskazuje istniejący plik lokalny. Odwołania do modeli hf: i HTTP(S) nadal mogą być używane jawnie z provider: "local", ale nie powodują, że auto wybierze lokalnego dostawcę, zanim model będzie dostępny na dysku.

Limit czasu embeddingów inline

sync.embeddingBatchTimeoutSeconds
number
Nadpisz limit czasu dla partii embeddingów inline podczas indeksowania pamięci.Brak ustawienia używa 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 embeddingów ograniczone CPU działają poprawnie, ale wolno.

Konfiguracja wyszukiwania hybrydowego

Wszystko w memorySearch.query.hybrid:
KluczTypDomyślneOpis
enabledbooleantrueWłącz hybrydowe wyszukiwanie BM25 + wektorowe
vectorWeightnumber0.7Waga wyników wektorowych (0-1)
textWeightnumber0.3Waga wyników BM25 (0-1)
candidateMultipliernumber4Mnożnik rozmiaru puli kandydatów
KluczTypDomyślneOpis
mmr.enabledbooleanfalseWłącz ponowne rangowanie MMR
mmr.lambdanumber0.70 = maks. różnorodność, 1 = maks. trafność

Pełny przykład

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Dodatkowe ścieżki pamięci

KluczTypOpis
extraPathsstring[]Dodatkowe katalogi lub pliki do indeksowania
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Ścieżki mogą być bezwzględne lub względne względem przestrzeni roboczej. Katalogi są skanowane rekurencyjnie pod kątem plików .md. Obsługa dowiązań symbolicznych zależy od aktywnego backendu: wbudowany silnik ignoruje dowiązania symboliczne, natomiast QMD stosuje zachowanie bazowego skanera QMD. Do wyszukiwania transkryptów między agentami w zakresie agenta użyj agents.list[].memorySearch.qmd.extraCollections zamiast memory.qmd.paths. Te dodatkowe kolekcje używają tego samego kształtu { path, name, pattern? }, ale są scalane osobno dla każdego agenta i mogą zachować jawne współdzielone nazwy, gdy ścieżka wskazuje poza bieżącą przestrzeń roboczą. Jeśli ta sama rozwiązana ścieżka pojawi się zarówno w memory.qmd.paths, jak i memorySearch.qmd.extraCollections, QMD zachowuje pierwszy wpis i pomija duplikat.

Pamięć multimodalna (Gemini)

Indeksuj obrazy i audio obok Markdown przy użyciu Gemini Embedding 2:
KluczTypDomyślneOpis
multimodal.enabledbooleanfalseWłącz indeksowanie multimodalne
multimodal.modalitiesstring[]["image"], ["audio"] lub ["all"]
multimodal.maxFileBytesnumber10000000Maks. rozmiar pliku do indeksowania
Dotyczy tylko plików w extraPaths. Domyślne korzenie pamięci pozostają wyłącznie Markdown. Wymaga gemini-embedding-2-preview. fallback musi mieć wartość "none".
Obsługiwane formaty: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (obrazy); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).

Pamięć podręczna embeddingów

KluczTypDomyślnieOpis
cache.enabledbooleanfalseBuforuj embeddingi fragmentów w SQLite
cache.maxEntriesnumber50000Maksymalna liczba buforowanych embeddingów
Zapobiega ponownemu tworzeniu embeddingów dla niezmienionego tekstu podczas ponownego indeksowania lub aktualizacji transkrypcji.

Indeksowanie wsadowe

KluczTypDomyślnieOpis
remote.nonBatchConcurrencynumber4Równoległe embeddingi inline
remote.batch.enabledbooleanfalseWłącz API embeddingów wsadowych
remote.batch.concurrencynumber2Równoległe zadania wsadowe
remote.batch.waitbooleantrueCzekaj na zakończenie wsadu
remote.batch.pollIntervalMsnumberInterwał odpytywania
remote.batch.timeoutMinutesnumberLimit czasu wsadu
Dostępne dla openai, gemini i voyage. W przypadku dużych uzupełnień OpenAI batch jest zwykle najszybszy i najtańszy. remote.nonBatchConcurrency steruje wywołaniami embeddingów inline używanymi przez lokalnych/samodzielnie hostowanych dostawców oraz dostawców hostowanych, gdy API wsadowe dostawcy nie są aktywne. Ollama domyślnie używa 1 dla indeksowania niewsadowego, aby nie przeciążać mniejszych hostów lokalnych; ustaw wyższą wartość na większych maszynach. To ustawienie jest niezależne od sync.embeddingBatchTimeoutSeconds, które kontroluje limit czasu dla wywołań embeddingów inline.

Wyszukiwanie w pamięci sesji (eksperymentalne)

Indeksuj transkrypcje sesji i udostępniaj je przez memory_search:
KluczTypDomyślnieOpis
experimental.sessionMemorybooleanfalseWłącz indeksowanie sesji
sourcesstring[]["memory"]Dodaj "sessions", aby uwzględnić transkrypcje
sync.sessions.deltaBytesnumber100000Próg bajtów do ponownego indeksowania
sync.sessions.deltaMessagesnumber50Próg wiadomości do ponownego indeksowania
Indeksowanie sesji jest opcjonalne i działa asynchronicznie. Wyniki mogą być nieznacznie nieaktualne. Logi sesji znajdują się na dysku, więc traktuj dostęp do systemu plików jako granicę zaufania.

Przyspieszenie wektorowe SQLite (sqlite-vec)

KluczTypDomyślnieOpis
store.vector.enabledbooleantrueUżyj sqlite-vec do zapytań wektorowych
store.vector.extensionPathstringbundledZastąp ścieżkę sqlite-vec
Gdy sqlite-vec jest niedostępny, OpenClaw automatycznie wraca do podobieństwa cosinusowego obliczanego w procesie.

Przechowywanie indeksu

KluczTypDomyślnieOpis
store.pathstring~/.openclaw/memory/{agentId}.sqliteLokalizacja indeksu (obsługuje token {agentId})
store.fts.tokenizerstringunicode61Tokenizer FTS5 (unicode61 lub trigram)

Konfiguracja backendu QMD

Ustaw memory.backend = "qmd", aby włączyć. Wszystkie ustawienia QMD znajdują się w memory.qmd:
KluczTypDomyślnieOpis
commandstringqmdŚcieżka do pliku wykonywalnego QMD; ustaw ścieżkę bezwzględną, gdy PATH usługi różni się od powłoki
searchModestringsearchPolecenie wyszukiwania: search, vsearch, query
includeDefaultMemorybooleantrueAutomatycznie indeksuj MEMORY.md + memory/**/*.md
paths[]arrayDodatkowe ścieżki: { name, path, pattern? }
sessions.enabledbooleanfalseIndeksuj transkrypcje sesji
sessions.retentionDaysnumberPrzechowywanie transkrypcji
sessions.exportDirstringKatalog eksportu
searchMode: "search" jest wyłącznie leksykalne/BM25. OpenClaw nie uruchamia sond gotowości wektorów semantycznych ani konserwacji osadzeń QMD dla tego trybu, także podczas memory status --deep; vsearch i query nadal wymagają gotowości wektorów QMD oraz osadzeń. OpenClaw preferuje bieżącą kolekcję QMD i kształty zapytań MCP, ale zachowuje działanie starszych wydań QMD, próbując w razie potrzeby zgodnych flag wzorców kolekcji i starszych nazw narzędzi MCP. Gdy QMD ogłasza obsługę wielu filtrów kolekcji, kolekcje z tego samego źródła są przeszukiwane za pomocą jednego procesu QMD; starsze kompilacje QMD zachowują ścieżkę zgodności dla poszczególnych kolekcji. To samo źródło oznacza, że trwałe kolekcje pamięci są grupowane razem, natomiast kolekcje transkryptów sesji pozostają osobną grupą, dzięki czemu dywersyfikacja źródeł nadal ma oba wejścia.
Nadpisania modeli QMD pozostają po stronie QMD, a nie w konfiguracji OpenClaw. Jeśli musisz globalnie nadpisać modele QMD, ustaw zmienne środowiskowe, takie jak QMD_EMBED_MODEL, QMD_RERANK_MODEL i QMD_GENERATE_MODEL, w środowisku uruchomieniowym bramy.
KluczTypDomyślnieOpis
update.intervalstring5mInterwał odświeżania
update.debounceMsnumber15000Debounce zmian plików
update.onBootbooleantrueOdświeżaj, gdy długotrwały menedżer QMD się otwiera; steruje też opcjonalnym odświeżaniem przy starcie
update.startupstringoffOpcjonalne odświeżanie przy starcie bramy: off, idle albo immediate
update.startupDelayMsnumber120000Opóźnienie przed uruchomieniem odświeżania startup: "idle"
update.waitForBootSyncbooleanfalseBlokuj otwarcie menedżera do czasu zakończenia jego początkowego odświeżenia
update.embedIntervalstringOsobny rytm osadzeń
update.commandTimeoutMsnumberLimit czasu dla poleceń QMD
update.updateTimeoutMsnumberLimit czasu dla operacji aktualizacji QMD
update.embedTimeoutMsnumberLimit czasu dla operacji osadzania QMD
KluczTypDomyślnieOpis
limits.maxResultsnumber6Maksymalna liczba wyników wyszukiwania
limits.maxSnippetCharsnumberOgranicz długość fragmentu
limits.maxInjectedCharsnumberOgranicz łączną liczbę wstrzykiwanych znaków
limits.timeoutMsnumber4000Limit czasu wyszukiwania
Kontroluje, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Ten sam schemat co session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
Domyślna konfiguracja dostarczana z produktem zezwala na sesje bezpośrednie i kanałowe, nadal odmawiając grupom.Domyślnie tylko DM. match.keyPrefix dopasowuje znormalizowany klucz sesji; match.rawKeyPrefix dopasowuje surowy klucz wraz z agent:<id>:.
memory.citations dotyczy wszystkich backendów:
WartośćZachowanie
auto (domyślnie)Dołącz stopkę Source: <path#line> do fragmentów
onZawsze dołączaj stopkę
offPomijaj stopkę (ścieżka nadal jest przekazywana wewnętrznie do agenta)
Odświeżenia QMD przy rozruchu używają jednorazowej ścieżki podprocesu podczas startu bramy. Długotrwały menedżer QMD nadal odpowiada za zwykły obserwator plików i timery interwałów, gdy wyszukiwanie w pamięci zostanie otwarte do użytku interaktywnego.

Pełny przykład QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, 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 jeden zaplanowany przebieg i używa wewnętrznych faz light/deep/REM jako szczegółu implementacyjnego. Opis zachowania koncepcyjnego i poleceń ukośnikowych znajdziesz w Dreaming.

Ustawienia użytkownika

KluczTypDomyślnieOpis
enabledbooleanfalseWłącz lub wyłącz Dreaming w całości
frequencystring0 3 * * *Opcjonalny rytm Cron dla pełnego przebiegu Dreaming
modelstringmodel domyślnyOpcjonalne nadpisanie modelu subagenta Dream Diary

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",
          },
        },
      },
    },
  },
}
  • Dreaming zapisuje stan maszyny w memory/.dreams/.
  • Dreaming zapisuje czytelne dla człowieka wyjście narracyjne do DREAMS.md (albo istniejącego dreams.md).
  • dreaming.model używa istniejącej bramki zaufania subagenta Plugin; ustaw plugins.entries.memory-core.subagent.allowModelOverride: true przed włączeniem tej opcji.
  • Dream Diary ponawia próbę raz z domyślnym modelem sesji, gdy skonfigurowany model jest niedostępny. Błędy zaufania lub listy dozwolonych są rejestrowane i nie są po cichu ponawiane.
  • Polityka i progi faz light/deep/REM są zachowaniem wewnętrznym, a nie konfiguracją dostępną dla użytkownika.

Powiązane