Headroom: AI 에이전트 비용을 10배 절감해 주는 넷플릭스의 도구

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00이것은 Headroom입니다. AI 에이전트가 읽는 모든 데이터를 압축하는 오픈 소스 도구죠.
00:00:04즉, LLM에 도달하기 전에 도구 호출, 코드 파일, RAG 데이터를 압축하여 토큰을 줄일 수 있습니다.
00:00:0960%에서 최대 95%까지 줄이면서도 동일한 답변을 얻을 수 있죠. 더 똑똑한 점은 이 과정이 가역적이라는 겁니다.
00:00:14그래서 모델이 실제로 전체 정보가 필요할 때 언제든 다시 요청할 수 있죠. 하지만 압축이란
00:00:18보통 데이터 손실을 의미하는데, 어떻게 대부분의 컨텍스트를 제거하고도 올바른
00:00:23답변을 얻을 수 있을까요? 정말 흥미로운 질문입니다. 구독 버튼을 누르고 함께 알아보시죠.
00:00:31ClaudeCode 같은 하네스를 써보셨다면 토큰이 정말 많이 소모된다는 걸 아실 겁니다. 모든 도구 호출이
00:00:35대부분 노이즈인 거대한 JSON 로그를 쏟아내며 중요한 정보를 방해하고,
00:00:40이 모든 것이 비용을 지불하는 컨텍스트 윈도우를 채우게 되죠.
00:00:45특히 UltraCode 모드에서 Opus 같은 모델을 사용해 동적 워크플로우를 실행하면,
00:00:50토큰 제한 없이 병렬 하위 에이전트를 생성하게 됩니다. 바로 이 때문에 넷플릭스의 시니어 개발자인 Tejas Chopra가
00:00:57Headroom을 만들었습니다. 콘텐츠 유형을 감지하고 중요한 정보만 남기는 방식이죠.
00:01:01JSON 배열의 경우 이상치나 엣지 케이스를 유지하고, 코드 압축기는
00:01:06실제 구문 트리를 읽으며, 빌드 로그를 읽을 때는 실패한 내용만 남기고 성공한 테스트는 버립니다.
00:01:11하지만 여기서 재미있는 점은, 일반 텍스트에 대해 Headroom은 CompressBase라는 자체 모델을 사용한다는 겁니다.
00:01:17이 모델은 Tejas가 압축만을 위해 직접 학습시켰으며, 로컬 환경에서 실행됩니다.
00:01:22Headroom은 이미 사용자들에게 약 70만 달러의 토큰 비용을 절감해 주었다고 하며,
00:01:26정말 영리한 점은 압축된 텍스트 안에 '브레드크럼(흔적)'을 남긴다는 것입니다.
00:01:30모델이 필요할 때 언제든 원본 데이터를 가져올 수 있도록 해시값을 포함하고 있죠.
00:01:35혹시 James의 Caveman 영상을 보셨다면, 그것도 컨텍스트를 줄여주지만
00:01:39반대 방향에서 접근한다는 차이가 있습니다. 그 내용은 나중에 더 자세히 설명해 드릴게요.
00:01:43우선 Headroom의 작동 방식을 보여주는 기본적인 예시부터 확인해 봅시다.
00:01:46Headroom은 여러분의 앱과 Anthropic 서버 사이에서 중재하는 파이썬 서버를 사용합니다.
00:01:50코드 크롤링이나 Anthropic 서버 등과의 통신에서 말이죠.
00:01:54도구 호출 결과가 반환되면 프록시가 내부적으로 Rust를 사용해 압축한 다음,
00:01:59압축된 버전만 API로 전송합니다.
00:02:01pip으로 서버를 설치할 수 있지만, 저는 uv를 사용하겠습니다. 파이썬 버전은
00:02:063.12로 맞춰주세요. 더 높은 버전에서는 작동하지 않기 때문입니다.
00:02:09그다음 라이브러리에서 제공하는 headroom proxy 명령을 실행하면 이 포트에서 프록시가 작동합니다.
00:02:14Headroom은 TypeScript 또는 파이썬 SDK도 지원하는데,
00:02:17데모를 위해 파이썬 SDK를 사용하여 Claude SDK 기반 앱을 만들어 보겠습니다.
00:02:22이렇게 둘 다 설치하면 이제 앱을 준비할 수 있습니다.
00:02:25나중에 ClaudeCode와 함께 Headroom을 사용하는 법을 보여드릴 계획이지만,
00:02:29우선 내부적으로 어떻게 작동하는지 먼저 보여드리고 싶네요.
00:02:32이 앱에는 로그 파일을 전부 읽어서 에러와 근본 원인을 파악하라는 사용자 프롬프트가 있습니다.
00:02:36여기서 도구 호출을 가짜로 만들어 볼 겁니다.
00:02:40Claude가 서버 로그 파일을 'cat'하는 배시 도구 호출을 하게끔 시킬 겁니다.
00:02:44로그 파일에는 가짜 로그가 가득하며, 위쪽에서 임포트했습니다.
00:02:47그리고 나서 도구 호출 결과를 반환할 것입니다.
00:02:49Headroom에 텍스트 파일을 직접 주지 않는 이유는
00:02:52도구 호출 출력만 압축할 수 있기 때문입니다.
00:02:54여기서 모델을 지정하고 아래에서 Headroom의 compress 함수를 사용합니다.
00:02:59정확한 토큰 계산을 위해 모델과 함께 메시지를 처리하죠.
00:03:02Headroom은 실제로 Haiku를 사용하지는 않습니다.
00:03:04그다음 프록시의 베이스 URL을 입력합니다.
00:03:06테스트를 위해 여러 제어용 로그를 작성해 두었습니다.
00:03:08Headroom 적용 전후의 메시지를 보여주며,
00:03:11절감된 퍼센티지를 확인하는 로그도 포함되어 있죠.
00:03:13그다음 Headroom에서 압축된 메시지를 ClaudeCode로 전달합니다.
00:03:17사용자 프롬프트도 함께 담겨 있죠.
00:03:18파일을 실행해보면 Headroom이 토큰의 98%를 절감한 것을 확인할 수 있습니다.
00:03:23압축 전 토큰과 압축 후 토큰을 비교해보세요.
00:03:26무려 17,000개 이상의 토큰을 아꼈습니다.
00:03:28전후를 보면 차이가 확실히 드러납니다.
00:03:31스크롤을 올려보면, 이게 압축 전입니다. 보통 ClaudeCode로 전달되는 양이죠.
00:03:35사용자 프롬프트, 도구 호출, 그리고 전체 로그 파일인 도구 응답까지 모두 포함됩니다.
00:03:39반면 Headroom이 보낸 내용을 보면, 사용자 메시지와 도구 호출은 같지만
00:03:43도구 응답은 훨씬 줄어들었습니다.
00:03:45통계적 압축을 사용하여 중복된 토큰을 제거한 덕분이죠.
00:03:50419개의 유사 정보 로그를 요약 형태로 압축한 것입니다.
00:03:54아래에 보면 Headroom이 Claude에게 압축된 출력물이라고 알려줍니다.
00:03:58해시값을 사용해 정보를 가져올 수도 있고요.
00:04:00자, 여기서 Headroom의 즉각적인 단점이 보입니다. Claude가 작업을 완료하기에
00:04:05정보가 충분하지 않다고 생각하는 경우가 있죠. 물론 충분히 있는데도 말이죠.
00:04:08그러니 다시 파일을 실행해보겠습니다.
00:04:10이번에도 여전히 98% 절감 효과를 보면서도 Claude로부터 훨씬 많은 정보를 얻었습니다.
00:04:16다른 데모도 해볼까요?
00:04:17늘 그렇듯 Headroom 프록시를 실행해야 하는데, 이번엔 더 많은 파라미터를 추가했습니다.
00:04:21보시다시피 ML 값을 추가했습니다. 로컬 압축 모델을 사용해 일반 텍스트를 압축하죠.
00:04:26또한 코드 인식 압축기를 사용할 수 있도록 코드를 추가했습니다.
00:04:30그리고 해당 기능을 켜기 위해 code aware 플래그를 넣었습니다.
00:04:32이제 활성화된 것을 확인할 수 있습니다.
00:04:34이제 ClaudeCode를 실행할 텐데, 우선 베이스 URL을 프록시로 설정하겠습니다.
00:04:39이 설정을 마치고 Claude에게 이 프로젝트의 모든 TS 파일을 읽어서
00:04:44관련 코드에 대한 인용과 함께 어떤 프로젝트인지 깊이 있게 요약해 달라고 해보겠습니다.
00:04:49잠시 후 Claude가 5개 패키지에 걸친 모든 TypeScript 파일을 읽었다며
00:04:53기본적인 요약을 제공합니다.
00:04:56아까 했던 context 슬래시 명령을 실행해보면 89.1k 토큰을 사용한 것을 알 수 있습니다.
00:05:02Headroom을 쓰지 않고 같은 프롬프트를 Claude에서 실행해 봤습니다.
00:05:06맨 아래로 내려가서 context 하위 명령을 실행했을 때를 보면,
00:05:10조금 더 많은 토큰이 사용되었네요.
00:05:11왜 여기서는 100만 컨텍스트 윈도우를 사용했는지 모르겠지만요.
00:05:16아무튼 jq로 이 엔드포인트를 포맷하면 프록시에서 정확히 어느 정도로 압축되었는지 알 수 있습니다.
00:05:21정보량이 많아서 확인하는 데 조금 걸렸습니다.
00:05:23하지만 스크롤을 올려보면 Headroom 압축으로 몇 개의 토큰이 절감되었는지,
00:05:26얼마나 많은 비용을 아꼈는지도 확인할 수 있습니다.
00:05:30이건 물론 한 번의 프롬프트에서 나온 결과입니다.
00:05:32그런데 여러 ClaudeCode 세션이 동시에 돌아가고
00:05:35Headroom이 모든 도구 호출을 압축하고 있다고 상상해 보세요.
00:05:39얼마나 더 많은 토큰을 아낄 수 있겠어요.
00:05:42또한 Opus에서 low 노력치로 정확한 프롬프트를 실행했을 때는
00:05:46Headroom이 토큰을 전혀 절감하지 않았다는 점도 말씀드리고 싶네요.
00:05:49노력치를 low에서 medium으로 올렸을 때 비로소 토큰 절감 효과가 나타났습니다.
00:05:53high, x-high, 혹은 max로 올리면 훨씬 더 많은 토큰을 아낄 수 있겠죠.
00:05:57어쨌든, 이것으로 Headroom에 대한 간단한 개요를 마칩니다.
00:06:00물론 이 외에도 더 많은 기능이 있습니다.
00:06:03예를 들어 Claude, Codex 등 여러 하네스가
00:06:07똑같이 압축된 컨텍스트를 공유하게 해주는 교차 에이전트 메모리라든지,
00:06:09Headroom Learn 기능은 실패한 세션을 분석하여 무엇을 너무 심하게 압축했는지 파악하고,
00:06:12학습을 통해 같은 실수를 반복하지 않게 해주죠.
00:06:15인기 SDK와의 통합 기능도 있습니다.
00:06:18하지만 Headroom 사용 시 한 가지 중요한 고려 사항이 있습니다.
00:06:21모델이 필요한 정보를 얻지 못할 때마다
00:06:24Headroom에 전체 데이터를 요청하게 되는데, 그러면 두 번째 라운드 트립이 발생하죠.
00:06:28경우에 따라서는 Headroom을 안 썼을 때보다 토큰을 더 많이 쓰게 될 수도 있다는 뜻입니다.
00:06:33하지만 이런 일이 앞으로 발생하지 않도록 방지해주는
00:06:36Headroom Learn 기능이 바로 이럴 때 장점이 되는 거죠.
00:06:39아까 제가 Caveman에 대해 이야기했던 것 기억하시나요?
00:06:42Caveman은 모델에게 짧은 단편으로 응답하도록 지시하고, 불필요한 단어 등을 줄여서
00:06:46토큰을 줄이는 방식입니다.
00:06:48하지만 방금 데모에서 보셨듯이 Headroom은 모델이 읽기 전 단계에서
00:06:51데이터를 압축해버립니다.
00:06:52하나는 출력을 줄이고, 하나는 입력을 줄이는 것이죠.
00:06:56즉, 토큰 절감을 극대화하고 싶다면 이론적으로 이 둘을 함께 사용할 수도 있습니다.
00:07:00토큰 절감을 그 정도로 중요하게 생각하신다면 말이죠.

