튜토리얼 카테고리 Skills 소개
ZH EN JA KO
고급 활용

OpenClaw 컨텍스트 가지치기 및 캐시 TTL 전략

· 11 분 소요

소개

AI 모델의 컨텍스트 윈도우는 유한합니다. 가장 진보된 모델이라도 컨텍스트 윈도우는 수십만 토큰에 불과합니다. 대화가 계속되고 메시지가 쌓이면 컨텍스트 관리가 핵심 과제가 됩니다. OpenClaw은 TTL(Time-To-Live) 기반 캐싱 전략과 결합된 정교한 컨텍스트 가지치기 메커니즘을 제공하여, 대화 품질을 유지하면서 토큰 절약을 극대화합니다.

이 글에서는 이 메커니즘의 설계와 설정 옵션을 자세히 설명합니다.

컨텍스트 관리의 과제

긴 대화에서 전체 메시지 기록을 컨텍스트로 모델에 보내면 여러 문제가 발생합니다:

  1. 토큰 비용 급증: 매 API 호출마다 전체 기록을 보내므로 입력 토큰 비용이 선형적으로 증가합니다
  2. 컨텍스트 오버플로우: 모델의 윈도우 제한을 초과하면 요청이 완전히 실패합니다
  3. 노이즈 간섭: 오래된 메시지가 현재 주제와 무관하여 모델 판단을 오히려 저해할 수 있습니다
  4. 지연 시간 증가: 입력 토큰이 많을수록 모델이 첫 번째 응답을 생성하는 데 더 오래 걸립니다

OpenClaw은 다계층 가지치기 전략을 통해 이러한 문제를 체계적으로 해결합니다.

가지치기 전략 계층

OpenClaw의 컨텍스트 가지치기는 네 가지 계층에서 작동하며, 거친 것에서 세밀한 것 순으로 적용됩니다:

원본 메시지 기록
    ↓
계층 1: 메시지 수 제한 (maxMessages)
    ↓
계층 2: 토큰 수 제한 (maxTokens)
    ↓
계층 3: TTL 시간 감쇠 (cache TTL)
    ↓
계층 4: 스마트 압축
    ↓
최종 컨텍스트 → 모델에 전송

계층 1: 메시지 수 제한

가장 기본적인 전략으로, 유지할 최대 메시지 수를 제한합니다:

{
  agents: {
    "my-agent": {
      context: {
        // 최대 50개 메시지 유지
        maxMessages: 50,
        // 채널 유형별 차별화
        channelOverrides: {
          dm: { maxMessages: 80 },
          group: { maxMessages: 20 }
        }
      }
    }
  }
}

제한을 초과하면 가장 오래된 메시지가 삭제됩니다(단, JSONL 파일에는 여전히 보존되며 물리적으로 삭제되지 않습니다).

계층 2: 토큰 수 제한

실제 토큰 수에 기반한 더 정밀한 제어:

{
  agents: {
    "my-agent": {
      context: {
        // 최대 컨텍스트 토큰 수 (시스템 프롬프트 제외)
        maxTokens: 16000,
        // 모델 출력을 위해 예약된 토큰
        reservedOutputTokens: 4000,
        // 토큰 계산 방법
        tokenCounter: "tiktoken"  // 정밀 계산
      }
    }
  }
}

OpenClaw은 최신 메시지부터 역순으로 토큰을 계산합니다. 누적 수가 maxTokens를 초과하면 중지하고 이전 메시지를 삭제합니다.

계층 3: TTL 시간 감쇠 (핵심 기능)

이것은 OpenClaw의 가장 독특한 컨텍스트 관리 전략입니다. 메시지 타임스탬프를 기반으로 다른 "나이"의 메시지에 다른 보존 정책을 적용합니다:

{
  agents: {
    "my-agent": {
      context: {
        ttl: {
          enabled: true,
          // TTL 규칙 (최신에서 오래된 순)
          rules: [
            {
              // 최근 5분 이내의 메시지: 모두 유지
              maxAge: "5m",
              keep: "all"
            },
            {
              // 5분에서 1시간 전 메시지: 최근 20개 유지
              maxAge: "1h",
              keep: 20
            },
            {
              // 1시간에서 6시간 전 메시지: 최근 10개 유지
              maxAge: "6h",
              keep: 10
            },
            {
              // 6시간에서 24시간 전 메시지: 요약만 유지
              maxAge: "24h",
              keep: "summary"
            },
            {
              // 24시간 이전 메시지: 컨텍스트에 포함하지 않음
              maxAge: "inf",
              keep: "none"
            }
          ]
        }
      }
    }
  }
}

TTL 전략의 설계 철학

인간의 대화에는 자연스러운 시간 감쇠 특성이 있습니다: 5분 전의 메시지는 거의 항상 관련이 있고, 1시간 전의 메시지는 부분적으로 관련이 있을 수 있으며, 어제의 대화는 이미 다른 주제로 넘어갔을 가능성이 높습니다. TTL 전략은 이러한 자연적 감쇠를 모델링합니다.

Keep 옵션 참조

