홈 / 문서 / 컨텍스트 관리

컨텍스트 관리

긴 세션의 비용이 비선형적으로 증가하는 이유와 대화 기록의 크기를 제한하는 패턴.

API는 상태를 저장하지 않습니다. 매 턴마다 전체 대화를 다시 전송하므로 대화 기록이 길어질수록 입력 토큰이 늘어나고, 이후 호출마다 비용도 함께 증가합니다.

문제의 구조

N번의 턴으로 이루어진 대화에서 각 턴마다 약 T개의 토큰이 추가되면, 총 입력 토큰 비용은 NT가 아니라 대략 N²T/2에 비례합니다. 세션 길이가 두 배가 되면 입력 요금은 대략 네 배가 됩니다. 처음 십 분 동안은 저렴하게 느껴졌던 에이전트의 비용이 한 시간 후에는 부담스러워지는 이유입니다.

효과적인 네 가지 패턴

패턴방법절충점
슬라이딩 윈도최근 K개의 턴만 유지하고 나머지는 삭제초반 컨텍스트가 완전히 사라짐
누적 요약주기적으로 이전 턴을 모델이 작성한 요약으로 대체호출 한 번의 추가 비용이 들지만 핵심 내용은 유지
작업마다 새 세션 시작주제가 바뀌면 새로 시작추가 비용이 없으며 대체로 적절한 방법
외부 저장상태를 파일이나 데이터베이스에 보관하고 현재 단계에 필요한 내용만 불러오기작업량이 가장 많지만 결과도 가장 좋음

이전 턴 요약하기

def compact(history, keep=6):
    class="s">""class="s">"Replace everything but the last `keep` turns with one summary turn."class="s">""
    if len(history) <= keep:
        return history
    old, recent = history[:-keep], history[-keep:]
    summary = summarise(old)          class=class="s">"c"># one cheap Haiku call
    return [{class="s">"role": class="s">"user", class="s">"content": fclass="s">"Summary of earlier discussion: {summary}"}] + recent

요약은 저렴한 모델로 실행하세요. 추론 작업이 아니라 압축 작업입니다.

대개 도구 결과가 원인입니다

에이전트형 도구에서는 서로 관련 없는 작업 사이에 새 세션을 시작하는 것이 가장 비용이 적게 드는 최적화 방법입니다. Claude Code에서는 다음을 사용합니다 /clear.