컨텍스트 최적화 기법
컨텍스트 최적화는 전략적 압축, 마스킹, 캐싱, 파티셔닝을 통해 제한된 컨텍스트 윈도의 효과적 용량을 확장합니다. 효과적인 최적화는 더 큰 모델이나 더 긴 윈도우 없이도 유용한 용량을 증가시키지만, 측정 규율을 갖추고 적용해야만 합니다. 아래 기법들은 영향과 위험 순서로 정렬되어 있습니다.
활성화 시점
다음과 같은 경우 이 스킬을 활성화하세요:
- 컨텍스트 예산이나 토큰 비용이 태스크 복잡도를 제한하는 경우
- 관찰 마스킹을 통해 장황한 툴 출력을 검색 가능한 참조로 대체할 수 있는 경우
- 프리픽스 또는 KV-캐시 적중률 개선이 필요한 경우
- 검색 범위 지정으로 불필요하게 로드된 컨텍스트를 줄일 수 있는 경우
- 컨텍스트 파티셔닝으로 여러 에이전트 간 효과적 용량을 확장할 수 있는 경우
- 마스킹, 압축, 파티셔닝을 위한 예산 트리거가 필요한 경우
다른 스킬이 담당하는 인접 작업에는 이 스킬을 활성화하지 마세요:
- 어텐션이나 컨텍스트 윈도우가 이런 방식으로 동작하는 이유 설명:
context-fundamentals - 활성화된 중간 손실, 독성, 주의 분산, 혼란, 충돌 진단:
context-degradation - 긴 대화를 위한 구조화된 핸드오프 요약 설계:
context-compression - 대용량 출력, 계획, 로그를 파일로 저장:
filesystem-context - 모델이 자체 컨텍스트를 재작성하고 리프리필 비용을 관리:
self-managed-context
핵심 개념
다음 네 가지 주요 전략을 우선순위 순서로 적용하세요:
-
KV-캐시 최적화 — 프롬프트 구조를 재정렬하고 안정화하여 추론 엔진이 캐시된 Key/Value 텐서를 재사용하도록 합니다. 런타임이 프리픽스 캐싱을 지원할 때 가장 저렴한 최적화로, 품질 위험이 낮고 즉각적인 비용 및 지연 시간 절감 효과가 있습니다. 안정적인 프리픽스가 존재할 때 먼저 적용하세요.
-
관찰 마스킹 — 장황한 툴 출력이 목적을 달성한 후에는 간결한 참조로 대체합니다. 툴 출력은 에이전트 트레이젝토리를 지배할 수 있으므로(claim-context-optimization-tool-output-dominance), 마스킹은 일반적으로 가장 큰 용량 향상을 가져옵니다. 원본 콘텐츠는 필요시 다운스트림에서 검색 가능한 상태로 유지됩니다.
-
압축 — 컨텍스트 사용률이 70%를 초과하면 누적된 컨텍스트를 요약한 후 요약으로 재초기화합니다. 이는 윈도우의 내용을 증류하면서 태스크에 중요한 상태를 보존합니다. 압축은 손실이 있으므로, 마스킹으로 저가치 대량 데이터를 제거한 후에 적용하세요.
-
컨텍스트 파티셔닝 — 단일 윈도우에 전체 문제를 담을 수 없을 때 격리된 컨텍스트를 가진 하위 에이전트 간에 작업을 분할합니다. 각 하위 에이전트는 하위 작업에 집중된 깨끗한 컨텍스트에서 작동합니다. 조정 오버헤드가 현실적이므로, 예상 컨텍스트가 윈도우 제한의 60%를 초과하는 작업에만 이 방법을 사용하세요.
지배 원칙: 컨텍스트 품질이 양보다 중요합니다. 모든 최적화는 신호를 보존하면서 노이즈를 줄입니다. 최적화 전에 측정하고, 최적화의 효과를 측정하세요.
상세 주제
압축 전략
컨텍스트 사용률이 70%를 초과하면 압축을 트리거합니다: 현재 컨텍스트를 요약한 후 요약으로 재초기화합니다. 이는 윈도우 내용을 높은 충실도로 증류하여 최소한의 성능 저하로 계속 진행할 수 있게 합니다. 먼저 툴 출력(토큰의 80%+ 소비), 그 다음 오래된 대화 턴, 마지막으로 검색된 문서를 압축하는 것을 우선시하세요. 시스템 프롬프트는 절대 압축하지 마세요 — 이는 모델 동작을 고정시키며 제거 시 예측 불가능한 성능 저하를 유발합니다.
메시지 유형별로 다른 요소를 보존하세요:
- 툴 출력: 핵심 결과, 메트릭, 오류 코드, 결론을 추출하세요. 장황한 원시 출력, 스택 트레이스(디버깅 중이 아닌 경우), 상용구 헤더는 제거하세요.
- 대화 턴: 결정, 약속, 사용자 선호도, 컨텍스트 전환을 유지하세요. 이미 캡처된 결론에 이르게 한 탐색적 논의, 채우기, 인사말은 제거하세요.
- 검색된 문서: 활성 작업과 관련된 주장, 사실, 데이터 포인트를 유지하세요. 일회성 추론 목적을 위해 사용된 뒷받침 증거와 설명은 제거하세요.
품질 저하 5% 미만으로 50-70% 토큰 감소를 목표로 하세요. 압축이 70% 이상 감소하면, 요약에서 중요한 정보 손실이 있는지 감사하세요 — 과도한 압축이 가장 일반적인 실패 모드입니다.
관찰 마스킹
최근성과 지속적 관련성에 따라 선택적으로 관찰을 마스킹하되, 균일하게 마스킹하지 마세요. 다음 규칙을 적용하세요:
- 절대 마스킹 금지: 현재 작업에 중요한 관찰, 가장 최근 턴의 관찰, 활성 추론 체인에 사용된 관찰, 디버깅 중인 오류 출력.
- 3턴 후 마스킹: 핵심 사항이 이미 대화 흐름에 추출된 장황한 출력. 간결한 참조로 대체:
[Obs:{ref_id} 생략됨. 핵심: {요약}. 전체 콘텐츠 검색 가능.] - 즉시 항상 마스킹: 반복/중복 출력, 상용구 헤더와 푸터, 대화에서 이미 요약된 출력.
마스킹은 품질 영향 2% 미만으로 마스킹된 관찰에서 60-80% 감소를 달성해야 합니다. 핵심은 검색 가능성을 유지하는 것입니다 — 전체 콘텐츠를 외부에 저장하고 참조 ID를 컨텍스트에 유지하여 에이전트가 필요시 원본을 요청할 수 있도록 합니다.
KV-캐시 최적화
안정적인 콘텐츠가 프리픽스를 차지하고 동적 콘텐츠가 끝에 오도록 프롬프트를 구성하여 프리픽스 캐시 적중을 최대화하세요. KV-캐시는 추론 중에 계산된 Key 및 Value 텐서를 저장합니다. 연속 요청이 동일한 프리픽스를 공유하면 캐시된 텐서가 재사용되어 비용과 지연 시간을 모두 절약합니다.
모든 프롬프트에 다음 순서를 적용하세요:
- 시스템 프롬프트 (가장 안정적 — 세션 내 절대 변경되지 않음)
- 툴 정의 (요청 간 안정적)
- 자주 재사용되는 템플릿 및 퓨샷 예제
- 대화 기록 (증가하지만 이전 턴과 프리픽스를 공유)
- 현재 쿼리 및 동적 콘텐츠 (가장 덜 안정적 — 항상 마지막)
캐시 안정성을 위한 프롬프트 설계: 시스템 프롬프트에서 타임스탬프, 세션 카운터, 요청 ID를 제거하세요. 동적 메타데이터를 별도의 사용자 메시지나 툴 결과로 이동하여 프리픽스를 깨뜨리지 않도록 하세요. 프리픽스의 단일 공백 변경도 해당 변경 이후의 전체 캐시 블록을 무효화합니다. 동일한 규칙이 이전 기록에 적용된 모든 압축 또는 마스킹 편집의 비용을 결정합니다: 그 비용은 뒤따르는 텍스트이므로, 해당 편집을 일괄 처리하고 컨텍스트 끝 근처에서 수행하는 것이 좋습니다.
안정적인 워크로드에 대해 70%+ 캐시 적중률을 목표로 하세요. 대규모에서는 캐시된 토큰에 대해 50%+ 비용 절감과 40%+ 지연 시간 절감으로 이어집니다.
컨텍스트 파티셔닝
단일 컨텍스트가 과도한 압축을 유발하지 않고 전체 문제를 담을 수 없을 때 하위 에이전트 간에 작업을 분할하세요. 각 하위 에이전트는 하위 작업을 위해 깨끗하고 집중된 컨텍스트에서 작동한 후 구조화된 결과를 코디네이터 에이전트에 반환합니다.
예상 작업 컨텍스트가 윈도우 제한의 60%를 초과할 때 파티셔닝을 계획하세요. 작업을 독립적인 하위 작업으로 분해하고, 각각을 하위 에이전트에 할당한 후 결과를 집계하세요. 모든 파티션이 완료되었는지 확인한 후 병합하고, 호환되는 결과를 병합하며, 집계된 출력이 여전히 예산을 초과하는 경우 요약을 적용하세요.
이 접근 방식은 관심사의 분리를 달성합니다 — 상세한 검색 컨텍스트는 하위 에이전트 내에 격리되고 코디네이터는 합성에 집중합니다. 그러나 조정에는 실제 토큰 비용이 있습니다: 코디네이터 프롬프트, 결과 집계, 오류 처리가 모두 토큰을 소비합니다. 절감액이 이 오버헤드를 초과하는 경우에만 파티셔닝하세요.
예산 관리
세션 시작 전에 컨텍스트 카테고리별로 명시적 토큰 예산을 할당하세요: 시스템 프롬프트, 툴 정의, 검색된 문서, 메시지 기록, 툴 출력, 예약 버퍼(전체의 5-10%). 예산 대비 사용량을 지속적으로 모니터링하고, 카테고리가 할당을 초과하거나 전체 사용률이 70%를 넘으면 최적화를 트리거하세요.
주기적 최적화 대신 트리거 기반 최적화를 사용하세요. 다음 신호를 모니터링하세요:
- 토큰 사용률 80% 초과 — 압축 트리거
- 어텐션 저하 지표(반복, 지침 누락) — 마스킹 + 압축 트리거
- 품질 점수가 기준치 이하로 떨어짐 — 최적화 전 컨텍스트 구성 감사
실용적인 지침
최적화 결정 프레임워크
컨텍스트 구성 요소에 따라 최적화 기법을 선택하세요:
| 컨텍스트 구성 | 첫 번째 조치 | 두 번째 조치 |
|---|---|---|
| 툴 출력이 지배적(>50%) | 관찰 마스킹 | 나머지 턴 압축 |
| 검색된 문서가 지배적 | 요약 | 문서가 독립적인 경우 파티셔닝 |
| 메시지 기록이 지배적 | 선택적 보존으로 압축 | 새로운 하위 작업에 대한 파티셔닝 |
| 여러 구성 요소가 기여 | KV-캐시 최적화 우선, 그 다음 마스킹 + 압축 계층화 | |
| 한계 근접 + 활성 디버깅 | 해결된 툴 출력만 마스킹 — 오류 세부 정보 보존 |
성능 목표
다음 메트릭을 추적하여 최적화 효과를 검증하세요:
- 압축: 50-70% 토큰 감소, <5% 품질 저하, 압축 단계 자체의 <10% 지연 시간 오버헤드
- 마스킹: 마스킹된 관찰에서 60-80% 감소, <2% 품질 영향, 거의 제로 지연 시간 오버헤드
- 캐시 최적화: 안정적인 워크로드에 대해 70%+ 적중률, 50%+ 비용 절감, 40%+ 지연 시간 절감
- 파티셔닝: 코디네이터 오버헤드를 고려한 순 토큰 절감; 일반적으로 손익분기점은 3개 이상의 하위 작업 필요
측정된 결과를 기반으로 전략을 반복하세요. 최적화 기법이 목표 메트릭을 측정 가능하게 개선하지 못하면 제거하세요 — 최적화 기계 자체가 토큰을 소비하고 지연 시간을 추가합니다.
예제
예제 1: 압축 트리거
if context_tokens / context_limit > 0.8:
context = compact_context(context)
예제 2: 관찰 마스킹
if len(observation) > max_length:
ref_id = store_observation(observation)
return f"[Obs:{ref_id} 생략됨. 핵심: {extract_key(observation)}]"
예제 3: 캐시 친화적 순서
# 안정적인 콘텐츠 우선
context = [system_prompt, tool_definitions] # 캐시 가능
context += [reused_templates] # 재사용 가능
context += [unique_content] # 고유
예제 4: 예산 트리거 최적화 정책
budgets:
tool_outputs: 35%
message_history: 30%
retrieved_documents: 20%
reserved_buffer: 15%
triggers:
tool_outputs_over_budget: mask resolved observations
total_context_over_70_percent: compact message history
repeated_irrelevant_retrievals: tighten retrieval scope
지침
- 최적화 전에 측정하세요 — 현재 상태를 알아야 합니다.
- 압축 전에 마스킹을 적용하세요 — 저가치 대량 데이터를 먼저 제거한 후 나머지를 요약합니다.
- 일관된 프롬프트로 캐시 안정성을 위해 설계하세요.
- 컨텍스트가 문제가 되기 전에 파티셔닝하세요.
- 시간이 지남에 따라 최적화 효과를 모니터링하세요.
- 토큰 절감과 품질 보존 사이의 균형을 맞추세요.
- 프로덕션 규모에서 최적화를 테스트하세요.
- 엣지 케이스에 대한 우아한 성능 저하를 구현하세요.
주의사항
-
공백이 KV-캐시를 깨뜨립니다: 프롬프트 프리픽스의 단일 공백이나 새 줄 변경도 해당 지점 이후의 전체 KV-캐시 블록을 무효화합니다. 시스템 프롬프트를 변경 불가능한 문자열로 고정하세요 — 타임스탬프, 버전 번호, 세션 ID를 삽입하지 마세요. 배포 간 프롬프트 템플릿을 바이트 단위로 비교하세요.
-
시스템 프롬프트의 타임스탬프가 캐시 적중률을 파괴합니다: 시스템 프롬프트에
Current date: {today}또는 유사한 동적 콘텐츠를 포함하면 매일(또는 시간대를 사용하는 경우 모든 요청 시) 전체 캐시 미스를 강제합니다. 동적 메타데이터를 안정적인 프리픽스 뒤에 추가되는 사용자 메시지나 별도의 툴 결과로 이동하세요. -
압박 속의 압축이 중요한 상태를 잃습니다: 압축을 수행하는 모델 자체가 컨텍스트 압박(>85% 사용률)을 받으면 요약 품질이 저하됩니다 — 작업 목표를 생략하고, 사용자 제약 조건을 놓치며, 미묘한 상태를 평탄화합니다. 70-80%에서 압축을 트리거하고, 90%+에서는 피하세요. 압축이 늦게 수행되어야 하는 경우, 요약할 자료만 포함된 깨끗한 컨텍스트를 사용하여 별도의 모델 호출을 사용하세요.
-
오류 출력 마스킹이 디버깅 루프를 깨뜨립니다: 과도한 마스킹은 에이전트가 후속 턴에서 문제를 진단하고 수정하는 데 필요한 오류 메시지, 스택 트레이스, 실패 세부 정보를 숨깁니다. 활성 디버깅 중(최근 3턴 내 오류)에는 문제가 해결될 때까지 모든 오류 관련 관찰에 대한 마스킹을 중단하세요.
-
파티셔닝 오버헤드가 절감액을 초과할 수 있습니다: 각 하위 에이전트는 자체 시스템 프롬프트, 툴 정의, 조정 메시지가 필요합니다. 3개 미만의 독립적인 하위 작업이 있는 작업의 경우, 조정 오버헤드가 컨텍스트 절감액을 초과하는 경우가 많습니다. 파티셔닝을 결정하기 전에 총 토큰(코디네이터 + 모든 하위 에이전트)을 추정하세요.
-
배포 변경 후 캐시 미스 비용이 급증합니다: 배포 간 툴 재정렬, 시스템 프롬프트 변경, 퓨샷 예제 변경은 전체 프리픽스 캐시를 무효화하여 새 캐시가 워밍업될 때까지 2-5배의 일시적 비용 급증을 유발합니다. 프롬프트 변경을 점진적으로 롤아웃하고 배포 기간 동안 캐시 적중률을 모니터링하세요.
-
압축이 오래된 요약에 대한 잘못된 확신을 만듭니다: 컨텍스트가 압축되면 요약이 권위적으로 보이지만 오래된 상태를 반영할 수 있습니다. 압축 이후 작업이 발전한 경우(새로운 사용자 요구 사항, 수정된 가정), 요약은 조용히 오래된 정보를 전달합니다. 압축 후, 진행하기 전에 현재 작업 목표에 대해 요약을 재검증하세요.
통합
이 스킬은 토큰 효율성 전술과 예산 정책을 소유합니다. 인접 스킬은 진단, 저장, 아키텍처를 소유합니다:
context-fundamentals: 컨텍스트 품질과 어텐션 배치가 중요한 이유에 대한 정신 모델.context-degradation: 출력 품질이 이미 떨어졌을 때 진단.context-compression: 손실 압축 및 핸드오프 전략.filesystem-context: 전체 출력 및 로그를 위한 파일 기반 오프로딩.multi-agent-patterns: 격리된 에이전트 컨텍스트 간 작업 분할.latent-briefing: 오케스트라 전반에 걸친 선택적 KV 보존.
…
[번역을 위해 잘림]