Claude API 컴팩션 온디맨드의 요약 방식 비교 문서 화면을 담은 대표 이미지
|

AI 기술 설명 – 컴팩션 온디맨드(Compaction on Demand) – 긴 대화를 서버가 요약해 주는 Claude API 기능

컴팩션 온디맨드(Compaction on Demand)는 Claude API에서 앱이 정한 시점에 긴 대화의 앞부분을 서버가 요약 블록 하나로 바꿔 주는 기능입니다. 컴팩션 개요 문서는 오래된 턴을 Claude가 서버에서 쓴 요약으로 대체하기 때문에 직접 요약 코드를 짤 필요가 없다고 설명해요. 대화가 길어질수록 응답 품질이 떨어지니 활성 컨텍스트를 작게 유지하는 목적도 있다고 적습니다.

Claude 플랫폼 공식 아이콘, 컴팩션 온디맨드를 제공하는 Claude API 문서의 로고
Claude 플랫폼 공식 아이콘 (platform.claude.com, 2026-10-11 확인)

릴리스 노트에 따르면 컴팩션 온디맨드는 2026년 9월 14일에 compact-2026-09-04 베타 헤더와 함께 공개됐어요. 언제 요약할지를 앱이 고르고, 요약 요청을 백그라운드로 돌릴 수 있고, 최근 턴을 원문 그대로 남길 수 있다는 점이 그 항목의 요지입니다. 이 글은 컨텍스트 엔지니어링 글에서 다룬 “AI가 읽는 양을 설계하는 방법”과 이어지는 주제로, 요약을 서버에 맡기는 방법과 그 한계만 따로 정리했습니다.

글의 내용을 공식 문서 화면으로 정리한 영상 (소리 없음)

컴팩션 온디맨드는 요약 요청 한 번으로 시작한다

컴팩션 온디맨드 문서에 따르면 요약 요청은 대화 턴과 별개의 요청입니다. 지금까지의 대화에 compaction 매개변수를 붙여 보내면 API가 요청 안의 모든 메시지를 한 번 요약하고, 답변은 만들지 않고, stop_reason이 "compaction"인 응답에 블록 하나만 담아 돌려줘요. 블록에는 읽을 수 있는 요약 텍스트와 서명(signature)이 들어 있습니다.

compaction_request.pypython
# 문서의 Python 예제에서 요청 호출 부분만 가져온 코드입니다
response = client.beta.messages.create(
    model="claude-opus-5-5",
    # max_tokens caps the whole call, including any thinking, so allow several thousand tokens.
    max_tokens=4096,
    betas=["compact-2026-09-04"],
    messages=history,
    compaction={"type": "summarize"},
)
print(f"Stop reason: {response.stop_reason}")

max_tokens는 넉넉하게

문서의 주석대로 max_tokens는 생각(thinking) 과정을 포함한 호출 전체의 상한이라서 수천 토큰을 주라고 합니다. 요약 호출은 요청에 쓴 모델, system, tools, 생각 설정을 그대로 쓰므로 대화의 나머지에 쓰는 system과 tools를 똑같이 보내라는 안내도 있어요.

컴팩션 온디맨드가 요약 요청, 블록 응답, 맞바꾸기, 다음 턴으로 이어지는 네 단계 도식
컴팩션 온디맨드가 이어지는 순서

컴팩션 요청에 메시지 네 개를 보내면 블록 하나가 돌아오고, 다음 요청에서 그 블록이 messages 맨 앞에서 네 개를 대신하는 공식 도식
컴팩션 온디맨드의 맞바꾸기 (platform.claude.com 공식 도식)

요약된 메시지를 지우고 블록을 맨 앞에 둔다

응답을 받으면 기록에서 보낸 메시지를 지우고 돌려받은 블록으로 바꿉니다. 블록은 messages 맨 앞에 두고, 이후 요청마다 베타 헤더와 함께 보내요. 블록은 서명까지 받은 그대로 보내야 하며, 고치면 400 오류(compaction_signature_invalid 또는 compaction_content_mismatch)가 납니다. 요청마다 블록은 하나만 보낼 수 있고, 이미 블록으로 시작하는 대화가 다시 길어지면 compaction을 한 번 더 보내 새 블록이 옛 요약과 그 뒤를 함께 요약하게 합니다.

