Skip to main content
Active Memory to opcjonalny dołączony plugin, który przed główną odpowiedzią uruchamia blokującego podagenta przywoływania pamięci w kwalifikujących się sesjach konwersacyjnych. Istnieje, ponieważ większość systemów pamięci działa reaktywnie: główny agent musi zdecydować o przeszukaniu pamięci albo użytkownik musi powiedzieć „zapamiętaj to”. Wtedy chwila, w której przywołany fakt mógłby zabrzmieć naturalnie, już mija. Active Memory daje systemowi jedną ograniczoną możliwość wydobycia istotnych wspomnień przed wygenerowaniem głównej odpowiedzi.

Szybki start

Wklej do openclaw.json, aby uzyskać bezpieślną konfigurację domyślną: plugin włączony, ograniczony do main, tylko sesje wiadomości bezpośrednich, model dziedziczony z sesji.
plugins.entries.* (w tym active-memory.config) należy do kategorii konfiguracji niewymagającej ponownego uruchomienia: Gateway automatycznie przeładowuje środowisko uruchomieniowe pluginu i ręczne ponowne uruchomienie nie jest potrzebne. Aby mimo to wymusić pełne ponowne uruchomienie, uruchom:
Aby sprawdzić działanie na żywo w konwersacji:
Działanie najważniejszych pól:
  • plugins.entries.active-memory.enabled: true włącza plugin
  • config.agents: ["main"] obejmuje tylko agenta main
  • config.allowedChatTypes: ["direct"] ogranicza działanie do sesji wiadomości bezpośrednich (grupy/kanały należy włączyć jawnie)
  • config.model (opcjonalnie) przypina dedykowany model przywoływania pamięci; brak ustawienia powoduje dziedziczenie bieżącego modelu sesji
  • config.modelFallback jest używane tylko wtedy, gdy nie można rozstrzygnąć modelu jawnego ani dziedziczonego
  • config.fastMode opcjonalnie zastępuje tryb szybki dla przywoływania pamięci bez zmiany głównego agenta
  • config.promptStyle: "balanced" jest wartością domyślną dla trybu recent
  • Active Memory nadal działa tylko w kwalifikujących się interaktywnych, trwałych sesjach czatu (zobacz Kiedy działa)

Jak to działa

Blokujący podagent może wywoływać tylko skonfigurowane narzędzia przywoływania pamięci (zobacz Narzędzia pamięci). Jeśli związek między zapytaniem a dostępnymi wspomnieniami jest słaby, zwraca NONE, a główna odpowiedź jest kontynuowana bez dodatkowego kontekstu. Active Memory jest funkcją wzbogacania konwersacji, a nie funkcją wnioskowania obejmującą całą platformę: Warto używać tej funkcji, gdy sesja jest trwała i przeznaczona dla użytkownika, agent ma istotną pamięć długoterminową do przeszukania, a ciągłość/personalizacja są ważniejsze niż pełna deterministyczność promptu: stałe preferencje, powtarzające się nawyki, kontekst długoterminowy, który powinien pojawiać się naturalnie. Nie sprawdza się w automatyzacji, procesach wewnętrznych, jednorazowych zadaniach API ani w miejscach, gdzie ukryta personalizacja byłaby zaskakująca.

Kiedy działa

Oba warunki muszą zostać spełnione:
  1. Włączenie w konfiguracji — plugin jest włączony, a identyfikator bieżącego agenta znajduje się w config.agents.
  2. Kwalifikacja środowiska uruchomieniowego — sesja jest kwalifikującą się interaktywną, trwałą sesją czatu, jej typ czatu jest dozwolony, a identyfikator konwersacji nie jest odfiltrowany.
Jeśli którykolwiek warunek nie zostanie spełniony, Active Memory nie działa w tej turze (a główna odpowiedź pozostaje bez zmian).

Typy sesji