Key Takeaway

Headroom은 AI 에이전트의 도구 호출 및 로그 데이터를 LLM 처리 전 단계에서 가역적으로 압축하여, 정보 손실을 최소화하면서도 토큰 비용을 최대 95%까지 절감하는 오픈 소스 프록시 도구입니다.

Highlights

  • Headroom은 데이터 유형에 맞춘 압축 기술을 사용하여 LLM 입력 토큰을 60%에서 95%까지 절감합니다.

  • 실제 사용자들은 Headroom을 통해 총 70만 달러 규모의 토큰 비용을 절감했습니다.

  • 일반 텍스트 압축에는 Tejas Chopra가 직접 학습시킨 로컬 실행 모델인 CompressBase를 사용합니다.

  • 압축된 텍스트에 해시값 형태의 브레드크럼을 포함하여, 모델이 필요할 때 원본 데이터를 즉시 다시 불러올 수 있는 가역성을 확보했습니다.

  • ClaudeCode와 같은 에이전트 도구의 대규모 JSON 로그를 처리할 때 특히 효과적이며, 빌드 로그에서는 성공한 테스트를 버리고 실패 항목만 유지합니다.

  • 압축 노력치(effort level)를 medium 이상으로 설정해야 본격적인 토큰 절감 효과가 나타납니다.