컴팩션 온디맨드 요청의 응답 형식을 문서 예시에서 옮긴 카드. content에 compaction 블록 하나, stop_reason이 compaction, usage의 iterations에 요약 호출이 잡힌다
문서의 응답 예시에서 형식을 옮긴 카드 (제가 실행한 출력이 아님)

오류가 나지 않는 실수 두 가지

문서가 꼽은 실수는 요약된 메시지를 블록 뒤에 남겨 두는 것과, 이후 요청에서 블록을 빼먹는 것입니다. 첫 번째는 API가 그 메시지를 Claude에게 다시 보내고, 두 번째는 Claude는 요약을 받지 못해요. 둘 다 오류가 나지 않아요. 요약된 메시지를 블록 앞에 남기면 compaction_block_misplaced 400 오류가 나니 이 경우와 구분해야 합니다.

비용도 문서가 정리합니다. 요약 호출은 일반 요청처럼 과금되고 속도 제한을 받으며, usage.iterations에 compaction 항목으로 보고돼요. 답변이 없어서 최상위 input_tokens와 output_tokens는 0이니 사용량은 iterations를 합산하라고 합니다. 이후 요청에 블록을 실어 보내는 데에는 컴팩션 비용이 추가되지 않는다고 해요.

함께 읽기컨텍스트 엔지니어링 – AI가 읽는 양을 설계하는 방법컨텍스트 엔지니어링의 정의와 프롬프트 엔지니어링과의 차이, 공식 글에 나온 기법 4가지, CLAUDE.md 200줄 권고를 정리하고 미니…

언제 요약할지는 앱이 정한다

컴팩션 온디맨드에서는 시점을 정하는 쪽이 앱입니다. 완료된 턴 뒤라면 언제든 요약 요청을 보낼 수 있다고 문서가 적어요. 문서의 반복문 예제는 마지막 응답의 input_tokens와 output_tokens를 더해 다음 요청의 크기를 가늠하고, 그 합이 직접 정한 한도를 넘으면 요약을 요청합니다. 프롬프트 캐싱을 쓰면 input_tokens가 마지막 캐시 지점 뒤의 토큰만 세므로 cache_read_input_tokens와 cache_creation_input_tokens도 더하라고 하고, 토큰 세기(token counting) 엔드포인트에 같은 메시지를 보내는 방법도 안내합니다. 한도는 모델의 컨텍스트 창보다 낮게 잡으라고 해요. 예제의 2,500토큰은 짧은 대화에서도 요약이 일어나게 일부러 낮춘 값이라고 문서가 밝힙니다.

SDK의 도구 실행기(tool runner)는 요약 요청을 대신 보내 주는 메서드를 갖고 있습니다. Python에서는 compact_before_next_turn()을 부르면 현재 턴과 도구 호출이 끝난 뒤 실행기가 요약을 요청하고 기록을 바꿔요. 실행기는 베타 헤더를 자동으로 붙이지 않아서 compact-2026-09-04 베타로 직접 만들어야 합니다.

요약 내용이 마음에 들지 않으면 instructions에 16,384자까지 직접 쓴 요약 지시문을 넣을 수 있고, 이 지시문은 기본 프롬프트를 통째로 대체해요. 무엇을 남길지 적고 도구를 호출하지 말라고 쓰라는 안내가 붙습니다.

컴팩션의 세 가지 방식과 온디맨드가 다른 점

개요 문서의 비교표는 요약을 맡기는 방식을 셋으로 나눕니다. 문서는 쓸 수 있는 곳에서는 온디맨드를 쓰라고 권해요.

컴팩션 개요 문서의 Choose how to compact 표. 컴팩션 온디맨드, 토큰 임계값 컴팩션, 직접 만든 요약기를 시점, 작성할 코드, 최근 턴 유지 같은 항목으로 비교한다
Claude API 공식 문서 화면, 2026-10-11 확인 (Choose how to compact)

컴팩션 온디맨드, 토큰 임계값 컴팩션, 직접 만든 요약기 세 방식이 요약 시점을 누가 정하는지 비교한 도식
요약을 맡기는 세 가지 방식 (공식 개요의 비교표 일부)

