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토큰 절감을 그 정도로 중요하게 생각하신다면 말이죠.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video