Timeline

Headroom의 작동 원리와 목적

  • LLM 호출 전 도구 호출, 코드 파일, RAG 데이터를 압축하여 비용을 낮춥니다.
  • 데이터를 60%~95% 줄이면서도 필요 시 원본 데이터를 다시 요청할 수 있는 가역적인 구조를 가집니다.
  • JSON 배열, 코드 구문 트리, 빌드 로그 등 데이터 유형별로 최적화된 압축 알고리즘을 적용합니다.

AI 에이전트가 생성하는 거대한 JSON 로그와 코드 파일은 컨텍스트 윈도우를 낭비하는 주범입니다. Headroom은 정보를 유형별로 분류하여 중요한 데이터만 남기고 나머지는 제거하는 방식으로 작동합니다. 특히 빌드 로그의 경우 성공적인 테스트 결과는 삭제하고 실패한 내용만 남겨 불필요한 토큰 소모를 방지합니다.

로컬 압축 모델과 기술적 구현

  • 일반 텍스트 압축에는 로컬에서 실행되는 전용 모델인 CompressBase를 사용합니다.
  • 파이썬 기반 서버를 통해 앱과 Anthropic API 사이에서 중재하는 프록시 형태로 동작합니다.
  • 데모 환경에서 ClaudeCode의 로그를 압축한 결과 약 98%의 토큰 절감 효과를 보였습니다.