config.allowedChatTypes określa, w jakich rodzajach konwersacji może działać Active Memory. Wartość domyślna:
Prawidłowe wartości: direct, group, channel, explicit (sesje w stylu portalu z nieprzezroczystym identyfikatorem sesji, na przykład agent:main:explicit:portal-123). Sesje wiadomości bezpośrednich działają domyślnie; grupy, kanały i sesje jawne trzeba włączyć:
Aby wdrożyć funkcję w węższym zakresie w ramach dozwolonego typu czatu, dodaj config.allowedChatIds i config.deniedChatIds:
  • allowedChatIds to lista dozwolonych rozstrzygniętych identyfikatorów konwersacji. Gdy nie jest pusta, Active Memory działa tylko w sesjach, których identyfikator konwersacji znajduje się na liście — zawęża to jednocześnie każdy dozwolony typ czatu, w tym wiadomości bezpośrednie. Aby zachować wszystkie wiadomości bezpośrednie, zawężając tylko grupy, dodaj także identyfikatory bezpośrednich rozmówców do allowedChatIds albo pozostaw allowedChatTypes ograniczone do testowanego wdrożenia grupowego/kanałowego.
  • deniedChatIds to lista zablokowanych, która zawsze ma pierwszeństwo przed allowedChatTypes i allowedChatIds.
Identyfikatory pochodzą z trwałego klucza sesji kanału (na przykład Feishu chat_id/open_id, identyfikator czatu Telegram, identyfikator kanału Slack). Dopasowanie nie uwzględnia wielkości liter. Jeśli allowedChatIds nie jest puste, a OpenClaw nie może rozstrzygnąć identyfikatora konwersacji dla sesji, Active Memory pomija turę zamiast zgadywać.

Przełącznik sesji

Wstrzymaj lub wznów Active Memory dla bieżącej sesji czatu bez edytowania konfiguracji:
Wpływa to tylko na bieżącą sesję; nie zmienia plugins.entries.active-memory.config.enabled ani innej konfiguracji globalnej. Aby zamiast tego wstrzymać/wznowić działanie we wszystkich sesjach, użyj formy globalnej (wymaga właściciela lub operator.admin):
Forma globalna zapisuje plugins.entries.active-memory.config.enabled, ale pozostawia włączone plugins.entries.active-memory.enabled, dzięki czemu polecenie pozostaje dostępne i pozwala później ponownie włączyć Active Memory.

Jak zobaczyć działanie

Domyślnie Active Memory wstrzykuje ukryty, niezaufany prefiks promptu, który nie jest widoczny w zwykłej odpowiedzi. Włącz przełączniki sesji odpowiadające oczekiwanym danym wyjściowym:
Po ich włączeniu OpenClaw dołącza wiersze diagnostyczne po zwykłej odpowiedzi (jako kolejną wiadomość, aby klienty kanałów nie wyświetlały osobnego dymku przed odpowiedzią):
  • /verbose on dodaje wiersz stanu: 🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars
  • /trace on dodaje podsumowanie debugowania: 🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
Przykładowy przebieg:
Przy /trace raw śledzony blok Model Input (User Role) pokazuje nieprzetworzony ukryty prefiks:
Domyślnie transkrypcja blokującego podagenta jest tymczasowa i usuwana po zakończeniu działania; zobacz Trwałość transkrypcji, aby ją zachować.

Tryby zapytań

config.queryMode określa, jak dużą część konwersacji widzi blokujący podagent. Należy wybrać najmniejszy tryb, który nadal dobrze obsługuje pytania uzupełniające; wraz ze wzrostem rozmiaru kontekstu zwiększaj timeoutMs od message przez recent do full.
Wysyłana jest tylko najnowsza wiadomość użytkownika.
Używaj, gdy potrzebne jest najszybsze działanie, najsilniejsze ukierunkowanie na przywoływanie stałych preferencji, a kolejne tury nie wymagają kontekstu konwersacji. Zacznij od około 30005000 ms dla config.timeoutMs.

Style promptów

config.promptStyle określa, jak chętnie lub rygorystycznie podagent zwraca wspomnienia: Domyślne mapowanie, gdy config.promptStyle nie jest ustawione:
Jawne config.promptStyle zawsze zastępuje to mapowanie.