의미
"all" 이 시간 윈도우 내의 모든 메시지 유지
숫자 이 시간 윈도우 내의 최근 N개 메시지 유지
"summary" 이 시간 윈도우의 메시지를 요약으로 압축
"none" 이 시간 윈도우의 메시지를 포함하지 않음

계층 4: 스마트 압축

TTL 규칙에서 keep: "summary"가 지정되면, OpenClaw이 해당 시간 윈도우의 메시지를 자동 압축합니다:

{
  agents: {
    "my-agent": {
      context: {
        compaction: {
          enabled: true,
          // 압축에 사용되는 모델 (저렴한 모델이면 충분)
          model: "gpt-4o-mini",
          // 요약의 최대 토큰 수
          summaryMaxTokens: 512,
          // 압축 프롬프트
          summaryPrompt: "Please compress the following conversation content into a concise summary, preserving key information and user preferences:",
          // 압축 결과 캐시
          cacheSummary: true,
          // 요약 캐시 TTL
          summaryCacheTTL: "1h"
        }
      }
    }
  }
}

캐싱 메커니즘 상세

컨텍스트 캐시

OpenClaw은 이전에 구축한 컨텍스트를 캐시하여 매 요청마다 재계산을 피합니다:

{
  agents: {
    "my-agent": {
      context: {
        cache: {
          enabled: true,
          // 캐시 무효화 조건
          invalidateOn: [
            "new_message",     // 새 메시지가 도착하면 무효화
            "config_change"    // 설정이 변경되면 무효화
          ],
          // 캐시 저장 방식
          storage: "memory",   // memory / redis
          // 최대 캐시 항목 수
          maxEntries: 1000
        }
      }
    }
  }
}

프롬프트 캐싱 (프로바이더 수준)

일부 AI 프로바이더는 프롬프트 캐싱을 지원하며(Anthropic 및 OpenAI 등), OpenClaw은 이 기능을 자동으로 활용합니다:

{
  agents: {
    "my-agent": {
      context: {
        providerCache: {
          enabled: true,
          // 시스템 프롬프트를 캐시 가능으로 표시 (거의 변경되지 않으므로)
          cacheSystemPrompt: true,
          // 최근 N개 메시지를 캐시 가능한 접두사로 표시
          cacheableMessageCount: 10
        }
      }
    }
  }
}

프롬프트 캐싱은 반복되는 컨텍스트 접두사 비용을 최대 90%까지 절감할 수 있어, 긴 시스템 프롬프트를 사용하는 시나리오에 이상적입니다.

실용 설정 예제

개인 어시스턴트 (긴 대화, 깊은 기억)

{
  context: {
    maxMessages: 100,
    maxTokens: 32000,
    ttl: {
      enabled: true,
      rules: [
        { maxAge: "30m", keep: "all" },
        { maxAge: "4h", keep: 30 },
        { maxAge: "24h", keep: "summary" },
        { maxAge: "inf", keep: "none" }
      ]
    },
    compaction: { enabled: true, summaryMaxTokens: 1024 }
  }
}

고객 서비스 봇 (짧은 대화, 빠른 응답)

{
  context: {
    maxMessages: 30,
    maxTokens: 8000,
    ttl: {
      enabled: true,
      rules: [
        { maxAge: "10m", keep: "all" },
        { maxAge: "1h", keep: 10 },
        { maxAge: "inf", keep: "none" }
      ]
    }
  }
}

그룹 채팅 봇 (높은 메시지 빈도, 낮은 컨텍스트 필요)

{
  context: {
    maxMessages: 15,
    maxTokens: 4000,
    ttl: {
      enabled: true,
      rules: [
        { maxAge: "5m", keep: "all" },
        { maxAge: "30m", keep: 5 },
        { maxAge: "inf", keep: "none" }
      ]
    }
  }
}

모니터링 및 튜닝

컨텍스트 사용량 확인

# 특정 Agent의 컨텍스트 통계 확인
openclaw agent stats my-agent --context

# 출력 예시:
# Active sessions: 45
# Average context tokens: 8,234
# Max context tokens: 28,102
# Compaction executions: 12
# Cache hit rate: 73%

컨텍스트 사용량 알림

{
  monitoring: {
    alerts: [{
      name: "context-overflow-warning",
      condition: "context_tokens > maxTokens * 0.9",
      action: "log_warning"
    }]
  }
}

요약

컨텍스트 관리는 AI Agent 운영에서 비용과 품질 모두에 영향을 미치는 가장 중요한 요소 중 하나입니다. OpenClaw의 네 가지 계층 가지치기 전략 — 메시지 수 제한, 토큰 제한, TTL 시간 감쇠, 스마트 압축 — 은 거친 것에서 세밀한 것까지 정밀한 제어를 제공합니다. TTL 시간 감쇠 전략은 인간 대화의 자연스러운 시간적 감쇠를 모델링하는 OpenClaw만의 독특한 설계로, 최근 컨텍스트의 완전성을 유지하면서 오래된 메시지의 토큰 소비를 크게 줄입니다. 프롬프트 캐싱 및 컨텍스트 캐싱 메커니즘과 결합하면 대화 품질을 희생하지 않으면서도 의미 있는 토큰 비용 최적화를 달성할 수 있습니다.

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