Headroom은 Rust를 사용한 프록시 서버를 통해 데이터를 실시간으로 압축하여 LLM으로 전달합니다. 압축된 출력물에는 해시값이 포함되어 모델이 원본 정보를 역추적할 수 있게 합니다. 이 과정은 파이썬 3.12 버전 환경에서 가장 안정적으로 작동하며, SDK를 통해 기존 앱에 쉽게 통합할 수 있습니다.

성능 최적화 및 추가 기능

  • 모델의 판단에 따라 원본 데이터를 요청할 경우 추가적인 왕복 호출이 발생하여 비용이 늘어날 수 있습니다.
  • Headroom Learn 기능은 압축 실패 사례를 학습하여 과도한 정보 제거를 방지합니다.
  • 입력을 줄이는 Headroom과 출력을 줄이는 Caveman 방식을 병행하면 토큰 비용을 극대화하여 절감할 수 있습니다.

압축의 정도는 노력치(effort) 설정에 따라 달라지며, medium 이상의 설정부터 유의미한 절감 효과가 확인됩니다. 또한 에이전트 간 메모리 공유 기능과 지속적인 학습 기능을 통해 압축 효율을 정교하게 다듬을 수 있습니다. 모델이 추론에 필요한 정보를 충분히 갖지 못했다고 판단할 경우 발생하는 추가 API 호출을 줄이는 것이 기술의 핵심 개선 과제입니다.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video