상위: 06_00_MOC

Compress 전략 — 요약 · 프루닝 · KV-캐시 최적화 · 압축 전용 LLM

한 줄 정의

Compress 전략은 요약, 프루닝, KV-캐시 최적화로 작업에 꼭 필요한 토큰만 남기는 전략이다. 컨텍스트 과부하와 02 산만(100K 토큰 임계)를 곧바로 해결하면서 프로덕션 비용을 최대 10배까지 줄인다.

“Anything beyond 100,000 tokens triggered agents to repeat prior actions rather than generate novel solutions.” — Drew Breunig, 2025


왜 Compress인가 — 동기

에이전트 실행이 길어지면 두 갈래의 비용이 급등한다.

  1. 성능 비용: 100K 토큰을 넘기면 모델이 새로운 합성 대신 반복을 택하는 “Context Distraction”이 나타난다(02 산만).
  2. 경제적 비용: KV-캐시가 미적중하면 적중 때보다 비용이 10배로 뛴다.

Compress 전략은 토큰 자체를 줄이거나, 캐시가 유지되도록 컨텍스트 구조를 안정화해 이 두 문제를 함께 푼다.

flowchart TD
    LONG["긴 컨텍스트<br/>(과부하·비용 위험)"] --> C1 & C2 & C3 & C4

    C1["컨텍스트 요약<br/>Context Summarization"]
    C2["컨텍스트 프루닝<br/>Context Pruning"]
    C3["압축 전용 LLM<br/>Compressor Agent"]
    C4["KV-캐시 최적화<br/>Cache Preservation"]

    C1 --> OUT["압축된 컨텍스트<br/>(성능 ↑, 비용 ↓)"]
    C2 --> OUT
    C3 --> OUT
    C4 --> OUT

1. 컨텍스트 요약 (Context Summarization)

1-1. Claude Code auto-compact

컨텍스트 창이 95%를 넘으면 전체 에이전트 궤적(user-agent interaction trajectory)을 자동으로 요약·압축한다(LangChain, 2025).

  • 입력: 수백 턴에 걸친 전체 에이전트-사용자 상호작용
  • 출력: 핵심 결정·이벤트·현재 상태를 담은 압축 요약
  • 트리거: 컨텍스트 창 95% 도달 시 자동

1-2. 요약 유형

유형설명적용 시점
재귀 요약 (Recursive)이전 요약을 다시 요약하는 다단계 압축매우 긴 실행
계층 요약 (Hierarchical)구조화된 계층별 압축복잡한 태스크
포인트 삽입 요약특정 시점(예: 검색 결과 직후) 후처리토큰 집약적 도구 출력

1-3. 전략적 적용 지점

LangChain(2025)이 정리한 요약의 최적 삽입점:

  1. 도구 출력(검색 결과, 코드 실행 결과) 직후 후처리
  2. 서브에이전트 간 컨텍스트 인계 시점
  3. 주기적 궤적 요약 (정기 압축)

2. 컨텍스트 프루닝 (Context Pruning)

2-1. Provence Pruning

무관한 정보를 걷어내되 전체 컨텍스트의 95%를 삭제한 뒤에도 핵심 정보를 지키는, 질문-응답에 특화된 pruning 기법이다(Breunig, 2025).

  • 사용 도구: Provence (QA 특화 context pruning 모델)
  • 효과: 95% 토큰 삭제 후에도 정답 보존

2-2. 하드코딩 휴리스틱 Trim

단순하지만 효과적인 방법:

  • 대화 목록에서 오래된 메시지 삭제
  • 도구 출력에서 반복 패턴 제거
  • 형식 토큰(마크업, 들여쓰기 과잉 등) 제거

2-3. 학습형 토큰레벨 압축 (LLMLingua 계열)

앞의 요약·프루닝과 달리 LLMLingua 계열(LLMLingua, LongLLMLingua, LLMLingua-2 — Microsoft, arXiv:2310.05736)은 소형 언어모델의 perplexity(혼란도)를 신호 삼아 개별 토큰을 직접 제거한다. 소형 LM이 보기에 “예측 가능해서 정보량이 낮은” 저정보 토큰을 떨어내고, 예측하기 어려운 고정보 토큰만 남기는 방식이다. 이렇게 프롬프트를 2~20배 압축해도 다운스트림 성능은 유지되며, 압축 결과가 사람 눈에는 비문(非文)처럼 보여도 LLM은 이를 복원해 활용한다. LLMLingua-2는 GPT-4로 만든 데이터로 토큰 보존과 삭제를 이진 분류로 학습시켜, 양방향(BERT 계열) 인코더가 빠르게 압축하도록 발전했다.

핵심은 압축이 작동하는 층위(層位)가 서로 다르다는 데 있다. 요약은 의미를 다시 쓰고, 추출 프루닝은 문장이라는 단위를 통째로 고르며, LLMLingua는 토큰 단위로 깎아낸다.

기법작동 단위메커니즘산출물 형태
요약 (Summarization)의미LLM이 핵심을 재서술(rewrite)사람이 읽을 수 있는 새 문장
추출 프루닝 (Extractive Pruning)문장·청크관련도 높은 단위를 선택(select)원문 일부의 부분집합 (Provence 등)
토큰레벨 압축 (LLMLingua)토큰소형 LM perplexity로 저정보 토큰 삭제(drop)압축된 토큰열(사람엔 비문, LLM엔 유효)

메커니즘 차이 요지: 요약 = 의미 재서술, 추출 프루닝 = 단위 선택, LLMLingua = perplexity 기반 토큰 삭제. 셋 다 “토큰을 줄인다”는 목표는 같지만 무엇을 단위로, 무엇을 신호로 줄이는가가 다르다. “압축 = 요약본”은 이 중 하나일 뿐이다.