Zasady modelu rezerwowego

Jeśli config.model nie jest ustawione, Active Memory rozstrzyga model w następującej kolejności:
Jeśli nie można rozstrzygnąć żadnego elementu tego łańcucha, Active Memory pomija przywoływanie pamięci w tej turze. config.modelFallbackPolicy to przestarzałe pole zgodności zachowane dla starszych konfiguracji; nie zmienia już zachowania środowiska uruchomieniowego — modelFallback jest wyłącznie ostatnią możliwością w powyższym łańcuchu, a nie mechanizmem awaryjnym środowiska uruchomieniowego, który przełącza na inny model, gdy rozstrzygnięty model zgłosi błąd.

Zalecenia dotyczące szybkości

Pozostawienie config.model bez ustawienia (dziedziczenie modelu sesji) jest najbezpieczniejszą opcją domyślną: uwzględnia istniejące preferencje dotyczące dostawcy, uwierzytelniania i modelu. Aby zmniejszyć opóźnienie, należy zamiast tego użyć dedykowanego szybkiego modelu — jakość przywoływania jest ważna, ale opóźnienie ma tutaj większe znaczenie niż w głównej ścieżce odpowiedzi, a zakres narzędzi jest wąski (tylko narzędzia przywoływania pamięci). Dobre opcje szybkich modeli:
  • cerebras/gpt-oss-120b, dedykowany model przywoływania o niskim opóźnieniu
  • google/gemini-3-flash, rozwiązanie awaryjne o niskim opóźnieniu bez zmiany głównego modelu czatu
  • standardowy model sesji — w tym celu należy pozostawić config.model bez ustawienia

Konfiguracja Cerebras

Należy potwierdzić, że klucz API Cerebras ma dostęp chat/completions do wybranego modelu — sama widoczność /v1/models tego nie gwarantuje.

Narzędzia pamięci

config.toolsAllow określa konkretne nazwy narzędzi, które blokujący podagent może wywoływać. Wartości domyślne zależą od aktywnego dostawcy pamięci: Jeśli żadne ze skonfigurowanych narzędzi nie jest dostępne lub uruchomienie podagenta się nie powiedzie, 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 są uznawane za dowód przywołania, chyba że pola wyniku strukturalnego jawnie zgłaszają pusty wynik lub niepowodzenie. toolsAllow przyjmuje tylko konkretne nazwy narzędzi pamięci: symbole wieloznaczne, wpisy group:* oraz podstawowe narzędzia agenta (read, exec, message, web_search i podobne) są po cichu odfiltrowywane przed uruchomieniem ukrytego podagenta.

Wbudowany memory-core

Jawne ustawienie toolsAllow nie jest potrzebne:

Pamięć LanceDB

Wybranie gniazda pamięci wystarcza, aby Active Memory używało memory_recall:

Lossless Claw

Lossless Claw to zewnętrzny Plugin silnika kontekstu (openclaw plugins install @martian-engineering/lossless-claw) z własnymi narzędziami przywoływania. Najpierw należy skonfigurować go jako silnik kontekstu; zobacz Silnik kontekstu. Następnie należy wskazać Active Memory jego narzędzia:
Nie należy tutaj dodawać lcm_expand do toolsAllow; Lossless Claw używa go jako narzędzia niższego poziomu do delegowanego rozwijania, które nie jest przeznaczone dla nadrzędnego podagenta Active Memory.

Zaawansowane mechanizmy awaryjne

