튜토리얼 카테고리 Skills 소개
ZH EN JA KO
기본 설정

OpenClaw 대화 기록 길이 제어 및 컨텍스트 압축

· 13 분 소요

서문

AI 모델의 컨텍스트 윈도우는 제한적이지만, 대화 기록은 상호작용이 진행됨에 따라 계속 증가합니다. 제한된 컨텍스트 내에서 가장 관련성 높은 정보를 유지하면서 API 호출 비용을 제어하는 것은 모든 AI 게이트웨이가 해결해야 할 과제입니다. OpenClaw은 유연한 기록 길이 제어와 자동 압축 메커니즘을 제공하여, 대화 품질과 리소스 소비 사이의 균형을 찾을 수 있도록 합니다.

기록 길이 제어가 필요한 이유

기록 길이를 제어하지 않으면 다음과 같은 문제가 발생합니다:

  1. 비용 실패: 매 API 호출마다 전체 컨텍스트 기록이 전송되므로, 기록이 길수록 Token 소비가 증가합니다
  2. 응답 속도 저하: 모델이 더 긴 컨텍스트를 처리하는 데 더 많은 시간이 필요합니다
  3. 정보 잡음: 너무 오래된 대화 내용은 현재 주제와 무관할 수 있어, 오히려 모델 판단을 방해합니다
  4. 한도 초과: 모델의 컨텍스트 윈도우를 직접 초과하여 API 오류가 발생합니다

기본 설정

openclaw.jsonsessions 섹션에서 기록 길이 제한을 설정합니다:

{
  "sessions": {
    "maxHistoryMessages": 50,
    "maxHistoryTokens": 8000
  }
}

이중 제한 메커니즘

OpenClaw은 메시지 수와 Token 수의 이중 제한을 채택하며, 먼저 도달하는 조건을 적용합니다:

  • maxHistoryMessages: 컨텍스트에 유지할 최대 메시지 수. 각 메시지에는 사용자 입력과 AI 응답이 포함됩니다
  • maxHistoryTokens: 컨텍스트에 유지할 최대 Token 수. OpenClaw은 모델에 해당하는 tokenizer를 사용하여 정확하게 계산합니다

예를 들어, maxHistoryMessages: 50maxHistoryTokens: 8000을 설정한 경우, 30개의 메시지만 있어도 Token 수가 이미 8000에 도달했다면, 메시지 수가 차지 않았더라도 잘라내기나 압축이 시작됩니다.

채널 유형별 차별화 설정

개인 채팅과 그룹 채팅의 사용 패턴은 매우 다릅니다. 개인 채팅은 보통 지속적인 긴 대화로, 더 많은 컨텍스트를 유지해야 합니다. 그룹 채팅은 단편적인 짧은 상호작용으로, 기록의 가치가 상대적으로 낮습니다. OpenClaw은 채널 유형별로 다른 제한을 설정할 수 있습니다:

{
  "sessions": {
    "maxHistoryMessages": 50,
    "maxHistoryTokens": 8000,
    "channelOverrides": {
      "dm": {
        "maxHistoryMessages": 100,
        "maxHistoryTokens": 16000
      },
      "group": {
        "maxHistoryMessages": 20,
        "maxHistoryTokens": 4000
      }
    }
  }
}

지원하는 채널 유형

유형 식별자 설명 권장 설정
dm 개인 채팅 / 1:1 대화 긴 기록(50-100개)
group 그룹 채팅 / 다인 대화 짧은 기록(10-30개)
channel 채널 메시지(예: Discord 채널) 중간 기록(20-50개)
thread 토픽 / 스레드 중간 기록(20-50개)

특정 플랫폼별 설정

특정 메신저 플랫폼에 대해 독립적인 제한을 설정할 수도 있습니다:

{
  "sessions": {
    "channelOverrides": {
      "dm": {
        "maxHistoryMessages": 100
      },
      "group": {
        "maxHistoryMessages": 20
      }
    },
    "platformOverrides": {
      "telegram": {
        "maxHistoryMessages": 80,
        "maxHistoryTokens": 12000
      },
      "discord": {
        "maxHistoryMessages": 30,
        "maxHistoryTokens": 6000
      }
    }
  }
}

우선순위: platformOverrides > channelOverrides > 전역 기본값.

자동 압축 메커니즘

대화 기록이 제한에 근접하면, OpenClaw은 두 가지 처리 전략을 제공합니다: 단순 잘라내기와 지능형 압축.

잘라내기 전략(truncate)

{
  "sessions": {
    "autoCompaction": true,
    "compactionStrategy": "truncate"
  }
}

가장 오래된 메시지를 직접 삭제하고, 최근 N개만 유지합니다. 이 방식은 간단하고 효율적이며 추가 API 호출이 발생하지 않지만, 초기 대화 정보가 완전히 손실됩니다.

작동 흐름:

원본 기록: [msg1, msg2, msg3, ..., msg50, msg51]
잘라내기 후:   [msg21, msg22, ..., msg50, msg51]  (최근 30개 유지)

요약 전략(summary)

