Token Compression: 몇 달의 Agent 기억을 하나의 프롬프트에 담기¶
AI agent 메모리에는 이런 딜레마가 있습니다: agent 가 모든 것을 기억했으면 하지만, AI 모델은 한 번에 처리할 수 있는 텍스트 양에 엄격한 제한이 있습니다. 히스토리가 많을수록 들어갈 공간은 줄어듭니다.
Token compression 이 이 문제를 해결합니다. 중요한 것은 남기고, 나머지는 압축하고, 제어할 수 있는 예산 안에 히스토리를 맞춥니다.
한 장의 그림으로 보는 문제¶
Agent 의 전체 히스토리: 50,000 토큰
↓
AI 모델의 컨텍스트 윈도우: 4,000 토큰
↓
압축 없이 일어나는 일: 마지막 4,000 토큰만 남음
(더 오래된 것은 모두 사라짐 — 중요한 결정과 에러까지)
예전 접근 방식은 tail window — 가장 최근 이벤트만 유지하고 나머지는 버리는 것이었습니다. 예측 가능하지만 낭비가 심하죠. 5분 전의 장황한 로그는 남기면서, 어제의 중요한 에러는 버릴 수도 있습니다.
압축이 작동하는 방식¶
새로운 접근 방식은 더 똑똑합니다:
- 유지 — 중요한 것: 에러, 결정, 파일 경로, 최근 상태
- 압축 — 노이즈: 반복된 로그, 스택 트레이스, 장황한 출력
- 제거 — 압축으로 부족할 때만 낮은 우선순위 콘텐츠를 제거
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 의 일부입니다. 추가 도구가 필요하지 않습니다.