Szybki start
Wklej to doopenclaw.json, aby uzyskać konfigurację z bezpiecznymi ustawieniami domyślnymi — plugin włączony, ograniczony do
agenta main, tylko sesje wiadomości bezpośrednich, dziedziczy model sesji,
gdy jest dostępny:
plugins.entries.active-memory.enabled: truewłącza pluginconfig.agents: ["main"]włącza Active Memory tylko dla agentamainconfig.allowedChatTypes: ["direct"]ogranicza ją do sesji wiadomości bezpośrednich (grupy/kanały włączaj jawnie)config.model(opcjonalne) przypina dedykowany model przywoływania; brak ustawienia dziedziczy bieżący model sesjiconfig.modelFallbackjest używane tylko wtedy, gdy nie uda się ustalić modelu jawnego ani dziedziczonegoconfig.promptStyle: "balanced"jest ustawieniem domyślnym dla tryburecent- Active Memory nadal działa tylko w kwalifikujących się interaktywnych, trwałych sesjach czatu
Zalecenia dotyczące szybkości
Najprostsza konfiguracja polega na pozostawieniuconfig.model bez ustawienia i pozwoleniu Active Memory używać
tego samego modelu, którego już używasz do zwykłych odpowiedzi. To najbezpieczniejsze ustawienie domyślne,
ponieważ podąża za istniejącymi preferencjami dostawcy, uwierzytelniania i modelu.
Jeśli chcesz, aby Active Memory działała szybciej, użyj dedykowanego modelu inferencyjnego
zamiast pożyczać główny model czatu. Jakość przywoływania ma znaczenie, ale opóźnienie
ma tu większe znaczenie niż w głównej ścieżce odpowiedzi, a powierzchnia narzędziowa Active Memory
jest wąska (wywołuje tylko dostępne narzędzia przywoływania pamięci).
Dobre opcje szybkich modeli:
cerebras/gpt-oss-120bjako dedykowany model przywoływania o niskim opóźnieniugoogle/gemini-3-flashjako niskoopóźnieniowy model awaryjny bez zmiany głównego modelu czatu- zwykły model sesji, przez pozostawienie
config.modelbez ustawienia
Konfiguracja Cerebras
Dodaj dostawcę Cerebras i skieruj na niego Active Memory:chat/completions dla
wybranego modelu — sama widoczność w /v1/models tego nie gwarantuje.
Jak to zobaczyć
Active Memory wstrzykuje ukryty, niezaufany prefiks promptu dla modelu. Nie ujawnia surowych tagów<active_memory_plugin>...</active_memory_plugin> w
zwykłej odpowiedzi widocznej dla klienta.
Przełącznik sesji
Użyj polecenia pluginu, gdy chcesz wstrzymać lub wznowić Active Memory dla bieżącej sesji czatu bez edytowania konfiguracji:plugins.entries.active-memory.enabled, kierowania na agentów ani innej globalnej
konfiguracji.
Jeśli chcesz, aby polecenie zapisało konfigurację i wstrzymało lub wznowiło Active Memory dla
wszystkich sesji, użyj jawnej formy globalnej:
plugins.entries.active-memory.config.enabled. Pozostawia
plugins.entries.active-memory.enabled włączone, aby polecenie pozostało dostępne do
ponownego włączenia Active Memory później.
Jeśli chcesz zobaczyć, co Active Memory robi w sesji na żywo, włącz
przełączniki sesji odpowiadające oczekiwanemu wyjściu:
- linię statusu Active Memory, taką jak
Active Memory: status=ok elapsed=842ms query=recent summary=34 chars, gdy włączone jest/verbose on - czytelne podsumowanie debugowania, takie jak
Active Memory Debug: Lemon pepper wings with blue cheese., gdy włączone jest/trace on
/trace raw, śledzony blok Model Input (User Role) pokaże
ukryty prefiks Active Memory jako:
Kiedy działa
Active Memory używa dwóch bramek:- Jawne włączenie w konfiguracji
Plugin musi być włączony, a identyfikator bieżącego agenta musi występować w
plugins.entries.active-memory.config.agents. - Ścisła kwalifikowalność w czasie działania Nawet gdy Active Memory jest włączona i skierowana na agenta, działa tylko w kwalifikujących się interaktywnych, trwałych sesjach czatu.
Typy sesji
config.allowedChatTypes kontroluje, w jakich rodzajach rozmów Active
Memory może w ogóle działać.
Domyślna wartość to:
config.allowedChatIds i
config.deniedChatIds po wybraniu dozwolonych typów sesji.
allowedChatIds to jawna lista dozwolonych rozwiązanych identyfikatorów rozmów. Gdy
nie jest pusta, Active Memory działa tylko wtedy, gdy identyfikator rozmowy sesji znajduje się na
tej liście. Zawęża to naraz każdy dozwolony typ czatu, w tym wiadomości bezpośrednie.
Jeśli chcesz uwzględnić wszystkie wiadomości bezpośrednie oraz tylko konkretne grupy, dodaj
identyfikatory bezpośrednich rozmówców do allowedChatIds albo utrzymaj allowedChatTypes
skupione na wdrożeniu grup/kanałów, które testujesz.
deniedChatIds to jawna lista blokad. Zawsze ma pierwszeństwo przed
allowedChatTypes i allowedChatIds, więc pasująca rozmowa jest pomijana
nawet wtedy, gdy jej typ sesji jest w innym przypadku dozwolony.
Identyfikatory pochodzą z trwałego klucza sesji kanału: na przykład Feishu
chat_id / open_id, identyfikator czatu Telegram albo identyfikator kanału Slack. Dopasowywanie jest
niewrażliwe na wielkość liter. Jeśli allowedChatIds nie jest puste, a OpenClaw nie może ustalić
identyfikatora rozmowy dla sesji, Active Memory pomija turę zamiast
zgadywać.
Przykład:
Gdzie działa
Active Memory to funkcja wzbogacania rozmów, a nie ogólnoplatformowa funkcja inferencyjna.| Powierzchnia | Czy działa Active Memory? |
|---|---|
| Trwałe sesje Control UI / czatu internetowego | Tak, jeśli plugin jest włączony, a agent jest wskazany |
| Inne interaktywne sesje kanałów na tej samej trwałej ścieżce czatu | Tak, jeśli plugin jest włączony, a agent jest wskazany |
| Bezinterfejsowe jednorazowe przebiegi | Nie |
| Heartbeat/przebiegi w tle | Nie |
Ogólne wewnętrzne ścieżki agent-command | Nie |
| Wykonanie podagenta/wewnętrznego pomocnika | Nie |
Dlaczego warto jej używać
Używaj Active Memory, gdy:- sesja jest trwała i widoczna dla użytkownika
- agent ma istotną pamięć długoterminową do przeszukania
- ciągłość i personalizacja są ważniejsze niż surowy determinizm promptu
- stabilnych preferencji
- powtarzających się nawyków
- długoterminowego kontekstu użytkownika, który powinien pojawiać się naturalnie
- automatyzacji
- wewnętrznych procesów roboczych
- jednorazowych zadań API
- miejsc, w których ukryta personalizacja byłaby zaskakująca
Jak to działa
Kształt działania w runtime jest następujący: Blokujący podagent pamięci może używać tylko skonfigurowanych narzędzi przywoływania pamięci. Domyślnie są to:memory_searchmemory_get
plugins.slots.memory ma wartość memory-lancedb, domyślnie używane jest zamiast tego memory_recall.
Ustaw config.toolsAllow, gdy inny dostawca pamięci udostępnia
inny kontrakt narzędzia przywoływania.
Jeśli połączenie jest słabe, powinien zwrócić NONE.
Tryby zapytań
config.queryMode kontroluje, jak dużą część rozmowy widzi blokujący podagent pamięci.
Wybierz najmniejszy tryb, który nadal dobrze odpowiada na pytania uzupełniające;
budżety limitu czasu powinny rosnąć wraz z rozmiarem kontekstu (message < recent < full).
- message
- recent
- full
Wysyłana jest tylko najnowsza wiadomość użytkownika.Użyj tego, gdy:
- chcesz najszybszego działania
- chcesz najsilniejszego ukierunkowania na przywoływanie stabilnych preferencji
- tury uzupełniające nie wymagają kontekstu rozmowy
3000 do 5000 ms dla config.timeoutMs.Style promptów
config.promptStyle kontroluje, jak chętny lub rygorystyczny jest blokujący podagent pamięci
przy decydowaniu, czy zwrócić pamięć.
Dostępne style:
balanced: domyślny styl ogólnego przeznaczenia dla tryburecentstrict: najmniej chętny; najlepszy, gdy chcesz bardzo mało przenikania z pobliskiego kontekstucontextual: najbardziej sprzyjający ciągłości; najlepszy, gdy historia rozmowy powinna mieć większe znaczenierecall-heavy: bardziej skłonny do ujawniania pamięci przy słabszych, ale nadal prawdopodobnych dopasowaniachprecision-heavy: agresywnie preferujeNONE, chyba że dopasowanie jest oczywistepreference-only: zoptymalizowany pod kątem ulubionych rzeczy, nawyków, rutyn, gustu i powtarzających się faktów osobistych
config.promptStyle nie jest ustawione:
config.promptStyle jawnie, to nadpisanie ma pierwszeństwo.
Przykład:
Zasady fallbacku modelu
Jeśliconfig.model nie jest ustawione, Active Memory próbuje rozwiązać model w tej kolejności:
config.modelFallback kontroluje skonfigurowany krok fallbacku.
Opcjonalny niestandardowy fallback:
config.modelFallbackPolicy jest zachowane wyłącznie jako przestarzałe pole zgodności
dla starszych konfiguracji. Nie zmienia już zachowania w czasie działania.
Narzędzia pamięci
Domyślnie Active Memory pozwala blokującemu podagentowi przywoływania wywoływaćmemory_search i memory_get. Odpowiada to wbudowanemu kontraktowi memory-core.
Gdy plugins.slots.memory wybiera memory-lancedb, a config.toolsAllow nie jest ustawione, Active Memory zachowuje istniejące zachowanie LanceDB
i zamiast tego używa memory_recall.
Jeśli używasz innego pluginu pamięci, ustaw config.toolsAllow na dokładne nazwy narzędzi,
które rejestruje ten plugin. Active Memory wymienia te narzędzia w prompcie przywoływania
i przekazuje tę samą listę do osadzonego podagenta. Jeśli żadne ze
skonfigurowanych narzędzi nie jest dostępne albo podagent pamięci zawiedzie, Active Memory
pomija przywoływanie w tej turze, a główna odpowiedź jest kontynuowana bez kontekstu pamięci.
W przypadku niestandardowych narzędzi przywoływania niepuste dane wyjściowe narzędzia widoczne dla modelu liczą się jako dowód przywołania,
chyba że ustrukturyzowane pola wyniku jawnie zgłaszają pusty wynik lub
niepowodzenie.
toolsAllow akceptuje tylko konkretne nazwy narzędzi pamięci. Wieloznaczniki, wpisy group:*
oraz podstawowe narzędzia agenta, takie jak read, exec, message i
web_search, są ignorowane przed uruchomieniem ukrytego podagenta pamięci.
Uwaga o zachowaniu domyślnym: Active Memory nie zawiera już memory_recall w domyślnej liście dozwolonych narzędzi
memory-core. Istniejące konfiguracje memory-lancedb nadal działają,
gdy plugins.slots.memory jest ustawione na memory-lancedb. Jawne toolsAllow
zawsze nadpisuje automatyczną wartość domyślną.
Wbudowany memory-core
Domyślna konfiguracja nie wymaga jawnegotoolsAllow:
Pamięć LanceDB
Dołączony pluginmemory-lancedb udostępnia memory_recall. Wybranie slotu
pamięci wystarcza, aby Active Memory używało tego narzędzia przywoływania:
Lossless Claw
Lossless Claw to plugin silnika kontekstu z własnymi narzędziami przywoływania. Najpierw zainstaluj i skonfiguruj go jako silnik kontekstu; zobacz Silnik kontekstu. Następnie pozwól Active Memory używać narzędzi przywoływania Lossless Claw:lcm_expand do toolsAllow dla głównego podagenta Active Memory.
Lossless Claw używa go jako narzędzia rozszerzania delegowanego niższego poziomu.
Zaawansowane wyjścia awaryjne
Te opcje celowo nie są częścią zalecanej konfiguracji.config.thinking może nadpisać poziom myślenia blokującego podagenta pamięci:
config.promptAppend dodaje dodatkowe instrukcje operatora po domyślnym prompcie Active
Memory i przed kontekstem rozmowy:
promptAppend z niestandardowym toolsAllow, gdy niepodstawowy plugin pamięci wymaga
instrukcji specyficznych dla providera dotyczących kolejności narzędzi lub kształtowania zapytań.
config.promptOverride zastępuje domyślny prompt Active Memory. OpenClaw
nadal dołącza potem kontekst rozmowy:
NONE
albo zwarty kontekst faktów o użytkowniku dla głównego modelu.
Utrwalanie transkryptu
Uruchomienia blokującego podagenta pamięci Active Memory tworzą prawdziwy transkryptsession.jsonl
podczas wywołania blokującego podagenta pamięci.
Domyślnie ten transkrypt jest tymczasowy:
- jest zapisywany w katalogu tymczasowym
- jest używany tylko na potrzeby uruchomienia blokującego podagenta pamięci
- jest usuwany natychmiast po zakończeniu uruchomienia
config.transcriptDir.
Używaj tego ostrożnie:
- transkrypty blokującego podagenta pamięci mogą szybko się gromadzić w aktywnych sesjach
- tryb zapytań
fullmoże duplikować dużą część kontekstu rozmowy - te transkrypty zawierają ukryty kontekst promptu i przywołane wspomnienia
Konfiguracja
Cała konfiguracja Active Memory znajduje się pod:| Key | Type | Znaczenie |
|---|---|---|
enabled | boolean | Włącza sam Plugin |
config.agents | string[] | Identyfikatory agentów, które mogą używać aktywnej pamięci |
config.model | string | Opcjonalny odnośnik do modelu blokującego podagenta pamięci; gdy nie jest ustawiony, aktywna pamięć używa modelu bieżącej sesji |
config.allowedChatTypes | ("direct" | "group" | "channel")[] | Typy sesji, które mogą uruchamiać Active Memory; domyślnie są to sesje w stylu wiadomości bezpośrednich |
config.allowedChatIds | string[] | Opcjonalna lista dozwolonych konwersacji stosowana po allowedChatTypes; niepuste listy domyślnie blokują wszystko poza wpisami |
config.deniedChatIds | string[] | Opcjonalna lista blokowanych konwersacji, która zastępuje dozwolone typy sesji i dozwolone identyfikatory |
config.queryMode | "message" | "recent" | "full" | Kontroluje, jak dużą część konwersacji widzi blokujący podagent pamięci |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Kontroluje, jak chętny lub rygorystyczny jest blokujący podagent pamięci przy decydowaniu, czy zwrócić pamięć |
config.toolsAllow | string[] | Konkretne nazwy narzędzi pamięci, które może wywoływać blokujący podagent pamięci; domyślnie ["memory_search", "memory_get"] albo ["memory_recall"], gdy plugins.slots.memory to memory-lancedb; symbole wieloznaczne, wpisy group:* i narzędzia głównego agenta są ignorowane |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | Zaawansowane nadpisanie trybu rozumowania dla blokującego podagenta pamięci; domyślnie off dla szybkości |
config.promptOverride | string | Zaawansowane pełne zastąpienie promptu; niezalecane do normalnego użycia |
config.promptAppend | string | Zaawansowane dodatkowe instrukcje dołączane do domyślnego lub nadpisanego promptu |
config.timeoutMs | number | Twardy limit czasu dla blokującego podagenta pamięci, ograniczony do 120000 ms |
config.setupGraceTimeoutMs | number | Zaawansowany dodatkowy budżet konfiguracji przed wygaśnięciem limitu czasu przywołania; domyślnie 0 i z limitem 30000 ms. Zobacz Okres karencji przy zimnym starcie, aby uzyskać wskazówki dotyczące aktualizacji v2026.4.x |
config.maxSummaryChars | number | Maksymalna łączna liczba znaków dozwolona w podsumowaniu aktywnej pamięci |
config.logging | boolean | Emituje logi aktywnej pamięci podczas dostrajania |
config.persistTranscripts | boolean | Zachowuje transkrypcje blokującego podagenta pamięci na dysku zamiast usuwać pliki tymczasowe |
config.transcriptDir | string | Względny katalog transkrypcji blokującego podagenta pamięci pod folderem sesji agenta |
| Key | Type | Znaczenie |
|---|---|---|
config.maxSummaryChars | number | Maksymalna łączna liczba znaków dozwolona w podsumowaniu aktywnej pamięci |
config.recentUserTurns | number | Poprzednie tury użytkownika do uwzględnienia, gdy queryMode to recent |
config.recentAssistantTurns | number | Poprzednie tury asystenta do uwzględnienia, gdy queryMode to recent |
config.recentUserChars | number | Maksymalna liczba znaków na ostatnią turę użytkownika |
config.recentAssistantChars | number | Maksymalna liczba znaków na ostatnią turę asystenta |
config.cacheTtlMs | number | Ponowne użycie pamięci podręcznej dla powtarzanych identycznych zapytań (zakres: 1000-120000 ms; domyślnie: 15000) |
config.circuitBreakerMaxTimeouts | number | Pomiń przywołanie po tylu kolejnych przekroczeniach limitu czasu dla tego samego agenta/modelu. Resetuje się po udanym przywołaniu albo po wygaśnięciu czasu odnowienia (zakres: 1-20; domyślnie: 3). |
config.circuitBreakerCooldownMs | number | Jak długo pomijać przywołanie po zadziałaniu wyłącznika obwodu, w ms (zakres: 5000-600000; domyślnie: 60000). |
Zalecana konfiguracja
Zacznij odrecent.
/verbose on dla
normalnego wiersza statusu oraz /trace on dla podsumowania debugowania active-memory zamiast
szukać osobnego polecenia debugowania active-memory. W kanałach czatu te
linie diagnostyczne są wysyłane po głównej odpowiedzi asystenta, a nie przed nią.
Następnie przejdź do:
message, jeśli chcesz mniejszych opóźnieńfull, jeśli uznasz, że dodatkowy kontekst jest wart wolniejszego blokującego podagenta pamięci
Okres karencji przy zimnym starcie
Przed v2026.5.2 Plugin po cichu rozszerzał skonfigurowanetimeoutMs o
dodatkowe 30000 ms podczas zimnego startu, aby rozgrzanie modelu, załadowanie indeksu osadzeń i
pierwsze przywołanie mogły współdzielić jeden większy budżet. v2026.5.2 przeniosła ten okres karencji
za jawną konfigurację setupGraceTimeoutMs — skonfigurowane timeoutMs
jest teraz domyślnie budżetem pracy przywołania, chyba że się na to zdecydujesz. Blokujący hook
używa dwóch ograniczonych faz wokół tego budżetu: do 1500 ms na wstępne sprawdzenie sesji/konfiguracji
przed rozpoczęciem przywołania, a następnie osobne stałe 1500 ms na rozstrzygnięcie przerwania
i odzyskanie transkrypcji po zatrzymaniu pracy przywołania. Żaden z tych przydziałów
nie wydłuża wykonywania modelu ani narzędzia.
Jeśli uaktualniono z v2026.4.x i ustawiono timeoutMs na wartość dostrojoną do
starego świata niejawnego okresu karencji (zalecane początkowe timeoutMs: 15000 jest jednym
przykładem), ustaw setupGraceTimeoutMs: 30000, aby rozszerzyć hook budowania promptu i
zewnętrzne budżety mechanizmu nadzorującego z powrotem do efektywnych wartości sprzed v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 ms.
Wbudowany runner odtwarzania używa tego samego efektywnego budżetu limitu czasu, więc
setupGraceTimeoutMs obejmuje zarówno zewnętrzny watchdog budowania promptu, jak i wewnętrzne
blokujące uruchomienie odtwarzania. Limit preflight obejmuje sprawdzenia sesji/konfiguracji przed
rozpoczęciem tego budżetu. Dodatkowy czas po odtworzeniu pozwala zewnętrznemu hookowi domknąć
czyszczenie przerwania i odczytać końcowy stan transkryptu.
W przypadku Gateway o ograniczonych zasobach, gdzie opóźnienie zimnego startu jest znanym kompromisem,
niższe wartości (5000–15000 ms) też działają — kompromisem jest większa szansa, że
pierwsze odtworzenie po restarcie gatewaya zwróci pusty wynik, zanim rozgrzewanie
dobiegnie końca.
Debugowanie
Jeśli Active Memory nie pojawia się tam, gdzie oczekujesz:- Potwierdź, że Plugin jest włączony w
plugins.entries.active-memory.enabled. - Potwierdź, że bieżący identyfikator agenta znajduje się na liście w
config.agents. - Potwierdź, że testujesz przez interaktywną, trwałą sesję czatu.
- Włącz
config.logging: truei obserwuj logi gatewaya. - Sprawdź, czy samo wyszukiwanie pamięci działa za pomocą
openclaw memory status --deep.
maxSummaryChars
- obniż
queryMode - obniż
timeoutMs - zmniejsz liczbę ostatnich tur
- zmniejsz limity znaków na turę
Typowe problemy
Active Memory opiera się na potoku odtwarzania skonfigurowanego Pluginu pamięci, więc większość niespodzianek związanych z odtwarzaniem to problemy dostawcy embeddingów, a nie błędy Active Memory. Domyślna ścieżkamemory-core używa memory_search i memory_get; slot
memory-lancedb używa memory_recall. Jeśli używasz innego Pluginu pamięci,
potwierdź, że config.toolsAllow wskazuje narzędzia, które ten Plugin faktycznie rejestruje.
Dostawca embeddingów został przełączony lub przestał działać
Dostawca embeddingów został przełączony lub przestał działać
Jeśli
memorySearch.provider nie jest ustawiony, OpenClaw używa embeddingów OpenAI. Ustaw
memorySearch.provider jawnie dla lokalnych embeddingów, Ollama, Gemini, Voyage,
Mistral, DeepInfra, Bedrock, GitHub Copilot lub embeddingów zgodnych z OpenAI.
Jeśli skonfigurowany dostawca nie może działać, memory_search może
zdegradować się do wyszukiwania wyłącznie leksykalnego; awarie runtime po
wybraniu dostawcy nie przełączają się automatycznie na rozwiązanie zapasowe.Ustaw opcjonalne memorySearch.fallback tylko wtedy, gdy chcesz świadomie
użyć pojedynczego rozwiązania zapasowego. Zobacz Wyszukiwanie pamięci, aby poznać pełną
listę dostawców i przykłady.Odtwarzanie wydaje się wolne, puste lub niespójne
Odtwarzanie wydaje się wolne, puste lub niespójne
- Włącz
/trace on, aby pokazać w sesji należące do Pluginu podsumowanie debugowania Active Memory. - Włącz
/verbose on, aby po każdej odpowiedzi widzieć także linię statusu🧩 Active Memory: .... - Obserwuj logi gatewaya pod kątem
active-memory: ... start|done,memory sync failed (search-bootstrap)lub błędów embeddingów dostawcy. - Uruchom
openclaw memory status --deep, aby sprawdzić backend wyszukiwania pamięci i kondycję indeksu. - Jeśli używasz
ollama, potwierdź, że model embeddingów jest zainstalowany (ollama list).
Pierwsze odtworzenie po restarcie gatewaya zwraca `status=timeout`
Pierwsze odtworzenie po restarcie gatewaya zwraca `status=timeout`
W v2026.5.2 i nowszych, jeśli konfiguracja zimnego startu (rozgrzanie modelu + załadowanie
indeksu embeddingów) nie zakończyła się przed uruchomieniem pierwszego odtworzenia, przebieg
może wyczerpać skonfigurowany budżet
timeoutMs i zwrócić status=timeout
z pustym wynikiem. Logi Gateway pokazują active-memory timeout after Nms
przy pierwszej kwalifikującej się odpowiedzi po restarcie.Zobacz Grace zimnego startu w sekcji Zalecana konfiguracja, aby poznać
zalecaną wartość setupGraceTimeoutMs.