콘텐츠로 이동

Token Compression: 몇 달의 Agent 기억을 하나의 프롬프트에 담기

AI agent 메모리에는 이런 딜레마가 있습니다: agent 가 모든 것을 기억했으면 하지만, AI 모델은 한 번에 처리할 수 있는 텍스트 양에 엄격한 제한이 있습니다. 히스토리가 많을수록 들어갈 공간은 줄어듭니다.

Token compression 이 이 문제를 해결합니다. 중요한 것은 남기고, 나머지는 압축하고, 제어할 수 있는 예산 안에 히스토리를 맞춥니다.

한 장의 그림으로 보는 문제

Agent 의 전체 히스토리: 50,000 토큰
    ↓
AI 모델의 컨텍스트 윈도우: 4,000 토큰
    ↓
압축 없이 일어나는 일: 마지막 4,000 토큰만 남음
    (더 오래된 것은 모두 사라짐 — 중요한 결정과 에러까지)

예전 접근 방식은 tail window — 가장 최근 이벤트만 유지하고 나머지는 버리는 것이었습니다. 예측 가능하지만 낭비가 심하죠. 5분 전의 장황한 로그는 남기면서, 어제의 중요한 에러는 버릴 수도 있습니다.

압축이 작동하는 방식

새로운 접근 방식은 더 똑똑합니다:

  1. 유지 — 중요한 것: 에러, 결정, 파일 경로, 최근 상태
  2. 압축 — 노이즈: 반복된 로그, 스택 트레이스, 장황한 출력
  3. 제거 — 압축으로 부족할 때만 낮은 우선순위 콘텐츠를 제거
npm run contextdb -- context:pack \
  --session <id> \
  --limit 80 \
  --token-budget 1200 \
  --token-strategy balanced

결과

이전과 비교:

❌ 예전 방식: 마지막 20개 이벤트 유지 → 이벤트 #5의 중요한 버그를 놓침
✅ 새로운 방식: 80개 이벤트 모두 유지, 노이즈는 압축 → 버그가 여전히 남아 있음

세 가지 전략

전략 사용 시기 동작
balanced 기본값 노이즈를 압축하고 시그널을 유지. 일상 사용에 최적.
aggressive 매우 작은 예산 타이트한 제약을 위한 최대 압축.
legacy 호환성 예전 tail-window 동작. 필요할 때만 사용.

balanced 로 시작하세요. 90%의 경우에 적합한 선택입니다.

보호되는 것

다음은 절대 제거되지 않습니다:

  • 에러 메시지와 실패 신호
  • 파일 경로와 명령 출력
  • 최근 상태와 결정
  • 다음 행동 신호

다음은 먼저 압축 됩니다 (짧아지지만, 항상 제거되는 것은 아님):

  • 반복된 로그 라인
  • 스택 트레이스
  • 장황한 도구 출력

패킷에는 원시 토큰 수, 압축된 토큰 수, 제거된 이벤트 수 등 원격 측정 정보가 포함되어 정확히 무슨 일이 일어났는지 확인할 수 있습니다.

가장 필요할 때

Token compression 은 다음 시나리오에서 특히 빛을 발합니다:

  • 몇 달의 히스토리가 있는 장기 프로젝트
  • 같은 ContextDB 를 공유하는 여러 agent
  • 많은 로그를 생성하는 야간 harness 실행
  • 컴팩트한 컨텍스트가 필요한 agent 간 전환

lazy load 시작과 특히 잘 어울립니다 — agent 가 작은 요약으로 즉시 시작하고, 필요할 때만 압축된 전체 히스토리를 로드합니다.

직접 해보세요

npm run contextdb -- context:pack \
  --session <your-session-id> \
  --token-budget 1200 \
  --token-strategy balanced \
  --out memory/context-db/exports/compressed.md

그런 다음 출력을 확인하세요 — 얼마나 많은 토큰이 절약되었는지 요약이 표시됩니다.


Token compression 은 ContextDB 에 내장되어 있으며, Harness CLI 의 일부입니다. 추가 도구가 필요하지 않습니다.