대용량 컨텍스트를 이미지로 압축해 토큰 비용 절감
대형 시스템 프롬프트와 도구 문서·오래된 대화 기록을 PNG로 렌더링해 입력 토큰을 줄이고 Fable 5에서 보존된 기능으로 평균 38% 토큰 절감을 달성한 로컬 프록시이다.
TL;DR
대용량 시스템 프롬프트와 도구 문서, 오래된 대화 기록이 모델 입력 토큰을 빠르게 소모하는 문제를 해결하기 위해 pxpipe는 밀집 텍스트 블록을 PNG 페이지로 렌더링해 요청 입력을 이미지 토큰으로 교체하는 로컬 프록시이다. 프록시는 /v1/messages를 가로채 eligible한 블록을 1928 픽셀 너비 레이아웃에 패킹해 PNG로 변환하고 각 요청에 대해 원본 대비 청구를 동시 기록해 재현 가능한 절감량을 산출한다. README 기준으로 일부 워크로드에서 엔드 투 엔드 청구가 약 59에서 70 퍼센트 낮아졌고 예제 벤치에서는 요청당 토큰이 약 38 퍼센트 줄어들었지만 이미지화는 바이트 완전성을 보장하지 않아 SHA나 고정 식별자는 텍스트로 남겨야 한다. 운영자는 모델별 옵트인과 수익성 게이트로 이미지화를 제한해 읽기 실패율과 비용 절감 사이의 트레이드오프를 조정할 수 있다.
주요 기능
- 대형 요청 본문 중 밀도가 높은 블록을 자동으로 PNG 페이지로 렌더링해 텍스트 토큰을 이미지 토큰으로 교체한다. 렌더링은 고정 폭 컬럼과 줄바꿈 표식을 포함해 모델이 읽을 수 있는 레이아웃을 만든 뒤 정적 접두사를 보존한 채 스플라이스한다. 변환 결과와 절감량은 이벤트 로그에 기록되고 대시보드에서 실시간으로 모니터링된다.
- 요청별 추정기를 사용해 변환의 수익성을 판단하고 문자 밀도가 낮은 블록은 텍스트로 통과시켜 손실을 제한한다. 수익성 판정은 샘플링 근거에 따라 조정되며 README는 N=391의 생산 트래픽 표본으로 보정했다고 적시되어 있다. 이 방식은 희박한 문장에서는 비용이 늘어나지 않도록 설계되었다.
- 모델별 허용 목록과 옵트인 플래그를 통해 읽기 품질이 낮은 모델에 대해 이미지화를 비활성화하거나 사용자가 선택적으로 적용하도록 제어한다. 기본 허용 대상은 Fable 5와 GPT 5.6이며 Opus 4.8과 일부 GPT 경로는 옵트인이 요구된다. 운영 중 실측된 읽기 실패율에 기반해 이 정책이 적용되어 있다.
- 라이브러리 사용법을 통해 프록시 없이도 renderTextToImages와 transformAnthropicMessages를 호출해 변환을 통합할 수 있다. 이 모드는 Pure JavaScript 런타임에서 동작하며 빌드 타임에만 @napi-rs/canvas가 필요하다. 개발자는 API를 통해 블록 고정, 복구 가능한 원본 반환 같은 옵션을 지정할 수 있다.
어떻게 동작하는가
프록시는 /v1/messages 엔드포인트를 가로채 eligible한 대용량 입력 블록을 PNG 페이지로 변환한 뒤 캐시 친화적으로 원래 바디에 스플라이스해 전달한다. 변환 시 1928×1928 해상도와 페이지당 문자 수를 기준으로 비용과 문자밀도를 산정하며 문서에는 1928×1928 이미지가 약 4,761 vision 토큰에 해당하고 한 페이지에 약 92,000자를 담는다고 적혀 있다. 각 요청에 대해 원본 비압축 바디에 대한 count_tokens 조사와 실제 청구값을 같은 행의 이벤트 로그에 기록해 절감량을 재현 가능하게 측정한다.
해결 문제
대규모 시스템 프롬프트와 장문의 도구 문서 및 오래된 대화 기록이 모델 입력 토큰을 빠르게 소모해 비용과 컨텍스트 한계를 야기하는 문제를 해결한다. 텍스트를 이미지로 묶어 단위당 더 많은 문자를 전달함으로써 요청당 청구 토큰을 줄이고 엔드 투 엔드 청구액을 낮춘다. 다만 이미지화는 손실적 처리를 수반하므로 정확한 바이트 보존이 필요한 식별자나 해시는 텍스트로 남겨야 한다.
지금 주목받는 이유
토큰 비용과 컨텍스트 한계가 실제 운영비에 직접 영향을 주는 환경에서 입력 압축으로 비용 절감을 실현하는 접근이 주목받고 있다. README에 재현 가능한 벤치마크와 이벤트 로그를 통한 계산 근거가 포함되어 있어 실무 적용 가능성이 확인되는 점이 관심을 끌고 있다. 또한 프록시와 라이브러리 두 경로의 제공으로 기존 에코시스템에 빠르게 통합할 수 있는 점이 인기 요인으로 작용했다.
차별점
- 엔드 투 엔드 청구 기준으로 절감량을 측정해 입력 절감만을 따로 떼어내지 않고 전체 요청 청구를 분모로 사용한다. 각 요청에 대해 원본과 변환된 바디를 병렬로 카운팅하고 청구 블록을 동일한 이벤트 행에 기록해 재현 가능한 계산을 보장한다. 이 방식은 다른 툴들이 종종 입력만 따로 측정해 과대평가하는 문제를 회피한다.
- 요청 단위 수익성 게이트와 모델 허용 목록을 결합해 손실 위험과 비용 절감의 균형을 맞춘다. 문자 밀도가 낮을 때는 텍스트 통과를 유지하고 밀도가 높을 때만 이미지화를 적용해 잘못된 복원이 발생할 확률을 줄인다. 모델별 옵트인은 실측된 읽기 실패율을 근거로 하고 있어 무작정 모든 요청을 이미지화하지 않는다.
- 라이브러리 모드와 프록시 모드를 모두 제공해 통합 유연성을 확보하고 개발 워크플로에 맞게 적용 범위를 조정할 수 있다. renderTextToImages와 transformAnthropicMessages API는 노드 및 에지 워커에서 직접 호출 가능하도록 설계되어 있다. 이중 운영은 프록시가 부적합한 환경에서도 동일한 변환을 적용할 수 있게 한다.
사용 사례
- 대량의 로그·파일 출력·도구 결과를 에이전트 프롬프트로 주입하는 워크플로에서 비용을 줄이는 데 활용할 수 있다. 이러한 입력 블록은 문자밀도가 높아 이미지화가 비용 우위를 가져오며 pxpipe는 오래된 대화 역사와 큰 tool_result를 자동으로 처리하도록 설계되어 있다. 다만 식별자 무결성이 필요한 부분은 문자형으로 남겨두어야 한다.
- 시스템 프롬프트와 도구 문서를 한 번에 대량으로 제공해야 하는 자동화된 에이전트 환경에서 컨텍스트 윈도우 활용도를 높이는 데 쓰일 수 있다. 한 페이지에 수만 자를 집적해 전송하면 동일한 청구 한도에서 더 많은 정보를 제공할 수 있다. 실무에서는 수익성 게이트로 이미지화를 제한해 오답률과 비용 트레이드를 조정할 수 있다.
- 모델 리그레션 테스트나 성능 재현성 검증을 위해 이미지화가 모델 리딩에 미치는 영향을 측정하는 평가 파이프라인에 통합할 수 있다. README는 novel-number 테스트와 SWE-bench 결과를 포함해 이미지화의 읽기 보전성과 오차 패턴을 문서화하고 있다. 평가 기록은 eval 디렉터리에 보관되어 실험 재현에 사용 가능하다.
시작하기
로컬에서 즉시 시험하려면 npx pxpipe-proxy로 프록시를 실행한 뒤 Anthropic 클라이언트가 프록시를 향하도록 환경변수를 설정해 연동하면 된다. 대시보드에서 토큰 절감과 텍스트 대 이미지 변환 결과를 실시간으로 확인할 수 있고 설정으로 모델 허용 목록과 옵트인 플래그를 제어할 수 있다. 라이브러리 통합이 필요하면 renderTextToImages와 transformAnthropicMessages를 import해 애플리케이션 내부에서 직접 변환을 호출하면 된다.
요구사항
- Node 기반의 Pure JavaScript 런타임에서 동작하며 edge/Workers 환경에서도 사용할 수 있도록 설계되어 있다. README에 @napi-rs/canvas는 빌드 타임 의존성으로 표기되어 있어 네이티브 빌드 도구가 필요한 환경에서는 추가 설정이 필요하다. 모델 연동은 Anthropic과 호환되는 클라이언트가 필요하며 일부 모델은 옵트인 설정으로 제어된다.
벤치마크
| 벤치마크 | 지표 | 값 | 비교 |
|---|---|---|---|
| novel arithmetic, claude-fable-5 | accuracy | 100% | tokens −38% |
| novel arithmetic, claude-opus-4-8 | accuracy | 93% | tokens −38% |
| verbatim 12-char hex recall, dense render, Fable 5 | verbatim recall | 13/15 | — |
| SWE-bench Lite pilot | pass | 10/10 both arms | request size −65% |
이미지 분석

5.1k
Stars
409
Forks
+211
Trending
10
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.