gist tokens (Mu et al., 2023, arXiv:2304.08467)는 긴 프롬프트를 소수의 학습된 “gist(요지) 토큰” 활성값으로 증류해 KV로 캐싱하는 학습형 압축이다. 토큰을 고르거나 지우는 대신 모델 내부 표현으로 압축한다는 점에서 LLMLingua와 결이 다르다.


3. 압축 전용 LLM — Cognition의 접근

Walden Yan(Cognition/Devin, 2025)은 긴 작업을 감당하려고 히스토리 압축에 특화된 별도 LLM을 두자고 제안한다.

“We introduce a new LLM model whose key purpose is to compress a history of actions & conversation into key details, events, and decisions. This is hard to get right.” — Walden Yan, Cognition, 2025

flowchart LR
    MAIN["Main Agent<br/>(전체 히스토리 보유)"] -->|"컨텍스트 초과 시"| COMP
    COMP["Compressor LLM<br/>(히스토리 → 핵심 압축)<br/>파인튜닝 가능"] -->|"핵심 압축 반환"| MAIN
    MAIN -->|"압축된 컨텍스트로 계속 실행"| NEXT["다음 태스크"]

핵심 과제는 무엇을 버릴지 결정하는 일이다. Yan의 주장은 이렇다.

  • 일반 LLM으로는 제대로 해내기 어렵다(“hard to get right”).
  • 도메인 특화 소형 모델을 파인튜닝하는 편이 효과적이며, 실제로 Cognition이 그렇게 했다.
  • 범용 요약보다 도메인 특화 압축이 낫다.

요컨대 압축은 단순한 요약이 아니라 도메인 지식이 받쳐줘야 하는 정밀 작업이다.


4. KV-캐시 최적화 — Manus의 경제적 핵심 전략

KV-캐시(Key-Value Cache)는 트랜스포머의 어텐션 계산 결과를 재사용해 반복 토큰 처리 비용을 절감하는 메커니즘이다. Manus는 이를 가장 중요한 단일 지표로 꼽는다.

“The KV-cache hit rate is the single most important metric for a production-stage AI agent.” — Yichao ‘Peak’ Ji, Manus, 2025

4-1. 비용 구조

상태Claude Sonnet 기준 비용
캐시 적중 (Cache Hit)$0.30/MTok
캐시 미적중 (Cache Miss)$3.00/MTok
차이10배

입출력 토큰 비율이 100:1로 입력이 압도적인 Manus의 환경에서는 이 전략의 경제적 효과가 극대화된다.

4-2. KV-캐시 보존 4원칙

flowchart TD
    P1["1. 시스템 프롬프트 앞부분 안정화<br/>타임스탬프 등 가변 요소 금지"]
    P2["2. Append-Only 컨텍스트<br/>과거 액션·관측 절대 수정 금지"]
    P3["3. 결정론적 직렬화<br/>JSON 필드 순서 고정 등"]
    P4["4. 도구 목록 고정<br/>+ 로짓 마스킹(Logit Masking)으로<br/>가용성 관리 (디코딩 단계)"]

    P1 --> P2 --> P3 --> P4
    P4 --> RESULT["KV-캐시 히트율 최대화<br/>비용 최대 10× 절감"]

원칙 1 — 시스템 프롬프트 앞부분 안정화 캐시는 프롬프트의 접두사(prefix)가 같을 때 적중한다. 타임스탬프나 동적 사용자 ID처럼 변하는 요소를 시스템 프롬프트 앞부분에 넣으면 요청마다 캐시가 깨진다.

원칙 2 — Append-Only 컨텍스트 과거 액션과 관측값은 손대지 않고 새 내용만 끝에 덧붙인다. 중간 내용이 바뀌면 그 뒤의 캐시가 전부 무효가 된다.

원칙 3 — 결정론적 직렬화 JSON 필드 순서, 공백, 줄바꿈을 늘 똑같이 맞춘다. 의미가 같아도 직렬화 형태가 달라지면 캐시가 미적중한다.

원칙 4 — 로짓 마스킹 (Logit Masking) 도구 목록을 컨텍스트에서 그때그때 빼는 대신, 디코딩 단계에서 특정 토큰의 logit 점수를 억눌러 도구 가용성을 관리한다. 컨텍스트 자체를 건드리지 않으므로 KV-캐시가 보존된다.

주의 — 로짓 마스킹의 한계: 디코딩 단계 개입이 필요해 서버사이드 구현이 전제된다. logit_bias 같은 API 파라미터가 없는 폐쇄형 환경에서는 사용이 제한된다.


5. Context Distraction 임계값 (100K 토큰)

Breunig(2025)이 정의한 핵심 임계는 다음과 같다.

“Context Distraction occurs beyond 100,000 tokens where models favor repetition over novel synthesis.”

구간모델 행동
100K 토큰 미만새로운 합성(novel synthesis)
100K 토큰 초과반복(repetition) 선호

이 100K 임계값이 Compress 전략의 주요 트리거다. 에이전트 실행이 이 값에 다가서면 곧바로 요약·프루닝을 걸어야 한다.


6. Compress가 막는 실패모드

실패모드Compress 기법메커니즘
과부하 (Overload)auto-compact 95%절삭 전 요약으로 컨텍스트 축소
산만 (Distraction)100K 토큰 이전 pruningContext Distraction 임계 예방
오염 (Poisoning)Provence 95% pruning무관·유해 토큰 선제 제거
암묵적 결정 분산압축 전용 LLM에이전트 경계에서 핵심 결정 보존
KV-캐시 파괴Append-only + 직렬화 고정캐시 보존으로 10배 비용 절감

참고문헌

관련 노트