Billion-Context: 5배 토큰 압축으로 100K 윈도우 에이전트가 월 단위 세션을 처리하는 방법
요약
Billion-context는 에이전트 세션의 컨텍스트 윈도우 한계를 해결하는 미들웨어 플러그인입니다. 도구 호출 출력을 압축하고, 실행을 격리하며(sandbox), 아카이브된 히스토리를 관리하여 월 단위 장기 워크플로우를 100K 윈도우에서 처리할 수 있게 합니다. 이는 비용 증가나 컨텍스트 손실 없이 에이전트의 지속성을 확보하는 혁신적인 방법입니다.
핵심 포인트
- 도구 출력을 압축하고 노이즈를 제거하는 미들웨어 레이어입니다.
- 샌드박스 후크와 콘텐츠 유형별 맞춤형 압축 전략을 사용합니다.
- 활성 윈도우의 토큰 예산을 강제하여 세션 지속성을 확보합니다.
프로덕션 에이전트 세션은 컨텍스트 윈도우가 가득 차면 심각한 한계에 부딪힙니다. 히스토리를 잘라내어 연속성을 잃거나, 백만 토큰 규모의 모델로 업그레이드하여 비용을 10배 더 지불하거나, 아니면 세션을 재시작하여 다일(multi-day) 워크플로우를 망가뜨려야 합니다. Billion-context는 토큰 사용량을 5배 줄여 월 단위 세션도 100K 윈도우에 담아낼 수 있게 하는 압축 플러그인입니다.
이 프로젝트는 모든 장기 실행 에이전트 배포에서 발생하는 비용 및 윈도우 크기 병목 현상을 해결했기 때문에 GitHub에서 트렌딩(TypeScript 부문 랭킹 8위, 1,122개 스타)하고 있습니다. 이것은 모델 래퍼나 벡터 데이터베이스가 아닙니다. 도구 출력을 압축하고, 실행을 격리하며(sandbox), 활성 윈도우에 남길 내용과 아카이브할 내용을 관리하는 미들웨어 레이어입니다.
문제점: 컨텍스트 윈도우는 생각보다 빠르게 채워진다
에이전트 세션은 다음 세 곳에서 토큰을 축적합니다:
- 시스템 프롬프트 및 지침 (정적이지만 매 턴 반복됨)
- 도구 호출 히스토리 (각 액션과 함께 선형적으로 증가함)
- 도구 출력 (종종 장황한 JSON, 로그 또는 파일 내용)
단순히 리포지토리의 파일을 나열하는 단일 도구 호출만으로 50KB의 JSON이 반환될 수 있습니다. 코드 실행 샌드박스는 200KB의 로그를 덤프할 수도 있습니다. 20번의 턴(turn) 후, 이미 80K 토큰을 소진했고 에이전트는 겨우 시작한 단계입니다.
표준 완화 전략:
- 오래된 턴 잘라내기: 다단계 추론이 깨지고 컨텍스트를 잃습니다.
- 주기적으로 요약하기: 지연 시간(latency)을 추가하고 충실도(fidelity)를 잃게 합니다.
- 1M 토큰 모델로 업그레이드: 요청당 비용이 5~10배 더 많이 듭니다.
Billion-context는 다른 접근 방식을 취합니다. 컨텍스트 윈도우에 다시 들어가기 전에 도구 출력을 압축하고, 노이즈를 줄이기 위해 실행을 격리하며(sandbox), 압축된 히스토리를 디스크에 아카이브하여 활성 윈도우를 확장하지 않으면서 세션이 몇 달 동안 지속될 수 있도록 합니다.
아키텍처: 압축 파이프라인 및 상태 관리
이 플러그인은 에이전트 오케스트레이터와 LLM API 사이에 위치합니다. 도구 호출을 가로채고(intercepts), 출력을 처리하며, 압축된 요약을 컨텍스트에 다시 주입합니다.
핵심 구성 요소
| 구성 요소 | 역할 | 구현 방식 |
| :--- | :--- |
| 샌드박스 후크 (Sandbox Hook) | 도구 실행을 격리하고, stderr를 필터링하며, 장황한 출력을 자릅니다. | MCP 호환 후크, 98% 크기 감소 |
| ... |
흐름 다이어그램
Agent 요청
↓
컨텍스트 매니저 (토큰 예산 확인)
...
압축 전략
Billion-context는 모든 것을 동일하게 압축하지 않습니다. 콘텐츠 유형에 따라 다른 전략을 적용합니다:
- 구조화된 데이터 (JSON, XML): 스키마와 핵심 필드를 추출하고, 장황한 배열은 폐기합니다.
- 로그 및 추적 기록: 오류 라인과 요약 통계만 유지하고, 반복되는 정보 메시지는 삭제합니다.
- 코드 출력물: 함수 시그니처와 반환 값은 보존하되, 중간 단계는 자릅니다.
- 자연어: LLM을 사용하여 요약하며, 핵심 개체(entity)와 결정을 보존합니다.
이 플러그인은 정보 손실을 측정하여 압축 품질을 추적합니다. 만약 압축된 출력이 충실도 임계값(fidelity threshold, 설정 가능) 이하로 떨어지면, 전체 버전을 아카이브에 보관하고 활성 창에는 최소한의 스텁만 주입합니다.
토큰 예산 및 제거 정책
컨텍스트 매니저는 활성 창에 대한 토큰 예산을 강제합니다. 기본값은 80K 토큰이며 (100K 모델에서 다음 턴을 위해 20K를 남깁니다). 예산이 초과되면, 매니저는 가장 오래된 턴들을 제거(evict)하고 아카이브합니다.
제거는 단순한 FIFO가 아닙니다. 매니저는 각 턴을 다음 기준으로 점수화합니다:
- 최신성 (Recency): 최근 턴일수록 관련성이 높을 가능성이 있습니다.
- 참조 횟수 (Reference count): 에이전트가 여러 번 참조한 턴은 더 오래 유지됩니다.
- 압축 비율 (Compression ratio): 압축하기 쉬운 턴부터 먼저 제거합니다 (저렴하게 재구성할 수 있기 때문입니다).
이 점수화 함수는 조정 가능합니다. 디버깅 세션의 경우, 최신성에 높은 가중치를 부여할 수 있습니다. 장기간 실행되는 자동화의 경우, 참조 횟수를 우선시할 수 있습니다.
검색 (Retrieval): 에이전트가 오래된 컨텍스트가 필요할 때
에이전트가 보관된 컨텍스트(예: "3일 전의 오류 메시지는 무엇이었나요?")를 필요로 하는 질문을 할 경우, 검색 계층(retrieval layer)이 관련 턴(turns)을 가져와 활성 창(active window)에 주입합니다.
검색 옵션:
- 키워드 검색 (Keyword search): 빠르고 구조화된 쿼리에 적합하며, 임베딩 모델이 필요하지 않습니다.
- 벡터 유사도 (Vector similarity): 느리지만 의미론적(semantic) 쿼리에 더 좋으며, 임베딩 모델이 필요합니다.
- 하이브리드 (Hybrid): 키워드 필터링 후 벡터 재순위화(vector rerank).
플러그인은 특정 검색 전략을 강제하지 않습니다. 사용자가 자체 검색 백엔드(Elasticsearch, Pinecone 또는 로컬 SQLite FTS 인덱스)를 연결할 수 있도록 훅(hooks)을 노출합니다.
통합: MCP 훅 및 다중 플랫폼 지원 (Integration: MCP Hooks and Multi-Platform Support)
Billion-context는 Model Context Protocol (MCP) 훅을 통해 통합됩니다. Claude Code, OpenAI Codex, Gemini CLI, Kimi를 포함하여 17개 플랫폼을 지원합니다.
설치:
npm install -g billion-context --prefix=~/.local
구성 (Claude Code 예시):
{
"mcpServers": {
"billion-context": {
...
이 플러그인은 사이드카(sidecar) 프로세스로 실행됩니다. 에이전트 런타임(agent runtime)을 수정하거나 오케스트레이션 코드에 변경 사항을 요구하지 않습니다. MCP 클라이언트를 이 플러그인으로 지정하면, 플러그인이 도구 호출을 투명하게 가로챕니다.
성능 및 비용 영향 (Performance and Cost Impact)
30일 에이전트 세션(코딩 어시스턴트, 500개 도구 호출)을 기준으로 측정:
- 압축 전: 2.1M 토큰 소비, API 비용 $42 (GPT-4 가격 기준).
- 압축 후: 420K 토큰 소비, API 비용 $8.40.
- 압축 오버헤드: 도구 호출당 1.2초 (LLM 요약).
- 저장 공간 점유율: 보관된 JSON 18 MB (비압축).
5배 토큰 감소는 다양한 워크로드(코딩, 데이터 분석, 고객 지원)에서 일관되게 나타납니다. 압축 오버헤드는 대부분의 사용 사례에 있어 허용 가능합니다. 지연 시간(latency)이 중요한 경우, LLM 기반 요약을 비활성화하고 규칙 기반 자르기(rule-based truncation)에 의존할 수 있습니다 (더 빠르지만 품질은 낮음).
실패 모드 및 관찰 가능성 (Failure Modes and Observability)
일반적인 실패 사례 (Common Failures)
- 압축 품질 저하: LLM 요약기가 손실성(lossy) 출력을 생성하여 에이전트가 중요한 정보를 놓치게 됩니다.
- 완화 방안: 충실도 임계값(fidelity threshold)을 설정합니다. 압축 품질이 너무 낮으면 전체 출력을 유지합니다.
- 아카이브 검색 속도가 느림: 에이전트가 아카이브된 컨텍스트를 기다리며 멈춥니다.
- 완화 방안: 인덱싱된 검색 백엔드(SQLite FTS 또는 Elasticsearch)를 사용합니다.
- 토큰 예산이 너무 빠듯함: 활성 창(active window)이 중간에 가득 차서 에이전트가 요청을 완료할 수 없습니다.
- 완화 방안: 예산을 늘리거나 활성 창의 도구 개수를 줄입니다.
관측 가능성 후크 (Observability Hooks)
플러그인은 다음 항목에 대한 구조화된 로그를 방출합니다:
- 토큰 수(압축 전후)
- 제거 이벤트(어떤 턴이 아카이브되었는지)
- 검색 요청(어떤 아카이브된 턴이 가져와졌는지)
- 압축 품질 점수(턴별)
이 로그들을 관측 가능성 스택(Datadog, Grafana 또는 로컬 로그 파일)으로 파이프할 수 있습니다.
Billion-Context 사용 시점
다음과 같은 경우에 사용하세요:
- 에이전트 세션이 몇 시간 또는 며칠 동안 지속되는 경우(고객 지원, 코드 검토, 장기 실행 자동화).
- 컨텍스트 창 제한에 도달했지만 수백만 토큰 모델로 업그레이드하고 싶지 않은 경우.
- 세션 연속성을 희생하지 않으면서 토큰 비용을 줄여야 하는 경우.
- 도구 실행을 샌드박스화(sandbox)하고 장황한 출력을 필터링하려는 경우.
다음과 같은 경우에는 피하세요:
- 세션이 짧은 경우(50턴 미만). 압축 오버헤드가 그만한 가치가 없습니다.
- 실시간 지연 시간(turn당 100ms 미만)이 필요한 경우. LLM 기반 압축은 1~2초가 추가됩니다.
- 도구가 이미 최소한의 출력을 반환하는 경우. 압축이 도움이 되지 않습니다.
- 네이티브 1M+ 컨텍스트 창을 가진 모델을 사용하고 비용이 문제가 아닌 경우.
기술적 결론 (Technical Verdict)
Billion-context는 장시간 실행되는 에이전트 세션을 위한 인프라입니다. 이 시스템은 한 가지 일을 매우 잘 수행합니다: 컨텍스트를 압축하여 월 단위 워크플로우 전체를 100K 창(window)에 담을 수 있게 합니다. 5배 토큰 감소는 실제이며, 통합 방식도 깔끔하고 (MCP hooks), 제거 정책(eviction policy)은 조정 가능합니다.
단점은 지연 시간(latency)입니다. LLM 기반 압축 과정은 턴당 1~2초가 추가됩니다. 만약 에이전트 자체가 느린 경우(다단계 추론, 외부 API 호출 등)에는 이 정도는 감수할 수 있습니다. 하지만 서브-세컨드 응답이 필요한 경우에는 규칙 기반 자르기(rule-based truncation)를 사용하거나 더 큰 창에 대한 비용을 지불해야 합니다.
이 플러그인은 코딩 어시스턴트, 고객 지원 봇, 자동화 에이전트를 위해 프로덕션 환경에서 사용할 수 있습니다. 실시간 채팅이나 저지연(low-latency) 사용 사례에는 적합하지 않습니다.
소스 링크
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기