Nie należą do zalecanej konfiguracji. config.thinking zastępuje poziom myślenia podagenta (domyślnie "off", ponieważ Active Memory działa w ścieżce odpowiedzi, a dodatkowy czas myślenia bezpośrednio zwiększa opóźnienie widoczne dla użytkownika):
config.fastMode zastępuje tryb szybki wyłącznie dla blokującego podagenta pamięci. Należy użyć true, false lub "auto"; pozostawienie bez ustawienia powoduje odziedziczenie standardowych wartości domyślnych agenta, sesji i modelu. "auto" używa skonfigurowanej wartości granicznej fastAutoOnSeconds modelu przywoływania:
config.promptAppend dodaje instrukcje operatora po domyślnym monicie i przed kontekstem konwersacji — należy połączyć je z niestandardowym toolsAllow, gdy Plugin pamięci spoza rdzenia wymaga określonej kolejności narzędzi lub sposobu formułowania zapytań:
config.promptOverride całkowicie zastępuje domyślny monit (kontekst konwersacji nadal jest później dołączany). Nie jest to zalecane, chyba że celowo testowany jest inny kontrakt przywoływania — domyślny monit jest dostrojony tak, aby zwracać NONE albo zwięzły kontekst faktów o użytkowniku dla głównego modelu:

Utrwalanie transkrypcji

Uruchomienia blokującego podagenta tworzą podczas wywołania rzeczywistą transkrypcję session.jsonl. Domyślnie jest ona zapisywana w katalogu tymczasowym i usuwana natychmiast po zakończeniu uruchomienia. Aby zachować te transkrypcje na dysku do debugowania:
Utrwalone transkrypcje trafiają do folderu sesji docelowego agenta, do katalogu oddzielnego od transkrypcji głównej konwersacji z użytkownikiem:
Względny podkatalog można zmienić za pomocą config.transcriptDir. Z tej opcji należy korzystać ostrożnie: transkrypcje mogą szybko się gromadzić w intensywnie używanych sesjach, tryb zapytań full powiela znaczną część kontekstu konwersacji, a transkrypcje te zawierają ukryty kontekst monitu oraz przywołane wspomnienia.

Konfiguracja

Cała konfiguracja Active Memory znajduje się w plugins.entries.active-memory. Przydatne pola dostrajania:

Zalecana konfiguracja

Rozpocznij od recent:
Podczas dostrajania użyj /verbose on jako wiersza stanu oraz /trace on jako podsumowania debugowania — oba są wysyłane jako wiadomość uzupełniająca po głównej odpowiedzi, a nie przed nią. Następnie przejdź na message, aby zmniejszyć opóźnienie, lub na full, jeśli dodatkowy kontekst jest wart wolniejszego działania subagenta.

Okres karencji zimnego startu

Przed wersją v2026.5.2 plugin niejawnie wydłużał timeoutMs o dodatkowe 30000 ms podczas zimnego startu, dzięki czemu rozgrzewanie modelu, ładowanie indeksu osadzeń i pierwsze przywołanie mogły korzystać z jednego większego budżetu. W wersji v2026.5.2 ten okres karencji przeniesiono za jawną konfigurację setupGraceTimeoutMs: timeoutMs jest teraz domyślnie budżetem pracy przywoływania, chyba że jawnie włączono tę opcję. Hak blokujący opakowuje ten budżet w dwie stałe fazy: do 1500 ms na kontrolę wstępną sesji/konfiguracji przed rozpoczęciem przywoływania, a następnie osobne, stałe 1500 ms na zakończenie przerwania i odzyskanie transkrypcji po zatrzymaniu pracy przywoływania. Żaden z tych przydziałów nie wydłuża wykonywania modelu ani narzędzi. Jeśli wykonano aktualizację z wersji v2026.4.x i dostosowano timeoutMs do starego mechanizmu niejawnego okresu tolerancji (jednym z przykładów jest zalecana wartość początkowa timeoutMs: 15000), należy ustawić setupGraceTimeoutMs: 30000, aby przywrócić efektywny budżet sprzed wersji v5.2:
Maksymalny czas blokowania wynosi timeoutMs + setupGraceTimeoutMs + 3000 ms (skonfigurowany budżet pracy przywoływania, plus maksymalnie 1500 ms na kontrolę wstępną, plus stały limit 1500 ms na zakończenie po przywołaniu). Osadzony moduł uruchamiający przywoływanie korzysta z tego samego efektywnego budżetu limitu czasu, dlatego setupGraceTimeoutMs obejmuje zarówno zewnętrzny mechanizm nadzorujący tworzenie promptu, jak i wewnętrzne blokujące uruchomienie przywoływania. W przypadku Gatewayów z ograniczonymi zasobami, gdzie opóźnienie zimnego startu jest akceptowanym kompromisem, niższe wartości (5000-15000 ms) również działają — kompromisem jest większe prawdopodobieństwo, że pierwsze przywołanie po ponownym uruchomieniu Gateway zwróci pusty wynik przed zakończeniem rozgrzewania.

