이제 요약이나 핸드오프는 안 합니다. 몇 주째 컨텍스트 페이징으로 긴 세션을 돌리고 있어요
I no longer compact or handoff. Context paging has been running my long sessions for weeks
핵심 요약
컨텍스트 창을 디스크 기반의 페이징 방식으로 관리하여 정보 손실 없이 긴 세션을 유지하는 확장 프로그램을 소개합니다.
- 컨텍스트 페이징 — 요약 대신 롤링 윈도우 방식을 사용하여 전체 기록을 보존함
- 손실 없는 관리 — 요약이나 압축 없이 필요할 때 과거 기록을 불러와 사용함
- 프롬프트 캐싱 — 대규모 블록 단위 페이징으로 캐시 효율성을 최적화함
- 도구 활용 — 모델이 필요 시 과거 기록을 검색하고 로드할 수 있는 도구 제공
다들 안녕, 내가 만든 pi-context-paging이라는 확장 프로그램을 공유하려고 글 써.
https://www.npmjs.com/package/@rochecompaan/pi-context-paging
컨텍스트가 꽉 찼을 때 세션을 요약해서 압축하는 대신, 전체 기록 위에서 컨텍스트 윈도우를 굴리는 방식으로 작동해. 토큰 예산(기본값 128k)을 넘어가면 가장 오래된 대화부터 윈도우 밖으로 밀려나. 디스크에 있는 세션 파일은 절대 건드리지 않아. 모델한테는 짧은 페이징 알림이랑, 필요할 때 옛날 기록을 검색하고 불러올 수 있는 복구 도구 몇 개를 쥐여주는 식이지.
이거 쓰고 나서 작업 흐름이 훨씬 부드러워졌어. 긴 작업 하다가 갑자기 요약돼서 빡칠 일도 없고, 중요한 디테일 다 날려 먹는 핸드오프(handoff)를 일일이 작성할 필요도 없어. 벌써 몇 주째 아주 안정적으로 쓰고 있고, 특히 사람 없이 돌아가는 장기 작업용 에이전트한테는 진짜 최고야.
데이터 손실도 전혀 없어. 요약이나 압축 같은 거 안 하거든. 최근 윈도우는 저장된 그대로 전송되고, 더 오래된 내용은 원본 텍스트 그대로 다시 불러올 수 있어.
Tony Mason이 쓴 논문이 있는데 이거랑 맥락이 비슷해: The Missing Memory Hierarchy: Demand Paging for LLM Context Windows (https://arxiv.org/abs/2603.09023). 컨텍스트 윈도우를 RAM처럼, 전체 기록을 디스크처럼 취급해서 필요할 때마다 데이터를 페이징하는 방식이지. 내가 만든 확장 프로그램은 그 아이디어를 Pi에서 쓸 수 있게 구현한 실전 버전이라고 보면 돼.
"프롬프트 캐싱은 어떡함?"이라고 물어볼 놈들 많을 것 같아서 미리 설명할게:
-
메시지를 하나씩 지우는 방식이 아니야. 그랬다간 요청할 때마다 프롬프트 시작 부분이 바뀌어서 캐시가 계속 깨질 테니까.
-
윈도우가 예산을 꽉 채우면 한 번에 큰 덩어리를 페이징 아웃해서 기본 80k 정도로 줄여버려. 한 번 잘라내고 나면 그다음부터는 여러 턴 동안 프롬프트 시작 부분이 똑같이 유지되니까, 다음번 잘라내기 전까지는 캐시 히트가 정상적으로 터져.
-
잘라낼 때마다 캐시를 한 번 다시 써야 하긴 해. 근데 실제로 해보면 그럴 일 별로 없고, 캐시 효율 좀 손해 보는 대신 연속성을 얻는 게 훨씬 이득이야. 요약 단계도 없고, 다시 설명할 필요도 없고, 에이전트가 "우리 뭐 하고 있었지?" 하는 멍청한 상황도 안 생겨.
내 세션에서 나온 실제 수치들이야 (Opus 5.5, Fable 5.1, GPT 6.1 사용했고, 압축은 단 한 번도 안 일어남):



