컨텍스트 압축(Compaction) 중 사라지는 사용자 제약: Lost in Context Compaction
Lost in Context Compaction: When LLM Systems Drop Side Constraints
TL;DR Highlight
컨텍스트 압축 후 에이전트가 "삭제 금지" 제약을 잊어 30%가 이메일을 삭제했다
Who Should Read
긴 세션 에이전트에 컨텍스트 요약(compaction)을 붙여 쓰면서 사용자 지시가 유지되는지 걱정하는 백엔드 개발자
Core Mechanics
- 압축하면 사용자 제약이 조용히 사라진다
- 사용자가 "내가 말할 때까지 실행하지 마" 같은 지시(Side Constraint, SC)를 해도 요약에서 빠질 수 있다.
- 요약은 목표·진행 상태·다음 단계 위주라서 이런 부가 지시가 밀린다.
- 이메일 에이전트가 압축 뒤 멋대로 삭제했다
- 압축 전에는 삭제가 0/100 세션이었다.
- 압축 후에는 30/100 세션에서 승인 없이 삭제했고, 그중 28건은 요약에서 제약이 빠진 경우였다.
- 요약기 대부분이 제약을 거의 못 살린다
- 평가한 요약기가 주입된 제약을 평균 17%만 유지했다.
- Recent-5와 LLMLingua-2는 주입 SC 보존율이 0%였다.
- 프롬프트 문구나 반복으로는 한계가 있다
- Strict나 Direct로 쓰면 보존이 조금 늘지만, 둘을 합쳐도 추가 이득은 평균 1.3%뿐이다.
- 같은 제약을 여러 번 반복해도 효과는 앞쪽에 몰리고 30번쯤에서 수렴한다.
- 제약이 최근 턴에 있을수록 살아남는다
- LLM 요약기는 제약이 컨텍스트 아래쪽에 있을수록 더 잘 유지했다.
- 압축 전 컨텍스트가 짧을수록(10K) 보존율이 높다.
Evidence
- 인메일 실험에서 압축 후 삭제가 30/100
- 압축 전은 0/100이었다(gpt-oss-120b, 100K 토큰에서 압축).
- 압축 후 첫 사용자 턴에 제약을 다시 말해주면 13/100으로 줄었다.
- 주입 SC 보존율은 평균 17%
- gpt-oss(Pi 프롬프트)의 Hermes Agent 보존율은 36.3%였다.
- WildChat에서는 gpt-oss(Pi)가 0.0%였다.
- 자연 발생 SC도 최대 28.6%만 보존
- SWE-Natural(GitHub 이슈 제약 126개)에서 gpt-oss(Pi)가 28.6%로 최고였다.
- 추출기가 보존율과 준수율을 크게 올렸다
- 보존율은 WildChat 90.3%, Hermes Agent 93.7%, OpenResearcher 95.1%였다.
- 준수율은 93.4~96.3%로 압축만 했을 때보다 39.5~42.6%p 높았고, 상한과 2.2%p 이내였다.
- SC 전용 프롬프트는 부분 효과만 있었다
- WildChat에서 gpt-oss는 1.3%에서 24.8%로, Qwen3는 3.3%에서 37.6%로 올랐다.
- 추출기의 90.3%에는 여전히 52.7%p 못 미친다.
How to Apply
- 압축 프롬프트에 제약 보존 문장 추가하기
- 지금 쓰는 요약 프롬프트 끝에 "사용자가 준 세션 단위 제약을 조건까지 그대로 명시하라"를 붙인다.
- 논문에서 보존율이 오르지만 40% 미만이라 임시 방편으로만 쓴다.
- 압축 직후 제약을 다시 붙여 넣기
- 압축된 요약 뒤나 첫 사용자 턴에 "내가 확인하기 전엔 삭제 금지" 같은 핵심 제약을 다시 넣는다.
- 인메일 실험에서 삭제가 30%에서 13%로 줄었다.
- 제약 레지스트리(registry)를 별도로 운영하기
- 매 사용자 턴마다 작은 LLM으로 지속 지시를 JSON으로 뽑아 목록에 쌓는다.
- 압축이 일어날 때마다 요약 뒤에 이 목록을 붙인다.
- 삭제·전송 같은 위험 도구에는 코드 레벨 승인 게이트 두기
- 실험의 delete_email은 별도 승인 없이 실행돼서 에이전트의 판단만 막고 있었다.
- 파괴적 도구는 호출 전에 사용자 확인 단계를 코드로 강제한다.
Try It
# Claude나 ChatGPT에 붙여넣기. 논문 방법(SC 추출기)의 간이 버전
당신은 대화에서 '세션 지속 제약'만 뽑는 추출기입니다.
사용자 메시지가 이후 모든 턴에도 적용될 행동 지시나 선호를 담고 있으면 추출하세요.
현재 작업에만 해당하는 지시, 일회성 수정, 서식 요청, 인사말, 배경 사실은 추출하지 마세요.
대부분의 턴에는 제약이 없으니 기본 출력은 빈 목록입니다.
관련 없는 질문이 몇 턴 뒤에 와도 여전히 적용될 때만 추출하세요.
이미 레지스트리에 있는 제약과 중복되거나 말만 바뀐 것은 추가하지 마세요.
[기존 레지스트리]
{{기존 제약 목록}}
[직전 어시스턴트 메시지 (대명사 해석용)]
{{직전 응답}}
[현재 사용자 메시지]
{{사용자 메시지}}
JSON으로만 답하세요: {"constraints":[{"text":"한 문장 제약","evidence":"사용자 메시지 중 근거 구절"}]}
이어서 해 볼 것: 에이전트 요약 뒤에 이 레지스트리를 붙여서 압축 전후 행동이 같은지 비교해 보세요.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓
Related Resources
Original Abstract (Expand)
When the context window is under pressure, LLM systems compact prior context to continue ongoing tasks. We study Side Constraints (SCs), user-issued instructions such as "do not delete any emails until I confirm," that constrain an LLM's behavior across subsequent turns but can be silently dropped during compaction. In an inbox experiment, an agent deleted emails without approval in 30/100 sessions after compaction, compared with none before compaction. To systematically evaluate SC preservation, we introduce CONPACT, an evaluation suite measuring semantic retention and downstream compliance across three scenarios: multi-turn chat, multi-turn tool use, and long-horizon research. The evaluated compactors retain only 17% of injected SCs on average. Loss occurs across compactors and settings, with retention varying by compactor, context length, SC framing, and injection location. We propose an SC extractor that maintains constraints separately from the task summary and appends them to the compacted context, achieving over 90% retention across all three scenarios without modifying the compactor or LLM. Code and data are available at https://github.com/ZhiqiEliWang/compaction-integrity.