Debugowanie

Jeśli Active Memory nie pojawia się tam, gdzie jest oczekiwana:
  1. Należy potwierdzić, że Plugin jest włączony w plugins.entries.active-memory.enabled.
  2. Należy potwierdzić, że identyfikator bieżącego agenta znajduje się na liście w config.agents.
  3. Należy potwierdzić, że test odbywa się w interaktywnej, trwałej sesji czatu.
  4. Należy włączyć config.logging: true i obserwować logi Gateway.
  5. Należy sprawdzić działanie samego wyszukiwania w pamięci za pomocą openclaw status --deep.
Jeśli trafienia w pamięci zawierają zbyt dużo szumu, należy zaostrzyć maxSummaryChars. Jeśli Active Memory działa zbyt wolno, należy obniżyć queryMode, obniżyć timeoutMs albo zmniejszyć liczbę ostatnich tur i limity znaków na turę.

Typowe problemy

Active Memory korzysta z potoku przywoływania skonfigurowanego Pluginu pamięci, dlatego większość nieoczekiwanych wyników przywoływania wynika z problemów z dostawcą osadzeń, a nie z błędów Active Memory. Domyślna ścieżka memory-core używa memory_search i memory_get; gniazdo memory-lancedb używa memory_recall. Jeśli używany jest inny Plugin pamięci, należy potwierdzić, że config.toolsAllow wskazuje narzędzia faktycznie rejestrowane przez ten Plugin.
Jeśli memorySearch.provider nie jest ustawione, OpenClaw używa osadzeń OpenAI. Należy ustawić memorySearch.provider jawnie dla osadzeń Bedrock, DeepInfra, Gemini, GitHub Copilot, LM Studio, lokalnych, Mistral, Ollama, Voyage lub zgodnych z OpenAI. Jeśli skonfigurowany dostawca nie może działać, memory_search może przejść na wyszukiwanie wyłącznie leksykalne; błędy w czasie działania po wybraniu dostawcy nie powodują automatycznego przełączenia awaryjnego.Opcjonalne memorySearch.fallback należy ustawić tylko wtedy, gdy wymagane jest celowe pojedyncze przełączenie awaryjne. Pełna lista dostawców i przykłady znajdują się w sekcji Wyszukiwanie w pamięci.
  • Należy włączyć /trace on, aby wyświetlać należące do Pluginu podsumowanie debugowania Active Memory w sesji.
  • Należy włączyć /verbose on, aby po każdej odpowiedzi wyświetlać również wiersz stanu 🧩 Active Memory: ....
  • W logach Gateway należy szukać active-memory: ... start|done, memory sync failed (search-bootstrap) lub błędów osadzania dostawcy.
  • Należy uruchomić openclaw status --deep, aby sprawdzić zaplecze wyszukiwania w pamięci i stan indeksu.
  • Jeśli używane jest ollama, należy potwierdzić, że model osadzeń jest zainstalowany (ollama list).
W wersji v2026.5.2 i nowszych, jeśli konfiguracja zimnego startu (rozgrzanie modelu i wczytanie indeksu osadzeń) nie zakończyła się przed uruchomieniem pierwszego przywołania, operacja może przekroczyć skonfigurowany budżet timeoutMs i zwrócić status=timeout z pustym wynikiem. W logach Gateway pojawia się active-memory timeout after Nms przy pierwszej kwalifikującej się odpowiedzi po ponownym uruchomieniu.Zalecana wartość setupGraceTimeoutMs znajduje się w sekcji Okres tolerancji zimnego startu w części Zalecana konfiguracja.

Powiązane strony