집에서 돌리고 있는 AI 에이전트 Hermes의 기본 모델을 GPT-5.6 Luna로 바꿨다. 방금 발급받은 API 키였고, 며칠 전 다른 프로젝트에서 이 모델로 실측해보니 결과가 꽤 정확했던 참이라 기대가 컸다. 그런데 Telegram으로 말을 걸자마자 “The model provider is rate-limiting requests”라는 메시지가 떴다.
로그를 보니 진짜 원인은 따로 있었다
에러 자체는 명확했다 — 이 OpenAI 조직의 분당 토큰 한도(TPM)가 200,000인데, 요청 하나가 이미 그 절반 가까이 먹고 있었다. 근데 로그를 더 보니 범인이 하나가 아니었다. Hermes는 매 대화 턴이 끝날 때마다 “이번 턴에 기억해둘 게 있나” 판단하는 백그라운드 리뷰 스레드를 따로 돌리는데, 이게 메인 대화랑 같은 모델·같은 API 키를 나눠 쓰고 있었다. 두 스레드가 거의 동시에 같은 200,000 토큰짜리 창을 두고 경쟁하니 어느 한쪽은 항상 걸릴 수밖에 없었다.
백그라운드 리뷰를 Gemini로 옮겨서 경쟁 자체를 없앴다. 근데 메인 대화 혼자만 남았는데도 여전히 가끔 걸렸다.
압축이 왜 한 번도 안 걸렸는지
Hermes는 대화가 길어지면 오래된 부분을 요약해서 압축하는 기능이 있다. 근데 이게 “모델의 컨텍스트 윈도우 대비 몇 퍼센트”를 기준으로 발동한다. GPT-5.6 Luna의 컨텍스트 윈도우는 105만 토큰이고, 기본 설정인 50%면 52만 5천 토큰이 돼야 압축이 시작된다는 뜻이다. 그런데 이 계정의 실제 한도는 분당 20만 토큰 — 압축이 발동하는 지점 자체가 실제 한도보다 2.6배나 높은 곳에 있었다. 압축이 고장 난 게 아니라, 애초에 이 계정한테는 절대 도달할 일이 없는 기준으로 잡혀 있었던 것이다.
당장 쓸 수 있는 방법은 그 퍼센트를 억지로 낮추는 것뿐이었다. 5%까지 내렸다. 105만 토큰의 5%면 5만 2500토큰, 그제야 20만 한도 안에 진짜 여유가 생겼다.
캐싱이 도와줄 줄 알았는데
프롬프트 캐싱을 쓰면 반복되는 대화 앞부분은 다시 안 보내도 되니까, 이것도 도움이 되지 않을까 싶었다. 확인해보니 아니었다. OpenAI 개발자 커뮤니티 공식 답변을 찾아보니, rate limiter는 요청이 실제로 모델에 도달하기도 전에 앞단에서 먼저 막는 구조라 캐시 히트 여부를 아예 모른다고 했다. 캐싱은 비용만 깎아줄 뿐, 분당 토큰 한도 계산에서는 캐시든 아니든 100% 그대로 카운트된다는 뜻이다. 기댈 구석이 하나 사라진 셈이었다.
계정 티어를 확인해보니
OpenAI 대시보드에서 이 계정의 실제 등급을 봤다. Tier 1, 분당 20만 토큰 — 딱 에러 메시지에 나온 그 숫자였다. 그 옆에 Tier 2로 가려면 뭐가 필요한지도 나와 있었다. 누적 결제 50달러, 그게 전부였다. 충전하자마자 자동으로 Tier 2로 올라갔고, 분당 한도가 200만 토큰으로 뛰었다. 10배.
한도가 이 정도로 여유로워지니 5%짜리 억지 설정은 오히려 손해였다 — 압축이 너무 자주 걸려서 대화 맥락을 필요 이상으로 자주 잘라낼 뿐이었다. 백그라운드 리뷰 라우팅도, 압축 퍼센트도 전부 원래 기본값으로 되돌렸다.
그런데 도구 자체가 이미 답을 갖고 있었다
이 소동이 끝나갈 즈음, Hermes 자체 버전이 오래됐다는 게 눈에 띄어서 업데이트를 했다. v0.18.0에서 v0.20.0으로, 8월 3일에 나온 릴리즈였다. 릴리즈 노트를 읽다가 압축 관련 항목에서 멈췄다 — “컨텍스트 압축이 이제 모델별로, 그리고 절대 토큰 수로도 설정 가능”이라고 적혀 있었다.
바로 그 자리에 정확히 그 기능이 있었다. threshold_tokens라는
새 설정값 — 지정하면 “퍼센트 기준 threshold와 이 절대값 중 더
작은 쪽”에서 압축이 걸린다. 40만 토큰으로 넣었다. 이제 어떤
모델을 쓰든, 계정 한도가 얼마든, 압축은 이 절대값을 넘지 않는
선에서 안전하게 발동한다. 그렇게 퍼센트를 이리저리 조정하며
맞추려던 게, 사실은 절대값 하나 넣는 문제였던 것이다.
배운 점
퍼센트 기준 임계값과 분당 토큰 한도는 완전히 다른 스케일의 숫자다. 모델의 컨텍스트 윈도우가 100만 토큰이든 1000만 토큰이든, 계정의 실제 처리 한도는 그것과 아무 상관이 없다. 퍼센트를 아무리 정교하게 조정해도 두 숫자가 원래 다른 걸 재고 있다면 근본적으로는 안 맞을 수 있다 — 내가 한 건 그 어긋남을 억지로 메우는 것뿐이었다.
이번에 겪은 문제의 절반은 계정 티어가 낮아서, 나머지 절반은 도구가 아직 이 상황을 위한 정식 기능을 안 갖고 있어서였다. 둘 다 내가 뭘 더 고친 게 아니라, 결제 한 번과 업데이트 한 번으로 자연스럽게 풀렸다. 급하게 짜맞춘 워크어라운드는 대개 그런 운명이다 — 상위 도구가 정식 기능을 내놓는 순간 그 자리에서 바로 버려진다.