iBetter Books
수정

긴 대화 요약과 분할 전략

윈도우가 차오를 때 무엇을 버리고 무엇을 지킬지가 이 절의 핵심이다. 선택지는 크게 세 가지다. 요약(summarization/compaction), 잘라내기(truncation), 검색 기반 회상(retrieval)이다. 시험은 "대화가 길어져 컨텍스트가 한계에 도달했다. 무엇을 해야 하는가"를 의사결정 문제로 내고, 각 전략의 트레이드오프를 알아야 풀 수 있게 설계한다. 세 전략은 배타적이지 않으며 실무에서는 조합해서 쓴다.

첫째, 요약은 오래된 메시지들을 모델에게 압축 요약시켜 원본 대신 짧은 요약본으로 교체하는 방식이다. 맥락의 의미를 보존하면서 토큰을 크게 줄일 수 있어 긴 멀티턴 작업에 적합하다. 대가는 정보 손실이다. 요약이 핵심 사실이나 정확한 수치를 누락하면 이후 추론이 어긋난다. Claude Agent SDK와 Claude Code는 이 요약을 자동화한 compaction(컴팩션) 메커니즘을 제공한다. Claude Code에서는 /compact 명령으로 수동 압축하거나, 윈도우가 임계에 가까워지면 자동 컴팩션이 동작해 대화를 요약하고 작업을 이어간다. API의 usage 보고에는 이 압축 단계가 별도 iteration(컴팩션 유형)으로 집계되어, 요약이 소비한 토큰까지 추적할 수 있다. 시험에서 "SDK가 긴 대화를 어떻게 알아서 처리하는가"의 정답은 대개 이 compaction이다.

둘째, 잘라내기는 가장 단순하다. 오래된 메시지를 통째로 삭제해 슬라이딩 윈도우처럼 최근 N개 턴만 유지한다. 구현이 쉽고 비용이 거의 들지 않으며 지연도 없다. 그러나 잘려나간 정보는 영구히 사라진다. 초반에 합의한 제약이나 사용자 선호가 잘리면 에이전트가 같은 실수를 반복한다. 잘라내기는 맥락이 최근성에 강하게 의존하는 짧은 대화, 또는 초반 정보가 중요하지 않은 작업에만 안전하다. 함정 포인트는 도구 호출 쌍이다. assistant의 tool_use 블록과 그에 대응하는 user의 tool_result는 짝을 이뤄야 하므로, 한쪽만 잘리면 API가 거부한다. 잘라낼 때는 반드시 쌍 단위로 다뤄야 한다.

셋째, 검색 기반 회상은 전체 이력을 외부 저장소(예: 벡터 DB)에 보관하고, 현재 질의에 관련된 조각만 골라 컨텍스트에 다시 넣는 방식이다. 윈도우에는 항상 소량만 올라가므로 사실상 무한히 긴 이력을 다룰 수 있고, 비용도 일정하게 유지된다. 대가는 시스템 복잡도다. 임베딩·인덱싱·검색 파이프라인을 운영해야 하고, 검색이 엉뚱한 조각을 가져오면 모델이 잘못된 맥락으로 답한다. 대량의 문서나 장기 기억이 필요한 에이전트에 적합하다.

의사결정 트리는 다음과 같이 정리할 수 있다. 대화가 비교적 짧고 최근 맥락만 중요하면 잘라내기로 충분하다. 멀티턴 작업이 길어 의미는 지켜야 하지만 전체 원문은 필요 없으면 요약(compaction)이 1순위다. 이력이 방대하거나 영구 지식·장기 기억을 정밀하게 되살려야 하면 검색 기반 회상을 도입한다. 실무 정석은 최근 턴은 원문 유지, 그 이전은 요약, 더 오래된 사실은 검색으로 회상하는 계층 조합이다. 시험은 "검색이 필요 없는 짧은 작업에 벡터 DB를 도입" 같은 과잉 설계나, "초반 제약이 중요한데 무조건 잘라내기"처럼 정보 손실을 무시한 선택지를 오답으로 배치한다.

정리

  • 요약(compaction)은 의미를 보존하며 토큰을 줄이지만 정보 손실 위험이 있다. SDK·Claude Code의 /compact와 자동 컴팩션이 표준 구현이다.
  • 잘라내기는 가장 싸고 빠르지만 잘린 정보는 영구 소실된다. tool_use와 tool_result는 반드시 쌍 단위로 잘라야 한다.
  • 검색 기반 회상은 사실상 무한 이력을 다루고 비용이 일정하지만 검색 파이프라인의 복잡도와 오검색 위험을 감수해야 한다.
  • 전략은 배타적이지 않다. 최근 원문 + 중간 요약 + 장기 검색의 계층 조합이 실무 정석이다.
  • 시험은 과잉 설계(짧은 작업에 벡터 DB)와 정보 손실 무시(중요 초반 정보 잘라내기)를 오답으로 낸다.