방식 시점을 정하는 쪽 쓰는 코드
컴팩션 온디맨드 요청을 보내는 앱 요약을 요청하고 맞바꾸는 반복문
토큰 임계값 컴팩션 입력 토큰이 정해 둔 값에 닿을 때 API 일반 요청에 매개변수 하나
직접 만든 요약기 앱 요약 호출, 프롬프트, 기록 다시 쓰기

표는 개요 문서의 비교표에서 몇 행만 옮겼어요. 온디맨드는 반복문을 직접 짜야 하는 대신 백그라운드 실행을 지원해요. 토큰 임계값 쪽도 최근 턴 유지는 가능하지만 일시 정지 후 다시 넣는 방식이고, 백그라운드 실행은 없으며, 요청이 임계값에 닿으면 그 요청 안에서 요약이 돕니다. 온디맨드는 시점을 직접 통제해야 하거나, 요약을 쓰는 동안 멈출 수 없거나, 최근 턴을 남겨야 하는 앱에 맞다고 문서가 적습니다.

함께 읽기AI 기술 설명 – 캐시 진단(Cache Diagnostics) – 프롬프트 캐싱이 빗나간 이유를 알려 주는 Claude API 기능캐시 진단은 이전 응답 id를 넘기면 프롬프트 캐싱이 빗나간 지점을 model, system, tools, messages로 알려 줍니다…

최근 턴 원문 유지와 백그라운드 요약 옵션

기본 반복문은 대화 전체를 요약합니다. 최근 턴을 유지하는 문서는 마지막 몇 턴을 원문 그대로 블록 뒤에 두는 방법을 설명해요. 남길 턴을 정하는 매개변수는 없고, 기록에서 자르는 지점을 앱이 고릅니다. 지점 앞 메시지만 요약 요청에 넣고, 지점 뒤 메시지는 블록 뒤에 그대로 붙입니다. 남긴 턴이 원래 길이로 돌아가니 많이 남길수록 요약이 비우는 공간은 줄어들어요. 도구 호출과 그 결과는 같은 쪽에 두라고 합니다.

백그라운드 문서는 요약을 쓰는 동안 대화를 멈추지 않는 방법입니다. 요약 요청을 보내고 메시지 개수를 기록한 뒤 대화는 전체 기록으로 계속하고, 블록이 도착하면 보낸 개수만큼 앞에서 지우고 그 자리에 블록을 둡니다. 그 사이 늘어난 메시지는 블록 뒤에 남아요.

메시지 1에서 5로 요약 요청을 보내는 동안 6에서 8이 쌓이고, 블록이 도착하면 1에서 5를 대신해 블록 뒤에 6에서 8이 이어지는 공식 타임라인
백그라운드 컴팩션의 타임라인 (platform.claude.com 공식 도식)

요약 요청에 앞부분만 넣고, 남길 뒷부분을 블록 뒤에 원문으로 붙입니다. 마지막 몇 턴이 Claude에게 정확히 가야 할 때 씁니다.

요약을 기다리는 동안 대화를 이어 갑니다. 요청이 두 개 열려 있고 둘 다 속도 제한에 잡히므로, 늘어나는 턴을 받을 여유가 컨텍스트 창에 있을 때 시작하라고 문서가 안내해요.

둘은 함께 쓸 수 있다고 문서가 적습니다. 보존된 생각(preserved thinking)을 지원하는 모델에서 생각 블록을 돌려보내는 앱은 남긴 턴의 생각이 유효하게 남는 조건이 따로 있어서, 문서의 별도 항목을 확인해야 해요.

요약이 오지 않을 때와 사라지는 내용

요약 호출이 텍스트로 정상 종료하고 도구 호출이 없을 때만 요약이 만들어집니다. 그렇지 않아도 응답은 200에 content가 비어 있어서, 블록을 찾기 전에 stop_reason부터 확인하라고 문서가 강조해요. 이런 경우에도 요약 없이 이어 가다가 나중에 다시 요약을 요청하면 된다고 합니다.

컴팩션 온디맨드에서 요약이 오지 않을 때 stop_reason 다섯 가지의 원인과 조치를 문서의 표에서 옮긴 카드
문서의 표를 HTML 카드로 옮긴 것 (platform.claude.com)

