Aktywna pamięć
Aktywna pamięć to opcjonalny, należący do pluginu blokujący podagent pamięci, który uruchamia się przed główną odpowiedzią dla kwalifikujących się sesji konwersacyjnych. Istnieje, ponieważ większość systemów pamięci jest skuteczna, ale reaktywna. Polegają one na tym, że główny agent zdecyduje, kiedy przeszukać pamięć, albo na tym, że użytkownik powie coś w rodzaju „zapamiętaj to” lub „przeszukaj pamięć”. W tym momencie chwila, w której pamięć sprawiłaby, że odpowiedź byłaby naturalna, już minęła. Aktywna pamięć daje systemowi jedną ograniczoną szansę na wydobycie istotnej pamięci przed wygenerowaniem głównej odpowiedzi.Wklej to do swojego agenta
Wklej to do swojego agenta, jeśli chcesz włączyć Aktywną pamięć z samowystarczalną konfiguracją z bezpiecznymi ustawieniami domyślnymi:main, domyślnie ogranicza go do sesji
w stylu wiadomości bezpośrednich, pozwala mu najpierw dziedziczyć bieżący model sesji, a
także nadal dopuszcza wbudowany zdalny mechanizm awaryjny, jeśli nie jest dostępny
żaden jawny ani odziedziczony model.
Następnie uruchom ponownie gateway:
Włącz aktywną pamięć
Najbezpieczniejsza konfiguracja to:- włączenie pluginu
- wskazanie jednego agenta konwersacyjnego
- pozostawienie logowania włączonego tylko podczas dostrajania
openclaw.json:
plugins.entries.active-memory.enabled: truewłącza pluginconfig.agents: ["main"]włącza aktywną pamięć tylko dla agentamainconfig.allowedChatTypes: ["direct"]domyślnie utrzymuje aktywną pamięć tylko dla sesji w stylu wiadomości bezpośrednich- jeśli
config.modelnie jest ustawione, aktywna pamięć najpierw dziedziczy bieżący model sesji config.modelFallbackPolicy: "default-remote"pozostawia wbudowany zdalny mechanizm awaryjny jako domyślny, gdy nie jest dostępny żaden jawny ani odziedziczony modelconfig.promptStyle: "balanced"używa domyślnego, ogólnego stylu promptu dla tryburecent- aktywna pamięć nadal działa tylko w kwalifikujących się interaktywnych trwałych sesjach czatu
Jak to zobaczyć
Aktywna pamięć wstrzykuje ukryty kontekst systemowy dla modelu. Nie ujawnia surowych tagów<active_memory_plugin>...</active_memory_plugin> klientowi.
Przełącznik sesji
Użyj polecenia pluginu, jeśli chcesz wstrzymać lub wznowić aktywną pamięć dla bieżącej sesji czatu bez edytowania konfiguracji:plugins.entries.active-memory.enabled, wyboru agenta ani innej globalnej
konfiguracji.
Jeśli chcesz, aby polecenie zapisało konfigurację oraz wstrzymało lub wznowiło aktywną pamięć
dla wszystkich sesji, użyj jawnej formy globalnej:
plugins.entries.active-memory.config.enabled. Pozostawia
plugins.entries.active-memory.enabled włączone, aby polecenie nadal było dostępne i można było
ponownie włączyć aktywną pamięć później.
Jeśli chcesz zobaczyć, co aktywna pamięć robi w sesji na żywo, włącz tryb
szczegółowy dla tej sesji:
- wiersz stanu aktywnej pamięci, taki jak
Active Memory: ok 842ms recent 34 chars - czytelne podsumowanie debugowania, takie jak
Active Memory Debug: Lemon pepper wings with blue cheese.
Kiedy się uruchamia
Aktywna pamięć używa dwóch bramek:- 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 kwalifikacja w czasie działania Nawet gdy jest włączona i skierowana do danego agenta, aktywna pamięć działa tylko dla kwalifikujących się interaktywnych trwałych sesji czatu.
Typy sesji
config.allowedChatTypes kontroluje, w jakich rodzajach rozmów Aktywna
Pamięć może się w ogóle uruchamiać.
Wartość domyślna to:
Gdzie działa
Aktywna pamięć to funkcja wzbogacająca rozmowę, a nie ogólnoplatformowa funkcja inferencji.| Surface | Runs active memory? |
|---|---|
| Control UI / web chat persistent sessions | Yes, if the plugin is enabled and the agent is targeted |
| Other interactive channel sessions on the same persistent chat path | Yes, if the plugin is enabled and the agent is targeted |
| Headless one-shot runs | No |
| Heartbeat/background runs | No |
Generic internal agent-command paths | No |
| Sub-agent/internal helper execution | No |
Dlaczego warto tego używać
Używaj aktywnej pamięci, gdy:- sesja jest trwała i skierowana do użytkownika
- agent ma istotną pamięć długoterminową do przeszukania
- ciągłość i personalizacja są ważniejsze niż pełna deterministyczność promptu
- stałych preferencji
- powtarzających się nawyków
- długoterminowego kontekstu użytkownika, który powinien naturalnie się pojawiać
- automatyzacji
- wewnętrznych workerów
- jednorazowych zadań API
- miejsc, w których ukryta personalizacja byłaby zaskakująca
Jak to działa
Kształt działania w czasie wykonywania jest następujący: Blokujący podagent pamięci może używać tylko:memory_searchmemory_get
NONE.
Tryby zapytań
config.queryMode kontroluje, jak dużą część rozmowy widzi blokujący podagent pamięci.
Style promptu
config.promptStyle kontroluje, jak chętnie lub rygorystycznie blokujący podagent pamięci
decyduje o tym, czy zwrócić pamięć.
Dostępne style:
balanced: domyślne ustawienie ogólnego przeznaczenia dla tryburecentstrict: najmniej skłonny; najlepszy, gdy chcesz bardzo małego przenikania z pobliskiego kontekstucontextual: najbardziej przyjazny dla ciągłości; najlepszy, gdy historia rozmowy powinna mieć większe znaczenierecall-heavy: bardziej skłonny do wydobywania pamięci przy słabszych, ale nadal wiarygodnych dopasowaniachprecision-heavy: zdecydowanie preferujeNONE, chyba że dopasowanie jest oczywistepreference-only: zoptymalizowany pod ulubione rzeczy, nawyki, rutyny, gust i powtarzające się fakty osobiste
config.promptStyle nie jest ustawione:
config.promptStyle, to nadpisanie ma pierwszeństwo.
Przykład:
Zasady mechanizmu awaryjnego modelu
Jeśliconfig.model nie jest ustawione, Aktywna pamięć próbuje rozwiązać model w tej kolejności:
config.modelFallbackPolicy kontroluje ostatni krok.
Wartość domyślna:
resolved-only, jeśli chcesz, aby Aktywna pamięć pomijała przywoływanie zamiast
korzystać z wbudowanego zdalnego domyślnego mechanizmu awaryjnego, gdy nie jest dostępny
żaden jawny ani odziedziczony model.
Zaawansowane mechanizmy 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 Aktywnej pamięci i przed kontekstem rozmowy:
config.promptOverride zastępuje domyślny prompt Aktywnej pamięci. OpenClaw
nadal dołącza później kontekst rozmowy:
NONE
albo zwięzły kontekst faktów o użytkowniku dla głównego modelu.
message
Wysyłana jest tylko najnowsza wiadomość użytkownika.
- chcesz najszybszego działania
- chcesz najsilniejszego nastawienia na przywoływanie stabilnych preferencji
- kolejne tury nie wymagają kontekstu rozmowy
- zacznij od około
3000do5000ms
recent
Wysyłana jest najnowsza wiadomość użytkownika wraz z niewielkim ogonem ostatniej rozmowy.
- chcesz lepszej równowagi między szybkością a osadzeniem w rozmowie
- pytania uzupełniające często zależą od kilku ostatnich tur
- zacznij od około
15000ms
full
Do blokującego podagenta pamięci wysyłana jest cała rozmowa.
- najwyższa jakość przywoływania jest ważniejsza niż opóźnienie
- rozmowa zawiera istotne przygotowanie daleko wcześniej w wątku
- zwiększ go znacząco w porównaniu z
messagelubrecent - zacznij od około
15000ms lub więcej, w zależności od rozmiaru wątku
Trwałość transkryptów
Uruchomienia blokującego podagenta pamięci aktywnej pamięci tworzą rzeczywisty 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 działania
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 aktywnej pamięci znajduje się pod:| Klucz | Typ | Znaczenie |
|---|---|---|
enabled | boolean | Włącza sam plugin |
config.agents | string[] | Identyfikatory agentów, które mogą używać aktywnej pamięci |
config.model | string | Opcjonalne odwołanie do modelu blokującego podagenta pamięci; gdy nie jest ustawione, aktywna pamięć używa bieżącego modelu sesji |
config.queryMode | "message" | "recent" | "full" | Określa, jak dużą część rozmowy widzi blokujący podagent pamięci |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | Określa, jak chętnie lub rygorystycznie blokujący podagent pamięci decyduje, czy zwrócić pamięć |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | Zaawansowane nadpisanie poziomu myślenia dla blokującego podagenta pamięci; domyślnie off dla szybkości |
config.promptOverride | string | Zaawansowana pełna zamiana promptu; niezalecana do zwykłego 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 |
config.maxSummaryChars | number | Maksymalna łączna liczba znaków dozwolona w podsumowaniu active-memory |
config.logging | boolean | Emituje logi aktywnej pamięci podczas dostrajania |
config.persistTranscripts | boolean | Zachowuje transkrypty blokującego podagenta pamięci na dysku zamiast usuwać pliki tymczasowe |
config.transcriptDir | string | Względny katalog transkryptów blokującego podagenta pamięci w folderze sesji agenta |
| Klucz | Typ | Znaczenie |
|---|---|---|
config.maxSummaryChars | number | Maksymalna łączna liczba znaków dozwolona w podsumowaniu active-memory |
config.recentUserTurns | number | Poprzednie tury użytkownika do uwzględnienia, gdy queryMode ma wartość recent |
config.recentAssistantTurns | number | Poprzednie tury asystenta do uwzględnienia, gdy queryMode ma wartość 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 powtarzających się identycznych zapytań |
Zalecana konfiguracja
Zacznij odrecent.
/verbose on w
sesji zamiast szukać osobnego polecenia debugowania active-memory.
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
Debugowanie
Jeśli aktywna pamięć nie pojawia się tam, gdzie się spodziewasz:- Potwierdź, że plugin jest włączony w
plugins.entries.active-memory.enabled. - Potwierdź, że identyfikator bieżącego agenta znajduje się w
config.agents. - Potwierdź, że testujesz przez interaktywną trwałą sesję czatu.
- Włącz
config.logging: truei obserwuj logi gateway. - Sprawdź, czy samo wyszukiwanie pamięci działa, używając
openclaw memory status --deep.
maxSummaryChars
- obniż
queryMode - obniż
timeoutMs - zmniejsz liczbę ostatnich tur
- zmniejsz limity znaków na turę