Omówienie pamięci
Jak działa pamięć.
Wbudowany silnik
Domyślny backend SQLite.
Silnik QMD
Lokalny proces pomocniczy.
Wyszukiwanie w pamięci
Potok wyszukiwania i dostrajanie.
Active Memory
Podagent pamięci dla sesji interaktywnych.
agents.defaults.memorySearch pliku openclaw.json (lub w zastępującej ją sekcji agents.list[].memorySearch dla poszczególnych agentów), chyba że zaznaczono inaczej.
Przełącznik funkcji Active Memory i konfiguracja podagenta znajdują się w sekcji
plugins.entries.active-memory, a nie memorySearch.Active Memory korzysta z modelu dwóch warunków:- Plugin musi być włączony i wskazywać identyfikator bieżącego agenta
- żądanie musi pochodzić z kwalifikującej się interaktywnej, trwałej sesji czatu
Wybór dostawcy
Gdy
provider nie jest ustawione, OpenClaw używa osadzeń OpenAI. Aby użyć Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, lokalnego modelu GGUF lub punktu końcowego /v1/embeddings zgodnego z OpenAI, należy jawnie ustawić provider.
Starsze konfiguracje, które nadal zawierają provider: "auto", są rozpoznawane jako openai.
Gdy provider nie jest ustawione, obecne jest starsze provider: "auto" lub
provider: "none" celowo wybiera tryb wyłącznie FTS, przywoływanie z pamięci może nadal
korzystać z leksykalnego rankingu FTS, gdy osadzenia są niedostępne.
Jawnie określeni dostawcy nielokalni stosują zasadę bezpiecznego odrzucania. Jeśli memorySearch.provider zostanie ustawione na
konkretnego dostawcę korzystającego ze zdalnego backendu, takiego jak Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage lub niestandardowy dostawca
zgodny z OpenAI, a dostawca ten będzie niedostępny w czasie działania, memory_search
zwróci wynik wskazujący niedostępność zamiast niejawnie używać przywoływania wyłącznie FTS. Należy poprawić
konfigurację dostawcy lub uwierzytelniania, przełączyć się na osiągalnego dostawcę albo ustawić
provider: "none", jeśli celowo ma być używane przywoływanie wyłącznie FTS.
Niestandardowe identyfikatory dostawców
memorySearch.provider może wskazywać niestandardowy wpis models.providers.<id> dla adapterów dostawców przeznaczonych do pamięci, takich jak ollama, albo dla interfejsów API modeli zgodnych z OpenAI, takich jak openai-responses / openai-completions. OpenClaw rozpoznaje właściciela api tego dostawcy na potrzeby adaptera osadzania, zachowując niestandardowy identyfikator dostawcy do obsługi punktu końcowego, uwierzytelniania i prefiksu modelu. Dzięki temu konfiguracje z wieloma procesorami GPU lub hostami mogą przeznaczyć określony lokalny punkt końcowy na osadzenia pamięci:
Rozpoznawanie klucza API
Zdalne osadzenia wymagają klucza API. Bedrock używa zamiast niego domyślnego łańcucha poświadczeń AWS SDK (ról instancji, SSO, kluczy dostępu lub klucza API Bedrock).OAuth Codex obejmuje tylko czat i uzupełnienia oraz nie spełnia wymagań żądań osadzania.
Konfiguracja zdalnego punktu końcowego
Należy użyćprovider: "openai-compatible" dla ogólnego serwera
/v1/embeddings zgodnego z OpenAI, który nie powinien dziedziczyć globalnych poświadczeń czatu OpenAI.
string
Niestandardowy bazowy adres URL interfejsu API.
string
Zastępczy klucz API.
object
Dodatkowe nagłówki HTTP (scalane z wartościami domyślnymi dostawcy).
Konfiguracja właściwa dla dostawcy
Gemini
Gemini
Typy danych wejściowych zgodne z OpenAI
Typy danych wejściowych zgodne z OpenAI
Punkty końcowe osadzania zgodne z OpenAI mogą opcjonalnie używać właściwych dla dostawcy pól żądania Zmiana tych wartości wpływa na tożsamość pamięci podręcznej osadzeń używanej podczas wsadowego indeksowania przez dostawcę. Jeśli model nadrzędny traktuje te etykiety odmiennie, po zmianie należy ponownie zindeksować pamięć.
input_type. Jest to przydatne w przypadku asymetrycznych modeli osadzania, które wymagają różnych etykiet dla osadzeń zapytań i dokumentów.Bedrock
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 klucze API. Jeśli OpenClaw działa na EC2 z rolą instancji obsługującą Bedrock, wystarczy ustawić dostawcę i model:Obsługiwane modele (z wykrywaniem rodziny i domyślnymi wymiarami):
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 wartość domyślna 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, w tymAWS_PROFILE) - Proces poświadczeń (
credential_processw pliku konfiguracyjnym AWS) - Poświadczenia tokena tożsamości internetowej
- Poświadczenia metadanych instancji ECS lub EC2
InvokeModel do określonego modelu:Lokalnie (GGUF + llama.cpp)
Lokalnie (GGUF + llama.cpp)
Najpierw należy zainstalować oficjalnego dostawcę llama.cpp:
openclaw plugins install @openclaw/llama-cpp-provider.
Model domyślny: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 GB, pobierany automatycznie). Wersje ze źródeł nadal wymagają zatwierdzenia kompilacji natywnej: pnpm approve-builds, a następnie pnpm rebuild node-llama-cpp.Samodzielnego CLI można użyć do zweryfikowania tej samej ścieżki dostawcy, której używa Gateway:local.contextSize wpływają również na automatyczne rozmieszczanie warstw GPU przez node-llama-cpp, dzięki czemu wagi modelu i żądany kontekst osadzania są dopasowywane łącznie. Po załadowaniu środowiska uruchomieniowego openclaw memory status --deep raportuje ostatnio znane informacje o backendzie llama.cpp, urządzeniu, odciążaniu, żądanym kontekście oraz opatrzone znacznikiem czasu informacje o pamięci; pasywne sprawdzanie stanu nie ładuje modelu.Dla lokalnych osadzeń GGUF należy jawnie ustawić provider: "local". Odwołania do modeli hf: oraz 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 procesie
number
Zastępuje limit czasu dla przetwarzanych w procesie 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. Wartość tę należy zwiększyć, gdy lokalne partie osadzania obciążające procesor działają prawidłowo, ale wolno.Zachowanie indeksowania
Wszystkie opcje znajdują się wmemorySearch.sync, chyba że zaznaczono inaczej:
number
Rozmiar fragmentu w tokenach używany podczas dzielenia źródeł pamięci przed osadzaniem (wartość domyślna: 400).
number
Nakładanie się tokenów między sąsiednimi fragmentami w celu zachowania kontekstu w pobliżu granic podziału (wartość domyślna: 80).
Zmiana
chunking.tokens lub chunking.overlap zmienia granice fragmentów i unieważnia istniejącą tożsamość indeksu (zobacz ostrzeżenie w sekcji Wybór dostawcy).Konfiguracja wyszukiwania hybrydowego
Wszystkie opcje wmemorySearch.query:
Oraz w
memorySearch.query.hybrid:
- MMR (różnorodność)
- Spadek czasowy (aktualność)
Pełny przykład
Dodatkowe ścieżki pamięci
.md. Obsługa dowiązań symbolicznych zależy od aktywnego backendu: wbudowany silnik pomija dowiązania symboliczne, natomiast QMD postępuje zgodnie z zachowaniem bazowego skanera QMD.
Do wyszukiwania transkrypcji między agentami w zakresie agenta należy użyć agents.list[].memorySearch.qmd.extraCollections zamiast memory.qmd.paths. Te dodatkowe kolekcje mają ten sam kształt { path, name, pattern? }, ale są scalane osobno dla każdego agenta i mogą zachowywać jawne nazwy współdzielone, 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 memorySearch.qmd.extraCollections, QMD zachowuje pierwszy wpis i pomija duplikat.
Pamięć multimodalna (Gemini)
Indeksowanie obrazów i dźwięku wraz z Markdown przy użyciu Gemini Embedding 2:Dotyczy tylko plików w
extraPaths. Domyślne źródła pamięci nadal obsługują wyłącznie Markdown. Wymaga gemini-embedding-2-preview. fallback musi mieć wartość "none"..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (obrazy); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (dźwięk).
Pamięć podręczna osadzeń
Zapobiega ponownemu generowaniu osadzeń niezmienionego tekstu podczas ponownego indeksowania lub aktualizacji transkrypcji. Pozostaw
maxEntries bez wartości, aby pamięć podręczna była nieograniczona; ustaw tę wartość, gdy ograniczenie przyrostu zajętości dysku jest ważniejsze niż maksymalna szybkość ponownego indeksowania. Po ustawieniu, gdy pamięć podręczna przekroczy limit, najstarsze wpisy (według czasu ostatniej aktualizacji) są usuwane jako pierwsze.
Indeksowanie wsadowe
Dostępne dla
gemini, openai i voyage. Przetwarzanie wsadowe OpenAI jest zwykle najszybsze i najtańsze w przypadku dużego uzupełniania danych historycznych.
remote.nonBatchConcurrency steruje bezpośrednimi wywołaniami osadzania używanymi przez dostawców lokalnych/samodzielnie hostowanych oraz dostawców hostowanych, gdy ich wsadowe API nie są aktywne. W przypadku indeksowania niewsadowego Ollama domyślnie używa 1, aby nie przeciążać mniejszych hostów lokalnych; na większych maszynach można ustawić wyższą wartość.
Jest to ustawienie odrębne od sync.embeddingBatchTimeoutSeconds, które steruje limitem czasu bezpośrednich wywołań osadzania.
Wyszukiwanie w pamięci sesji (eksperymentalne)
Indeksuj transkrypcje sesji i udostępniaj je za pośrednictwemmemory_search:
Trafienia z transkrypcji sesji również podlegają ustawieniu
tools.sessions.visibility. Domyślna widoczność
tree udostępnia tylko bieżącą sesję i sesje przez nią uruchomione. Aby
przywołać z innej sesji niepowiązaną sesję tego samego agenta wysłaną przez Gateway,
na przykład wiadomość prywatną, należy świadomie rozszerzyć widoczność do agent (lub all tylko
wtedy, gdy wymagane jest również przywoływanie między agentami i zezwalają na to zasady komunikacji między agentami).
Poniższe przykłady umieszczają te ustawienia w agents.defaults. Można także
zastosować równoważne ustawienia memorySearch w nadpisaniu dla konkretnego agenta, jeśli tylko jeden
agent ma indeksować i przeszukiwać transkrypcje sesji.
Aby umożliwić przywoływanie z Gateway do wiadomości prywatnych w obrębie tego samego agenta:
- Wbudowany backend
- Backend QMD
agents.defaults.memorySearch.experimental.sessionMemory i
sources: ["sessions"] same w sobie nie eksportują transkrypcji do QMD. Należy również ustawić
memory.qmd.sessions.enabled: true.
Akceleracja wektorowa SQLite (sqlite-vec)
Gdy sqlite-vec jest niedostępne, OpenClaw automatycznie przechodzi na obliczanie podobieństwa cosinusowego 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.
Konfiguracja backendu QMD
Ustawmemory.backend = "qmd", aby włączyć. Wszystkie ustawienia QMD znajdują się w memory.qmd:
searchMode: "search" korzysta wyłącznie z wyszukiwania leksykalnego/BM25. W tym trybie OpenClaw nie wykonuje semantycznych testów gotowości wektorowej ani obsługi osadzeń QMD, również podczas memory status --deep; vsearch i query nadal wymagają gotowości wektorowej i osadzeń QMD.
rerank: false zmienia tylko 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ę wartość nieustawioną, aby używać domyślnego mechanizmu ponownego szeregowania zapytań QMD.
OpenClaw preferuje aktualne formaty kolekcji i zapytań MCP QMD, ale zachowuje obsługę starszych wersji QMD, próbując w razie potrzeby zgodnych flag wzorców kolekcji i starszych nazw narzędzi MCP. Gdy QMD deklaruje obsługę wielu filtrów kolekcji, kolekcje tego samego źródła są przeszukiwane w jednym procesie QMD; starsze kompilacje QMD zachowują ścieżkę zgodności dla poszczególnych kolekcji. To samo źródło oznacza, że kolekcje trwałej pamięci (domyślne pliki pamięci oraz ścieżki niestandardowe) są grupowane razem, natomiast kolekcje transkrypcji sesji pozostają odrębną grupą, dzięki czemu dywersyfikacja źródeł nadal korzysta z obu danych wejściowych.
Nadpisania modeli QMD pozostają po stronie QMD, a nie w konfiguracji OpenClaw. Aby globalnie zastąpić modele QMD, należy ustawić zmienne środowiskowe, takie jak
QMD_EMBED_MODEL, QMD_RERANK_MODEL i QMD_GENERATE_MODEL, w środowisku uruchomieniowym Gateway.Integracja z mcporter
Wszystkie ustawienia znajdują się wmemory.qmd.mcporter. Kieruje wyszukiwania QMD przez długotrwale działający demon MCP mcporter zamiast uruchamiać qmd dla każdego zapytania, ograniczając narzut zimnego startu w przypadku większych modeli.
Wymaga zainstalowanego
mcporter dostępnego w PATH oraz skonfigurowanego serwera mcporter, który uruchamia qmd mcp. W prostszych konfiguracjach lokalnych, w których koszt uruchamiania procesu dla każdego zapytania jest akceptowalny, należy pozostawić tę opcję wyłączoną.
Harmonogram aktualizacji
Harmonogram aktualizacji
Limity
Limity
Zakres
Zakres
Określa, które sesje mogą otrzymywać wyniki wyszukiwania QMD. Schemat taki sam jak Dostarczana wartość domyślna zezwala wyłącznie na wiadomości prywatne/bezpośrednie, odrzucając grupy i inne typy kanałów.
session.sendPolicy:match.keyPrefix dopasowuje znormalizowany klucz sesji; match.rawKeyPrefix dopasowuje nieprzetworzony klucz zawierający agent:<id>:.Cytowania
Cytowania
memory.citations ma zastosowanie do wszystkich backendów:update.onBoot ma wartość true i nie skonfigurowano okresowej konserwacji aktualizacji ani osadzeń, podczas uruchamiania używany jest jednorazowy menedżer na potrzeby odświeżenia startowego, który następnie zostaje zamknięty. Jeśli skonfigurowano interwał aktualizacji lub osadzania, podczas uruchamiania otwierany jest długotrwały menedżer QMD, aby zarządzał obserwatorem i licznikami interwałów; update.onBoot: false pomija wyłącznie natychmiastowe odświeżenie startowe.
Pełny przykład QMD
Dreaming
Dreaming konfiguruje się wplugins.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 zachowania koncepcyjnego i poleceń z ukośnikiem zawiera strona Dreaming.
Ustawienia użytkownika
Przykład
- Dreaming zapisuje stan maszyny w
memory/.dreams/. - Dreaming zapisuje czytelny dla człowieka opis w
DREAMS.md(lub istniejącymdreams.md). dreaming.modelkorzysta z istniejącej bramy zaufania podagenta Pluginu; przed jego włączeniem należy ustawićplugins.entries.memory-core.subagent.allowModelOverride: true.- 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 powodują niejawnego ponowienia próby.
- Zasady i progi faz lekkiej, głębokiej i REM są zachowaniem wewnętrznym, a nie konfiguracją dostępną dla użytkownika.