더 눈여겨볼 부분은 제한 항목입니다. 문서는 요약된 메시지 안의 이미지, 문서, container_upload 블록, 가져온 URL이 블록으로 바뀌면 사라진다고 적어요. 이후 턴에 필요하면 다시 적거나 다시 올리라고 합니다. 요약된 범위 안의 role: "system" 메시지도 함께 요약돼서 그 텍스트 지시는 더 이상 적용되지 않고, 메시지별로 정한 노력(effort) 수준도 이어지지 않아요. 지시나 수준이 여전히 필요하면 다음 새 user 턴 바로 뒤에 role: "system" 메시지로 다시 쓰라고 안내합니다.

컴팩션 온디맨드 문서의 Limits and interactions with other features 절. 컨텍스트 편집과 동시 사용 불가, 프롬프트 캐싱, 시스템 메시지, 작업 예산, 요약이 담지 못하는 내용 항목이 보인다
Claude API 공식 문서 화면, 2026-10-11 확인 (Limits and interactions with other features)

같은 절의 나머지 항목은 이렇습니다. compaction과 context_management는 한 요청에 함께 보낼 수 없고, 토큰 세기 엔드포인트는 compaction 매개변수를 무시하며, 블록에 붙인 cache_control은 요약 뒤에 캐시 지점을 만들어요. 작업 예산(task budget)의 remaining 값은 compaction이나 블록이 있는 요청에 보내면 400 오류가 납니다.

베타 상태와 지원 범위

문서 머리의 표시는 상태가 베타이고, 지원 모델은 Fable 5와 5.1, Mythos 5와 5.1 및 Preview, Opus 4.6·4.7·4.8·5·5.5, Sonnet 4.6·5·5.5, Haiku 5.5라고 적습니다. 지원 플랫폼은 Claude API, AWS 위 Claude 플랫폼, Google Cloud, Microsoft Foundry가 모두 베타예요. 모델이 지원하는지는 베타 헤더를 붙인 Models API에서 capabilities.compaction으로 확인할 수 있다고 합니다.

이 글에서는 문서의 코드와 응답 예시를 직접 실행하지 않았습니다. 설명한 동작은 모두 공식 문서가 적은 내용이고, 카드 속 JSON도 문서의 예시에서 형식을 옮긴 것입니다. 베타 기능이라 헤더와 매개변수가 바뀔 수 있으니 쓰기 전에 원문을 확인하세요.

참고한 공식 문서

본문은 컴팩션 개요, 컴팩션 온디맨드, 최근 턴 유지, 백그라운드 컴팩션, 릴리스 노트를 읽고 정리했습니다. 기능이 바뀔 수 있으니 쓰기 전에 원문을 확인하세요.

컴팩션 온디맨드 자주 묻는 질문

컴팩션 온디맨드는 어떻게 쓰나요?

compact-2026-09-04 베타 헤더와 함께 대화 전체에 compaction 매개변수(type은 summarize)를 붙여 보내면, 답변 대신 compaction 블록 하나가 돌아옵니다. 이후 요청에서는 그 블록을 messages 맨 앞에 두고 요약된 메시지는 지웁니다.

최근 대화는 요약하지 않고 그대로 둘 수 있나요?

문서는 가능하다고 합니다. 남길 턴을 요약 요청에서 빼고 블록 뒤에 원문 그대로 붙이면 돼요. 어느 턴까지 남길지 정하는 매개변수는 없고 자르는 지점을 앱이 직접 고릅니다.

컴팩션 후에도 이미지나 문서가 남나요?

남지 않습니다. 문서의 제한 항목은 요약된 메시지 안의 이미지, 문서, container_upload 블록, 가져온 URL이 블록으로 바뀌면 사라지니 이후 턴에 필요하면 다시 적거나 올리라고 안내합니다.

글에 나온 규칙 파일과 에이전트는 Claude Code에서 쓰는 방식이고, 공식 안내는 Claude Code 공식 문서에 있습니다.

이 글은 직접 만들고 운영하며 남긴 기록입니다. 적힌 수치는 작성 시점의 제 계정 기준이며, 같은 결과나 수익을 보장하지 않습니다.

Similar Posts

One Comment

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다