Przejdź do głównej treści

Kompakcja

Każdy model ma okno kontekstu — maksymalną liczbę tokenów, które może przetworzyć. Gdy rozmowa zbliża się do tego limitu, OpenClaw kompaktuje starsze wiadomości do postaci podsumowania, aby czat mógł być kontynuowany.

Jak to działa

  1. Starsze tury rozmowy są streszczane do zwartego wpisu.
  2. Podsumowanie jest zapisywane w transkrypcie sesji.
  3. Ostatnie wiadomości pozostają nienaruszone.
Gdy OpenClaw dzieli historię na fragmenty do kompaktowania, zachowuje wywołania narzędzi asystenta sparowane z odpowiadającymi im wpisami toolResult. Jeśli punkt podziału wypada wewnątrz bloku narzędzia, OpenClaw przesuwa granicę tak, aby para pozostała razem, a bieżący niepodsumowany ogon został zachowany. Pełna historia rozmowy pozostaje na dysku. Kompakcja zmienia tylko to, co model widzi w następnej turze.

Automatyczna kompakcja

Automatyczna kompakcja jest domyślnie włączona. Uruchamia się, gdy sesja zbliża się do limitu kontekstu albo gdy model zwraca błąd przepełnienia kontekstu (w takim przypadku OpenClaw wykonuje kompakcję i ponawia próbę). Typowe sygnatury przepełnienia to request_too_large, context length exceeded, input exceeds the maximum number of tokens, input token count exceeds the maximum number of input tokens, input is too long for the model oraz ollama error: context length exceeded.
Przed kompaktowaniem OpenClaw automatycznie przypomina agentowi o zapisaniu ważnych notatek do plików memory. Zapobiega to utracie kontekstu.
Użyj ustawienia agents.defaults.compaction w pliku openclaw.json, aby skonfigurować zachowanie kompaktowania (tryb, docelową liczbę tokenów itd.). Streszczanie podczas kompaktowania domyślnie zachowuje nieprzezroczyste identyfikatory (identifierPolicy: "strict"). Możesz to zmienić za pomocą identifierPolicy: "off" albo podać własny tekst przy użyciu identifierPolicy: "custom" i identifierInstructions. Opcjonalnie możesz określić inny model do streszczania podczas kompaktowania za pomocą agents.defaults.compaction.model. Jest to przydatne, gdy podstawowy model jest lokalny lub mały, a chcesz, aby podsumowania kompaktowania były tworzone przez bardziej zaawansowany model. To ustawienie przyjmuje dowolny ciąg provider/model-id:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
Działa to również z modelami lokalnymi, na przykład z drugim modelem Ollama przeznaczonym do streszczania albo specjalistycznym modelem dostrojonym do kompaktowania:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
Jeśli nie jest ustawione, kompaktowanie używa podstawowego modelu agenta.

Wtyczkowi dostawcy kompaktowania

Plugins mogą rejestrować niestandardowego dostawcę kompaktowania za pomocą registerCompactionProvider() w API pluginu. Gdy dostawca jest zarejestrowany i skonfigurowany, OpenClaw deleguje streszczanie do niego zamiast do wbudowanego potoku LLM. Aby użyć zarejestrowanego dostawcy, ustaw identyfikator dostawcy w konfiguracji:
{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}
Ustawienie provider automatycznie wymusza mode: "safeguard". Dostawcy otrzymują te same instrukcje kompaktowania i tę samą politykę zachowywania identyfikatorów co ścieżka wbudowana, a OpenClaw nadal zachowuje kontekst sufiksu ostatnich tur i podzielonych tur po wyniku dostawcy. Jeśli dostawca zakończy się niepowodzeniem albo zwróci pusty wynik, OpenClaw wraca do wbudowanego streszczania przez LLM.

Automatyczna kompakcja (domyślnie włączona)

Gdy sesja zbliża się do okna kontekstu modelu lub je przekracza, OpenClaw uruchamia automatyczną kompakcję i może ponowić pierwotne żądanie, używając skompaktowanego kontekstu. Zobaczysz:
  • 🧹 Auto-compaction complete w trybie verbose
  • /status pokazujące 🧹 Compactions: <count>
Przed kompaktowaniem OpenClaw może uruchomić ciche opróżnienie pamięci tury, aby zapisać trwałe notatki na dysk. Szczegóły i konfigurację znajdziesz w sekcji Memory.

Ręczna kompakcja

Wpisz /compact w dowolnym czacie, aby wymusić kompakcję. Dodaj instrukcje, aby ukierunkować podsumowanie:
/compact Focus on the API design decisions

Używanie innego modelu

Domyślnie kompaktowanie używa podstawowego modelu agenta. Możesz użyć bardziej zaawansowanego modelu, aby uzyskać lepsze podsumowania:
{
  agents: {
    defaults: {
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
      },
    },
  },
}

Powiadomienie o rozpoczęciu kompaktowania

Domyślnie kompaktowanie działa po cichu. Aby wyświetlać krótkie powiadomienie, gdy kompaktowanie się rozpoczyna, włącz notifyUser:
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}
Po włączeniu użytkownik zobaczy krótki komunikat (na przykład „Kompaktowanie kontekstu…”) na początku każdego uruchomienia kompaktowania.

Kompakcja a przycinanie

KompakcjaPrzycinanie
Co robiStreszcza starszą rozmowęPrzycina stare wyniki narzędzi
Zapisywane?Tak (w transkrypcie sesji)Nie (tylko w pamięci, na żądanie)
ZakresCała rozmowaTylko wyniki narzędzi
Przycinanie sesji to lżejsze uzupełnienie, które przycina dane wyjściowe narzędzi bez streszczania.

Rozwiązywanie problemów

Kompaktowanie występuje zbyt często? Okno kontekstu modelu może być małe albo wyniki narzędzi mogą być duże. Spróbuj włączyć przycinanie sesji. Czy po kompaktowaniu kontekst wydaje się nieaktualny? Użyj /compact Focus on <topic>, aby ukierunkować podsumowanie, albo włącz opróżnianie pamięci, aby notatki zostały zachowane. Potrzebujesz czystego startu? /new rozpoczyna nową sesję bez kompaktowania. Zaawansowaną konfigurację (rezerwę tokenów, zachowywanie identyfikatorów, niestandardowe silniki kontekstu, kompaktowanie po stronie serwera OpenAI) znajdziesz w szczegółowym omówieniu zarządzania sesją.

Powiązane

  • Session — zarządzanie sesją i jej cykl życia
  • Session Pruning — przycinanie wyników narzędzi
  • Context — jak budowany jest kontekst dla tur agenta
  • Hooks — hooki cyklu życia kompaktowania (before_compaction, after_compaction)