{
  "sessions": {
    "autoCompaction": true,
    "compactionStrategy": "summary",
    "compactionThreshold": 0.8,
    "summaryMaxTokens": 500
  }
}

컨텍스트 사용량이 compactionThreshold(기본 80%)에 도달하면, OpenClaw이 자동으로 이전 대화 기록을 모델에 보내 요약을 생성합니다. 요약 결과는 시스템 메시지로 컨텍스트 시작 부분에 삽입되어 원본 기록 메시지를 대체합니다.

작동 흐름:

1단계: 컨텍스트 사용량이 80%에 도달 감지
2단계: 앞의 30개 메시지를 모델에 보내 요약 생성 요청
3단계: 모델이 요약 텍스트 반환
4단계: 요약으로 원본 30개 메시지 대체
최종 컨텍스트: [요약 메시지, msg31, msg32, ..., msg51]

요약 설정 세부사항

{
  "sessions": {
    "compaction": {
      "strategy": "summary",
      "threshold": 0.8,
      "summaryMaxTokens": 500,
      "summaryModel": "default",
      "summaryPrompt": "다음 대화 기록을 간결한 요약으로 압축하고, 핵심 정보와 사용자 선호도를 유지하세요:",
      "preserveSystemMessages": true,
      "preserveLastN": 10
    }
  }
}
매개변수 설명
threshold 압축을 트리거하는 컨텍스트 사용률 임계값
summaryMaxTokens 요약 텍스트의 최대 Token 수
summaryModel 요약 생성에 사용할 모델, "default"는 현재 모델 사용
summaryPrompt 커스텀 요약 지시문
preserveSystemMessages 원본 시스템 메시지를 압축에서 제외할지 여부
preserveLastN 항상 최근 N개 메시지를 압축에서 제외

롤링 압축

초장시간 대화에서는 압축이 여러 번 트리거될 수 있습니다. 매번 압축할 때마다 이전 요약과 새로운 오래된 메시지를 합쳐 업데이트된 요약을 생성합니다. 이 과정을 "롤링 압축"이라 합니다:

첫 번째 압축: [msg1-30] → 요약A
두 번째 압축: [요약A, msg31-50] → 요약B
세 번째 압축: [요약B, msg51-70] → 요약C

압축 횟수가 늘어남에 따라 가장 오래된 정보는 점차 요약되고 농축되지만, 핵심 정보는 보통 유지됩니다.

비용 추정

서로 다른 기록 제한 전략이 API 비용에 미치는 영향은 상당합니다. 다음은 대략적인 추정입니다:

설정 요청당 평균 Token 월 평균 비용(일 100개 메시지 기준)
maxHistoryMessages: 10 ~2,000 낮음
maxHistoryMessages: 50 ~8,000 중간
maxHistoryMessages: 100 ~15,000 높음
summary 압축 ~3,000 + 압축 오버헤드 중간 이하

실제 비용은 모델 가격, 메시지 평균 길이, 사용 빈도에 따라 달라집니다.

수동 기록 관리

자동 메커니즘 외에도 명령줄로 세션 기록을 수동 관리할 수 있습니다:

# 특정 세션의 기록 통계 확인
openclaw session stats --session telegram_123456

# 수동으로 압축 트리거
openclaw session compact --session telegram_123456

# 기록을 삭제하되 세션은 유지
openclaw session trim --session telegram_123456 --keep 10

# 세션 완전 삭제
openclaw session clear --session telegram_123456

사용자도 채팅에서 내장 명령어로 자신의 기록을 관리할 수 있습니다:

/clear    - 현재 대화 기록 삭제
/compact  - 수동으로 대화 압축 트리거
/history  - 현재 기록 수와 Token 사용량 확인

권장 설정

개인 사용(비용 우선)

{
  "sessions": {
    "maxHistoryMessages": 20,
    "maxHistoryTokens": 4000,
    "autoCompaction": true,
    "compactionStrategy": "truncate"
  }
}

일상 사용(균형 방안)

{
  "sessions": {
    "maxHistoryMessages": 50,
    "maxHistoryTokens": 8000,
    "autoCompaction": true,
    "compactionStrategy": "summary",
    "channelOverrides": {
      "dm": { "maxHistoryMessages": 80 },
      "group": { "maxHistoryMessages": 20 }
    }
  }
}

심층 대화(품질 우선)

{
  "sessions": {
    "maxHistoryMessages": 150,
    "maxHistoryTokens": 32000,
    "autoCompaction": true,
    "compactionStrategy": "summary",
    "compaction": {
      "summaryMaxTokens": 1000,
      "preserveLastN": 30
    }
  }
}

정리

대화 기록 길이 제어는 OpenClaw 비용 관리 및 대화 품질 최적화의 핵심 수단입니다. 채널 유형별로 기록 제한을 차별화하고, 요약 압축 또는 단순 잘라내기 전략을 결합하면 서로 다른 시나리오에서 최적의 균형점을 찾을 수 있습니다. 중간 설정부터 시작하여, 실제 Token 사용량과 대화 품질 피드백에 따라 점진적으로 최적화하는 것을 권장합니다.

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