
장시간 에이전트가 스스로 작성하는 요약을 강화학습으로 단련하는 CompactionRL
요약
장시간 실행되는 에이전트의 컨텍스트 압축 성능을 강화학습으로 최적화하는 CompactionRL 논문을 소개합니다. 에이전트가 작성하는 요약을 태스크 성공과 직결된 정책으로 취급하여, 정보 누락 없이 효율적인 컨텍스트 관리가 가능하도록 학습합니다.
핵심 포인트
- 컨텍스트 압축(Compaction)을 에이전트의 핵심 행동 정책으로 정의
- 최종 태스크 성패를 보상으로 사용하여 '좋은 요약'을 학습하는 RL 방식
- 압축으로 인해 분절된 궤적을 처리하기 위한 토큰 단위 손실 정규화 도입
- GAE 보정을 통해 압축 세그먼트 간의 보상 편향 문제 해결
코딩 에이전트를 장시간 실행하다 보면, 어느 순간부터 동작이 둔해지는 경우가 있다. 원인을 추적해 보면, 대개 컨텍스트 윈도우(Context Window)가 한계에 도달하여 그때까지의 작업 로그를 자동으로 요약하여 "압축(fold)"한 직후인 경우가 많다. 여기서 소박한 의문이 생긴다. 그 요약을 작성한 것은 누구이며, 결과물은 좋았는가.
7월에 공개된 논문 「CompactionRL: Reinforcement Learning with Context Compaction for Long-Horizon Agents」(arXiv:2607.05378, GLM을 개발하는 팀에 의한)는 이 질문을 정면으로 다루고 있다. 주장은 심플하다. 에이전트가 컨텍스트를 압축할 때 작성하는 요약은, 단순히 동작만 하면 되는 고정된 기능이 아니라, 태스크의 성공을 향해 훈련할 수 있는 정책(Policy)이라는 것이다.
장시간 태스크에서 컨텍스트가 넘치는 것을 방지하는 메커니즘은 이미 실무에 도입되어 있다. Anthropic의 compaction 기능은 입력 토큰이 임계값(기본 15만, 최소 5만)에 도달하면 대화를 자동으로 요약하고, 요약 블록으로 교체하여 다음 내용을 생성한다. 활성화는 Messages API에 플래그를 추가하는 것만으로 가능하다.
response = client.beta.messages.create(
betas=["compact-2026-01-12"],
model="claude-opus-5",
...
(출처: Anthropic Compaction docs)
편리하지만, 여기서 생성되는 요약은 베이스 모델(Base Model)의 순수한 요약 능력에 전적으로 맡겨져 있다. 그 요약이 태스크에 효과적이었는지 여부는 그 자리에서 전혀 측정되지 않는다. 만약 "이 함수는 스레드 세이프(Thread-safe)하지 않다"와 같은 제약 사항이나 버그 재현 절차를 요약에서 누락했다면, 이후의 추론은 조용히 저하된다. 게다가 발화는 리액티브(Reactive)하여, 컨텍스트가 이미 오래된 정보로 포화된 후에야 서둘러 압축한다. CompactionRL이 파고드는 지점은 바로 이 공백이다.
CompactionRL의 발상은 압축을 에이전트의 "행동의 일부"로 취급하는 데 있다. 남은 컨텍스트가 일정 여백 T_comp를 하회하면 (C - |h_t| < T_comp), 요약 지시를 삽입하여 모델 스스로 요약을 작성하게 하고, 시스템 프롬프트와 요약, 그리고 직전 k단계(기본값 k=2)만으로 컨텍스트를 재구성하여 계속 진행한다. 여기까지는 일반적인 compaction과 다르지 않다. 차이점은 그 요약 토큰에도 보상 기울기(Reward Gradient)를 흘려보내, 최종적인 태스크의 성패로부터 역산하여 "좋은 요약이란 무엇인가"를 학습시킨다는 점이다.
까다로운 점은, 이것이 소박한 그룹 RL(GRPO와 같이 여러 롤아웃(Rollout)을 묶어서 상대 비교하는 방식)의 장부를 망가뜨린다는 데 있다. 본래는 하나의 롤아웃을 1개 샘플로 취급하고 싶지만, 도중에 압축이 일어나면 컨텍스트가 재구성되어 하나의 궤적(Trajectory)이 여러 세그먼트로 분할된다. 압축 횟수가 많은 궤적일수록 세그먼트 수가 늘어나 학습에서 과도하게 가중치가 부여될 수 있다.
저자들의 대처는 두 단계로 이루어진다. 하나는 토큰 단위의 손실 정규화(Loss Normalization)로, 샘플이나 세그먼트 단위가 아니라 생성된 토큰의 총수로 나눔으로써 압축 횟수의 편향을 상쇄한다. 다른 하나는 궤적 위치를 고려한 GAE 보정으로, 각 세그먼트의 국소적 어드밴티지(Local Advantage)에 (γλ)^(N_>s)를 곱하여, 해당 세그먼트 이후에 생성된 토큰 수 N_>s에 따라 종단 보상(Terminal Reward)을 감쇠시킨다. 흩어진 로그를 원래의 하나의 태스크로서 올바르게 다시 꿰매는 이미지에 가깝다. 절단면마다 보상을 그대로 다시 배치하는 소박한 방식이라면, 아직 결과를 알지 못하는 초반의 행동까지 과대평가하게 된다.
동일한 베이스 모델에 CompactionRL을 적용하기 전후를 비교하면 그 효과가 보인다.
| 모델 | 벤치마크 | Base | CompactionRL |
|---|---|---|---|
| GLM-4.5-Air (106B) | SWE-bench Verified | 59.8% | 66.8% |
| ... |
30B 규모의 소형 모델이 터미널 계열 에이전트 태스크에서 최대 +6.8포인트 상승한 것은 시사하는 바가 크다. 컨텍스트가 협소한 모델일수록 무엇을 남기고 무엇을 버릴지의 숙련도가 그대로 성패를 좌우한다는 의미일 것이다. 논문에 따르면, 이 기법은 플래그십 모델인 750B급 GLM-5.2의 훈련 파이프라인에도 포함되었다고 한다. 연구를 위한 소규모 실험이 아니라, 양산 모델에 탑재된 기술이라는 점은 유념해 둘 필요가 있다.
솔직히 말하자면, CompactionRL 자체의 코드는 공개된 것을 확인할 수 없다(구현은 기존의 오픈소스 RL 프레임워크인 slime 위에서 이루어졌다고만 기록되어 있다). 당장 손쉽게 재현할 수 있는 종류의 것은 아니다.
그럼에도 실무에 주는 시사점은 명확하다. 자체 에이전트에서 실행되는 '요약 프롬프트 (Summary Prompt)'를 단순히 돌아가기만 하면 되는 고정된 부품으로 방치하는 것은 아까운 일이다. 요약은 정책 (Policy)이며, 평가와 최적화가 가능한 대상이다. 오늘부터 할 수 있는 첫걸음은 압축 전후의 태스크 성공률을 측정하는 계측기를 도입하는 것이라고 생각한다. 요약이 실제로 무엇을 누락시키고 있는지를 수치로 확인해야 비로소 그것을 수정하기 위한 논의를 시작할 수 있다. 임계값 (Threshold)을 조정하여 트리거 타이밍을 조절하는 것보다, 이쪽이 훨씬 본질에 가깝다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기