튜토리얼 카테고리 Skills 소개
ZH EN JA KO
문제 해결

OpenClaw 컨텍스트 오버플로우 및 자동 압축 실패 처리

· 8 분 소요

문제 설명

AI 봇과의 장시간 대화 중 다음과 같은 오류가 발생할 수 있습니다:

[openclaw:gateway] Error: Context length exceeded. Model maximum: 128000 tokens, requested: 135842 tokens.

또는 자동 압축 실패를 나타내는 로그:

[openclaw:gateway] Context compaction triggered (usage: 92%)
[openclaw:gateway] Error during context compaction: Model returned empty summary
[openclaw:gateway] Falling back to truncation strategy

사용자에게 표시되는 또 다른 시나리오:

Bot 응답: 죄송합니다. 대화 기록이 너무 길어 계속 처리할 수 없습니다. /reset을 보내 대화 기록을 초기화해 주세요.

OpenClaw은 각 사용자에 대해 메시지 기록과 시스템 프롬프트를 포함하는 대화 컨텍스트를 유지합니다. 대화가 길어지면 토큰 수가 AI 모델의 최대 컨텍스트 윈도우 제한을 초과할 수 있습니다.

작동 원리

OpenClaw의 컨텍스트 관리 흐름은 다음과 같습니다:

  1. 각 사용자 메시지와 AI 응답이 컨텍스트에 추가됩니다
  2. API 요청을 보내기 전에 OpenClaw이 현재 컨텍스트의 토큰 수를 계산합니다
  3. 토큰 사용량이 설정된 임계값(기본 85%)을 초과하면 자동 압축이 트리거됩니다
  4. 압축 프로세스는 이전 대화 기록을 AI 모델로 보내 요약을 생성합니다
  5. 압축된 요약이 원래의 오래된 메시지를 대체하여 컨텍스트 공간을 확보합니다

진단 단계

현재 사용자의 컨텍스트 상태를 확인합니다:

openclaw context list

이 명령은 모든 활성 세션과 토큰 사용량을 표시합니다:

Channel     User ID      Tokens    Model Max    Usage
telegram    12345678     98500     128000       77%
whatsapp    8612345      125000    128000       98%  ⚠️

압축 로그를 확인합니다:

DEBUG=openclaw:context* openclaw start

설정에서 컨텍스트 관리 설정을 확인합니다:

cat ~/.openclaw/openclaw.json | grep -A 20 context

해결 방법

방법 1: 자동 압축 설정 조정

~/.openclaw/openclaw.json에서 압축 전략을 최적화합니다:

{
  "context": {
    "compaction": {
      "enabled": true,
      "triggerThreshold": 0.75,
      "targetUsage": 0.5,
      "strategy": "summarize",
      "summaryModel": "gpt-4o-mini",
      "summaryPrompt": "Please compress the following conversation history into a concise summary, preserving key information and user preferences:",
      "maxRetries": 3
    }
  }
}

주요 매개변수 설명:

  • triggerThreshold: 압축을 트리거하는 사용량 임계값입니다. 이 값을 낮추면 압축이 더 일찍 트리거되어 경계 상황의 오버플로우를 방지합니다
  • targetUsage: 압축 후 목표 사용량입니다. 0.5로 설정하면 압축 후 컨텍스트가 용량의 50% 이하를 차지합니다
  • summaryModel: 요약 생성에 사용되는 모델입니다. gpt-4o-mini 같은 저비용 모델을 권장합니다
  • maxRetries: 압축 실패 시 재시도 횟수입니다

방법 2: 수동 컨텍스트 정리

자동 압축이 실패하면 특정 사용자의 컨텍스트를 수동으로 처리할 수 있습니다:

# 특정 사용자의 컨텍스트 세부 정보 확인
openclaw context show --channel telegram --user 12345678

# 특정 사용자의 컨텍스트 수동 압축
openclaw context compact --channel telegram --user 12345678

# 특정 사용자의 대화 기록 초기화 (모든 컨텍스트 삭제)
openclaw context reset --channel telegram --user 12345678

사용자도 채팅에서 /reset 명령을 직접 보내 자신의 대화 기록을 초기화할 수 있습니다.

방법 3: 더 큰 컨텍스트 윈도우를 가진 모델로 전환

사용 사례에서 길고 연속적인 대화가 필요한 경우, 더 큰 컨텍스트 윈도우를 가진 모델을 사용하는 것을 고려하세요:

{
  "models": {
    "default": {
      "provider": "anthropic",
      "model": "claude-sonnet-4-20250514",
      "maxContextTokens": 200000
    }
  }
}

Claude 모델은 200K 토큰 컨텍스트 윈도우를 지원하고, GPT-4o는 128K, Gemini 1.5 Pro는 최대 1M을 지원합니다. 필요에 맞는 모델을 선택하세요.

방법 4: 폴백 전략으로 잘라내기 설정

압축이 실패할 경우를 대비하여 잘라내기 전략을 설정하여 시스템이 중단되지 않도록 합니다:

{
  "context": {
    "compaction": {
      "enabled": true,
      "strategy": "summarize",
      "fallback": {
        "strategy": "truncate",
        "keepSystemPrompt": true,
        "keepRecentMessages": 10
      }
    }
  }
}

잘라내기 전략은 시스템 프롬프트와 최근 N개의 메시지를 유지하고 오래된 메시지를 완전히 삭제합니다. 이전 컨텍스트는 손실되지만 대화가 계속될 수 있도록 보장합니다.

방법 5: 개별 메시지 길이 제한

사용자가 과도하게 긴 메시지를 보내 컨텍스트가 빠르게 증가하는 것을 방지합니다:

{
  "context": {
    "maxMessageTokens": 4000,
    "truncateMessage": true
  }
}

maxMessageTokens 제한을 초과하는 개별 메시지는 잘려지며, 사용자에게 메시지가 너무 길다는 알림이 전송됩니다.

모니터링 및 예방

컨텍스트 사용량 알림을 설정하여 임계값에 도달하기 전에 알림을 받습니다:

{
  "context": {
    "alerts": {
      "warningThreshold": 0.7,
      "criticalThreshold": 0.9,
      "webhook": "https://your-webhook-url.com/alerts"
    }
  }
}

비활성 세션 컨텍스트를 정기적으로 정리하여 메모리를 확보합니다:

# 7일 이상 비활성인 세션 정리
openclaw context cleanup --inactive-days 7

이렇게 하면 오래 유휴 상태인 세션이 시스템 리소스를 소모하는 것을 방지합니다.

OpenClaw는 무료 오픈소스 개인 AI 어시스턴트로, WhatsApp, Telegram, Discord 등 다양한 플랫폼을 지원합니다