Sessions and memory
Wyszukiwanie w pamięci
memory_search znajduje odpowiednie notatki w plikach pamięci, nawet gdy
sformułowania różnią się od oryginalnego tekstu. Dzieli pamięć na małe fragmenty i
przeszukuje je za pomocą osadzeń, słów kluczowych lub obu tych metod.
Szybki start
OpenClaw domyślnie używa osadzeń OpenAI. Aby użyć innego dostawcy, należy ustawić go jawnie:
{ agents: { defaults: { memorySearch: { provider: "openai", // lub "gemini", "voyage", "mistral", "bedrock", "local", "ollama", "lmstudio", "github-copilot", "openai-compatible" }, }, },}provider może również odwoływać się do niestandardowego wpisu models.providers.<id> (na
przykład ollama-5080), o ile ten wpis ustawia api na "ollama" lub
identyfikator innego dostawcy z adapterem osadzeń pamięci.
Aby korzystać z lokalnych osadzeń bez klucza API, należy zainstalować oficjalny
plugin dostawcy llama.cpp i ustawić provider: "local":
openclaw plugins install @openclaw/llama-cpp-providerKopie kodu źródłowego nadal wymagają zatwierdzenia kompilacji natywnej: pnpm approve-builds, a następnie
pnpm rebuild node-llama-cpp.
Niektóre punkty końcowe osadzeń zgodne z OpenAI wymagają asymetrycznych etykiet input_type,
takich jak "query" dla wyszukiwań oraz "document"/"passage" dla indeksowanych
fragmentów. Należy je ustawić za pomocą queryInputType i documentInputType; zobacz
Dokumentację konfiguracji pamięci.
Obsługiwani dostawcy
| Dostawca | ID | Wymaga klucza API | Uwagi |
|---|---|---|---|
| Bedrock | bedrock |
Nie | Używa łańcucha poświadczeń AWS |
| DeepInfra | deepinfra |
Tak | Domyślny model BAAI/bge-m3 |
| Gemini | gemini |
Tak | Obsługuje indeksowanie obrazów i dźwięku |
| GitHub Copilot | github-copilot |
Nie | Używa subskrypcji Copilot |
| Lokalny | local |
Nie | Model GGUF, automatyczne pobieranie ~0.6 GB |
| LM Studio | lmstudio |
Nie | Serwer lokalny/samodzielnie hostowany |
| Mistral | mistral |
Tak | |
| Ollama | ollama |
Nie | Serwer lokalny/samodzielnie hostowany |
| OpenAI | openai |
Tak | Domyślny |
| Zgodny z OpenAI | openai-compatible |
Zazwyczaj | Ogólny punkt końcowy /v1/embeddings |
| Voyage | voyage |
Tak |
Jak działa wyszukiwanie
OpenClaw uruchamia równolegle dwie ścieżki wyszukiwania i scala wyniki:
flowchart LR
Q["Zapytanie"] --> E["Osadzenie"]
Q --> T["Tokenizacja"]
E --> VS["Wyszukiwanie wektorowe"]
T --> BM["Wyszukiwanie BM25"]
VS --> M["Scalanie ważone"]
BM --> M
M --> R["Najlepsze wyniki"]- Wyszukiwanie wektorowe dopasowuje podobne znaczenia („host gateway” pasuje do „komputer, na którym działa OpenClaw”).
- Wyszukiwanie słów kluczowych BM25 dopasowuje dokładne terminy (identyfikatory, komunikaty błędów, klucze konfiguracji).
- Wyszukiwanie nazw plików indeksuje ścieżki oddzielnie od treści notatek. Dokładne pełne ścieżki, nazwy bazowe i rdzenie nazw plików są klasyfikowane wyżej niż częściowe dopasowania ścieżek, natomiast fragmenty i wyniki słów kluczowych w treści nadal pochodzą z zawartości notatek.
Jeśli dostępna jest tylko jedna ścieżka, działa ona samodzielnie.
Tryb tylko FTS. Należy ustawić provider: "none", aby celowo wyłączyć osadzenia
i wyszukiwać wyłącznie za pomocą słów kluczowych. Pozostawienie provider bez ustawienia lub ustawienie na "auto"
również powoduje przejście na klasyfikację wyłącznie według słów kluczowych, jeśli nie skonfigurowano uwierzytelniania osadzeń,
bez zgłaszania błędu; tak samo działa provider: "local" (dostawca GGUF/llama.cpp),
gdy ulegnie awarii.
Jawnie wskazany dostawca jest niedostępny. Jeśli jawnie wskazano dowolnego innego dostawcę
(na przykład openai, ollama, gemini) i stanie się on niedostępny w
momencie żądania (nieprawidłowe uwierzytelnianie, awaria sieci), memory_search zgłasza pamięć jako
niedostępną zamiast po cichu przechodzić na wyniki wyłącznie FTS. Dzięki temu
nieprawidłowo działający skonfigurowany dostawca pozostaje widoczny. Należy ustawić provider: "none", aby celowo
korzystać z wyszukiwania wyłącznie FTS, lub naprawić konfigurację dostawcy/uwierzytelniania, aby przywrócić klasyfikację
semantyczną.
Poprawianie jakości wyszukiwania
Dwie opcjonalne funkcje pomagają w przypadku obszernej historii notatek.
Zanik czasowy
Stare notatki stopniowo tracą wagę w klasyfikacji, dzięki czemu najpierw pojawiają się nowsze informacje.
Przy domyślnym 30-dniowym okresie półtrwania notatka z poprzedniego miesiąca otrzymuje 50% swojej
pierwotnej wagi. MEMORY.md i inne pliki bez daty w katalogu memory/ są
ponadczasowe i nigdy nie podlegają zanikowi; zanikowi podlegają tylko datowane pliki memory/YYYY-MM-DD.md.
MMR (różnorodność)
Ogranicza nadmiarowe wyniki. Jeśli pięć notatek wspomina tę samą konfigurację routera, MMR zapewnia, że najlepsze wyniki obejmują różne tematy zamiast się powtarzać.
Włączanie obu funkcji
{ agents: { defaults: { memorySearch: { query: { hybrid: { mmr: { enabled: true }, temporalDecay: { enabled: true }, }, }, }, }, },}Pamięć multimodalna
Za pomocą gemini-embedding-2-preview można indeksować obrazy i dźwięk razem z
dokumentami Markdown. Dotyczy to wyłącznie plików w katalogu memorySearch.extraPaths; domyślne
katalogi główne pamięci (MEMORY.md, memory/*.md) nadal obsługują wyłącznie Markdown. Zapytania wyszukiwania
pozostają tekstowe, ale są dopasowywane do treści wizualnych i dźwiękowych. Instrukcje konfiguracji znajdują się w
Dokumentacji konfiguracji pamięci.
Wyszukiwanie w pamięci sesji
Aby dokładnie wyszukiwać pełny tekst w transkrypcjach sesji, należy użyć sessions_search,
a następnie otworzyć wynik za pomocą sessions_history. Wyszukiwanie w pamięci sesji pozostaje semantycznym,
eksperymentalnym uzupełnieniem.
Opcjonalnie można indeksować transkrypcje sesji, aby memory_search mógł przywoływać wcześniejsze
konwersacje. Jest to opcja wymagająca włączenia: należy ustawić experimental.sessionMemory: true i dodać
"sessions" do sources (domyślna wartość sources to ["memory"]).
Wyniki sesji podlegają ustawieniu tools.sessions.visibility: domyślna wartość "tree" ujawnia tylko
bieżącą sesję oraz sesje przez nią utworzone. Aby z innej sesji przywołać niepowiązaną
sesję tego samego agenta (na przykład sesję uruchomioną przez gateway z wiadomości prywatnej),
należy rozszerzyć widoczność do "agent".
W przypadku używania backendu QMD należy również ustawić memory.qmd.sessions.enabled: true, aby
transkrypcje były eksportowane do kolekcji QMD; same experimental.sessionMemory
i sources nie eksportują transkrypcji do QMD. Zobacz
dokumentację konfiguracji.
Rozwiązywanie problemów
Brak wyników? Należy uruchomić openclaw memory status, aby sprawdzić indeks. Jeśli jest pusty, należy uruchomić
openclaw memory index --force.
Tylko dopasowania słów kluczowych? Dostawca osadzeń może nie być skonfigurowany. Należy sprawdzić
openclaw memory status --deep.
Lokalne osadzenia przekraczają limit czasu? ollama, lmstudio i local domyślnie używają dłuższego
limitu czasu dla wbudowanego przetwarzania wsadowego. Jeśli host jest po prostu powolny, należy ustawić
agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds i ponownie uruchomić
openclaw memory index --force.
Nie znaleziono tekstu CJK? Należy ponownie utworzyć indeks FTS za pomocą
openclaw memory index --force.