Compaction
모든 모델에는 처리할 수 있는 최대 토큰 수인 컨텍스트 윈도우가 있습니다. 대화가 그 한계에 가까워지면, OpenClaw는 이전 메시지를 요약으로 Compaction하여 채팅을 계속할 수 있게 합니다.작동 방식
- 이전 대화 턴이 compact 항목으로 요약됩니다.
- 요약은 세션 transcript에 저장됩니다.
- 최근 메시지는 그대로 유지됩니다.
toolResult 항목과 짝을 이루도록 유지합니다. 분할 지점이
tool 블록 내부에 걸리면, OpenClaw는 해당 쌍이 함께 유지되고 현재의
요약되지 않은 tail이 보존되도록 경계를 이동합니다.
전체 대화 기록은 디스크에 그대로 남아 있습니다. Compaction은 다음 턴에서
모델이 무엇을 보게 되는지만 바꿉니다.
자동 Compaction
자동 Compaction은 기본적으로 활성화되어 있습니다. 세션이 컨텍스트 한계에 가까워질 때 실행되며, 모델이 컨텍스트 초과 오류를 반환했을 때도 실행됩니다(이 경우 OpenClaw는 Compaction을 수행한 뒤 재시도합니다). 일반적인 초과 시그니처에는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, ollama error: context length exceeded가 포함됩니다.
Compaction 전에 OpenClaw는 중요한 메모를 memory 파일에 저장하라고
에이전트에 자동으로 상기시킵니다. 이렇게 하면 컨텍스트 손실을 방지할 수 있습니다.
openclaw.json의 agents.defaults.compaction 설정을 사용해 Compaction 동작(모드, 대상 토큰 수 등)을 구성하세요.
Compaction 요약은 기본적으로 불투명 식별자를 보존합니다(identifierPolicy: "strict"). 이를 identifierPolicy: "off"로 재정의하거나, identifierPolicy: "custom"과 identifierInstructions를 사용해 사용자 지정 텍스트를 제공할 수 있습니다.
선택적으로 agents.defaults.compaction.model을 통해 Compaction 요약용으로 다른 모델을 지정할 수 있습니다. 이는 기본 모델이 로컬 모델이거나 소형 모델이고, 더 강력한 모델이 Compaction 요약을 생성하도록 하고 싶을 때 유용합니다. 이 재정의는 모든 provider/model-id 문자열을 받을 수 있습니다.
플러그형 Compaction provider
Plugin은 plugin API의registerCompactionProvider()를 통해 사용자 지정 Compaction provider를 등록할 수 있습니다. provider가 등록되고 구성되면, OpenClaw는 내장 LLM 파이프라인 대신 해당 provider에 요약을 위임합니다.
등록된 provider를 사용하려면 config에서 provider id를 설정하세요.
provider를 설정하면 자동으로 mode: "safeguard"가 강제됩니다. provider는 내장 경로와 동일한 Compaction 지침과 식별자 보존 정책을 받으며, OpenClaw는 provider 출력 이후에도 최근 턴 및 분할 턴 suffix 컨텍스트를 계속 보존합니다. provider가 실패하거나 빈 결과를 반환하면, OpenClaw는 내장 LLM 요약으로 폴백합니다.
자동 Compaction(기본 활성화)
세션이 모델의 컨텍스트 윈도우에 가까워지거나 이를 초과하면, OpenClaw는 자동 Compaction을 트리거하고 compact된 컨텍스트를 사용해 원래 요청을 재시도할 수 있습니다. 다음과 같이 표시됩니다.- verbose 모드에서
🧹 Auto-compaction complete /status에🧹 Compactions: <count>표시
수동 Compaction
아무 채팅에서나/compact를 입력해 강제로 Compaction을 수행할 수 있습니다. 요약을
유도하려면 지침을 추가하세요.
다른 모델 사용
기본적으로 Compaction은 에이전트의 기본 모델을 사용합니다. 더 나은 요약을 위해 더 강력한 모델을 사용할 수 있습니다.Compaction 알림
기본적으로 Compaction은 조용히 실행됩니다. Compaction이 시작될 때와 완료될 때 짧은 알림을 표시하려면notifyUser를 활성화하세요.
Compaction vs pruning
| Compaction | pruning | |
|---|---|---|
| 무엇을 하는가 | 이전 대화를 요약함 | 오래된 tool result를 잘라냄 |
| 저장되는가? | 예(세션 transcript에) | 아니요(메모리 내에서만, 요청별) |
| 범위 | 전체 대화 | tool result만 |
문제 해결
Compaction이 너무 자주 발생하나요? 모델의 컨텍스트 윈도우가 작거나, tool 출력이 클 수 있습니다. session pruning을 활성화해 보세요. Compaction 후 컨텍스트가 오래된 것처럼 느껴지나요?/compact Focus on <topic>을 사용해
요약을 유도하거나, 메모가 유지되도록 memory flush를
활성화하세요.
깨끗한 상태로 다시 시작해야 하나요? /new는 Compaction 없이 새 세션을 시작합니다.
고급 구성(예약 토큰, 식별자 보존, 사용자 지정
컨텍스트 엔진, OpenAI 서버 측 Compaction)에 대해서는
Session Management Deep Dive를 참고하세요.
관련 항목
- Session — 세션 관리와 라이프사이클
- Session Pruning — tool result 잘라내기
- Context — 에이전트 턴을 위한 컨텍스트가 구성되는 방식
- Hooks — Compaction 라이프사이클 hook (
before_compaction,after_compaction)