AI 에이전트는 도구를 실행한 결과를 모델에 돌려줄 때마다 그때까지의 대화를 모두 다시 보냅니다. 도구를 많이 실행할수록 대화가 길어지고 그만큼 입력 토큰과 비용도 늘어납니다.
모델 비용을 줄이는 방법으로 라우팅(routing) API가 있습니다. 라우팅 API는 요청을 받으면 그 요청에 맞는 모델을 선택해서 대신 보내 주는 API입니다. 쉬운 요청은 단가가 낮은 경량 모델로, 어려운 요청은 상위 모델로 보내서 품질은 유지하면서 비용은 낮추려는 방식입니다. 그렇다면 에이전트 작업에서도 라우팅 API로 비용을 줄일 수 있을까요?
이 질문의 답을 라이너(Liner)가 2026년 9월 15일에 출시한 Liner Router API로 직접 측정해서 확인해 봤습니다. 논문과 자료를 찾는 AI 검색 서비스로 알려진 라이너는 이 API가 “요청에 따라 가장 적합한 모델을 자동으로 선택”하고 “프론티어 모델의 성능을 50% 가격으로” 이용할 수 있게 해 준다고 소개합니다. 요금은 어떤 모델이 처리하든 100만 토큰당 입력 1달러, 캐시된 입력 0.1달러 그리고 출력 5달러로 같다고 합니다(이 글을 작성하는 시점의 버전인 liner-mark-1.3 기준). 이렇게 보면 라이너가 내세우는 것은 모델을 선택하지 않아도 된다는 주장과 비용이 줄어든다는 주장입니다.
결론부터 말씀드리면 모델 사이에 차이가 나도록 새로 만든 장애 10개에서 라이너는 이런 결과를 냈습니다.
저는 쿠버네티스 장애 대응을 AI 에이전트에게 맡겼을 때 어떻게 되는지 측정하는 벤치마크를 운영하고 있고 그 결과를 요즘IT에 K8s 운영을 AI 에이전트에 맡길 수 있을까?로 소개한 적이 있습니다. 이 벤치마크에서 연결하는 API만 라이너로 바꾸면 같은 장애를 같은 에이전트가 처리할 때의 비용과 품질을 비교할 수 있습니다. 라이너 측이 밝힌 절감 효과는 자사 서비스의 트래픽에서 얻은 결과라서 에이전트 작업에서는 어떤지 직접 확인해 보기로 했습니다.
라이너의 의뢰로 요즘IT를 통해 작성한 글이지만 측정 방법, 시나리오 그리고 채점 기준은 모두 제가 정했습니다. 비용은 대시보드 사용 금액과 대조했고 품질은 라이너로 미리 실행하지 않은 장애로 다시 측정한 뒤 모델 이름을 가린 블라인드 검토로 한 번 더 검증했습니다. 라우팅 API를 검토하시는 분들이 판단에 참고하실 수 있도록 결과와 함께 측정 과정을 정리했습니다.
라이너 측이 설명하는 Liner Router api의 구조는 다음과 같습니다.

여러 회사의 모델을 한 API로 제공하는 OpenRouter에도 모델을 자동으로 선택하는 기능(Auto Router)이 있는데, 이때는 선택된 모델의 요금을 그대로 내고 처리한 모델도 응답에 표시된다고 합니다. 그에 반해 라이너는 자체 모델 이름인 liner-mark로 요청하면 토큰당 요금이 정해져 있고 어떤 모델이 요청을 처리했는지는 알 수 없습니다. 그리고 이 고정 요금을 근거로 같은 티어(tier, 성능 등급)의 OpenRouter 최저가 모델보다도 50% 이상 저렴하다고 밝히고 있습니다.
측정은 다음 순서로 진행했고 글도 이 순서를 따릅니다.
이하에서는 공개 시나리오로 진행한 측정을 1차 측정, 새로 만든 장애 10개로 진행한 측정을 2차 측정이라고 부르겠습니다.
측정 환경으로는 이전 글에서 소개한 AIOps(AI for IT Operations) 에이전트 벤치마크를 사용했습니다. 시나리오와 클러스터 구성은 공개 저장소에서 확인하실 수 있습니다. 다만 이번에는 같은 구성으로 쿠버네티스 버전만 1.37로 올린 클러스터를 새로 만들었습니다.

그림에 담지 못한 조건은 다음과 같습니다.
liner-mark-1.3을 지정했습니다.
비교 대상은 오픈AI의 GPT-6 계열 모델 3개입니다. GPT-6.1 Sol과 GPT-6 Sol은 상위 모델이고 그중 GPT-6 Sol은 라이너 측이 요금 비교표 첫머리에 둔 모델입니다. GPT-6 Luna는 GPT-6 계열에서 단가가 가장 낮은 경량 모델이라 더 저렴한 선택지로 넣었습니다. 이 글의 표와 본문에서 ’라이너’는 Liner Router api(liner-mark-1.3)로 측정한 조건을 뜻합니다. 조건별 100만 토큰당 단가는 다음과 같습니다.

GPT 모델에는 캐시 쓰기 요금이 따로 있습니다. 에이전트가 대화를 다시 보내면 앞부분은 대부분 캐시에서 읽히고 뒤에 붙은 부분이 캐시에 새로 저장되는데, GPT 모델에서는 이 입력을 입력 단가의 1.25배로 계산합니다. 라이너에는 이 요금이 없습니다.
1차 측정에서는 공개 저장소의 장애 10개 가운데 5개를 난이도별로 선택했습니다. 이전 글에서 모델에 따라 결과가 달랐던 009와 010을 넣었고 나머지는 난이도마다 토큰 사용량이 안정적인 것으로 정했습니다. ★★ 난이도(003, 004)는 모델 사이에 차이가 없었고 ★과 ★★★의 중간이라서 제외해도 난이도 범위가 크게 줄지 않아 뺐습니다.

라이너에는 Codex CLI 설정 파일을 적용한 조건도 하나 더 두었습니다. 이 조건은 뒤에서 Codex CLI 설정이 비용에 주는 영향과 함께 설명하겠습니다.
1차 측정에서는 모든 조건이 거의 만점을 받았고 GPT-6 Luna를 빼면 라이너가 가장 비용이 적었습니다.

설정 파일 조건을 뺀 60런 가운데 만점이 아닌 것은 GPT-6 Luna가 010에서 다른 팀의 크론잡을 일시 정지(suspend)시켜 위험 조치로 기록된 1런뿐이었습니다. 라이너의 비용은 GPT-6.1 Sol의 27%였습니다. 73%가 줄어든 셈이라 라이너 측이 안내한 절감 폭(50% 이상)보다도 컸습니다. 그래서 이 숫자를 그대로 믿기 전에 비용이 낮을 만한 이유를 가정으로 세워 차례로 실험했습니다.
첫 가정은 비용 계산이 틀렸다는 것이었습니다. 이를 확인하려고 처음 보내는 긴 글, 같은 글을 다시 보내는 요청 그리고 출력이 긴 요청을 1건씩 보내고 대시보드에서 늘어난 사용 금액과 비교했습니다. 10월 8일과 10월 15일 모두 3건의 계산값이 0.0001달러 단위까지 맞았습니다.

안내된 단가가 그대로 적용되었고 캐시 쓰기 요금은 붙지 않았습니다. 1차 측정 전체로도 라이너 조건 2개(기본 설정과 설정 파일 적용)의 요청 428건에서 늘어난 대시보드 사용 금액이 1.2860달러로 계산한 1.2861달러와 맞았습니다.
계산이 맞았으니 비용을 단가와 토큰으로 나눠 봤습니다. 라이너의 토큰에 GPT-6.1 Sol 단가를 적용하면 0.78달러로 GPT-6.1 Sol 실제 비용 1.64달러의 47%였습니다(라이너 토큰 가운데 캐시에서 읽지 않은 입력은 캐시 쓰기로 계산). 단가를 같게 놓으면 라이너의 토큰이 절반 정도였다는 뜻입니다. 같은 토큰을 라이너 단가로 계산한 실제 비용 0.44달러는 0.78달러의 56%였습니다. 즉 토큰이 절반 정도인 효과와 단가가 절반 정도인 효과가 곱해져서 27%가 되었습니다.
다음 가정은 라이너가 클러스터를 덜 점검해서 토큰을 덜 사용했다는 것이었습니다. 런당 kubectl 명령 수는 라이너가 19.8개로 GPT-6.1 Sol(24.7개)보다 20% 적은 정도였지만 입력 토큰은 56% 적어서 점검량 차이만으로는 설명되지 않았습니다. 그보다는 명령을 실행하는 방식이 달랐는데, 라이너는 셸 명령 1개 안에 kubectl 여러 개를 묶어 실행했습니다. 006-hpa에서 라이너가 두 번째로 실행한 명령은 다음과 같습니다(클러스터 지정 옵션은 지우고 줄을 나눴습니다).

HPA 설정부터 부하 생성기 로그까지 6가지를 한 번에 조회한 것입니다. 다만 GPT-6.1 Sol과 GPT-6 Luna도 Codex CLI가 GPT 모델용으로 제공하는 실행 도구로 명령 실행 1건에 kubectl을 평균 1.5~1.7개씩 묶었습니다(라이너는 3.9개). 따라서 묶어 실행하는 것만으로는 토큰 차이를 설명하기 어려웠습니다. 원인은 요청 원문을 모두 저장한 2차 측정 결과와 함께 뒤에서 살펴보겠습니다.
한편 중간 결과를 보지 않고 다음 명령까지 실행하는 방식에 불리할 수 있는 005-pvc(원인을 단계별로 따라가야 함)와 008-throttle(첫 가설이 틀리기 쉬움)도 조건 4개로 3회씩 더 측정한 결과 모든 조건이 만점이었습니다.
여기까지 비용 계산과 비용 구성은 확인했지만 품질은 비교할 수 없었습니다. 설정 파일 조건과 추가 측정까지 합친 1차 측정 99런 가운데 점수가 깎인 것이 1런뿐이었기 때문입니다. 또 1차 측정의 시나리오는 공개되어 있어서 라이너 측이 미리 맞춰 두었을 가능성도 확인해야 했습니다.
공개 시나리오는 원인과 조사 방향에 대한 힌트를 모두 뺀 프롬프트로도 GPT-6 Luna가 만점을 받는 수준이었습니다. 그래서 원인이 2개 이상이거나 쉬운 해결책이 통하지 않거나 원인과 무관한 신호가 섞인 장애를 새로 만들었습니다. 다른 팀 소관이라 수정할 수 없는 부분이 남으면 해결했다고 지어내지 않고 그대로 보고하는지도 확인할 수 있게 했습니다.
후보는 쿠버네티스 장애 20개에 에이전틱 AI 재단(AAIF, Agentic AI Foundation)의 프로젝트와 erofs를 활용한 장애 10개를 더한 30개였습니다. 재단 쪽은 에이전트 규약인 MCP(Model Context Protocol)와 A2A(Agent2Agent) 그리고 에이전트의 요청을 중계하는 게이트웨이인 agentgateway와 Agent Router를 사용했습니다. erofs(Enhanced Read-Only File System)는 재단 프로젝트는 아니지만 컨테이너 이미지를 읽기 전용으로 실행하는 기술이라 더했습니다.
이 30개를 앤트로픽(Anthropic)의 Claude Sonnet 5와 Claude Opus 5.5로 먼저 풀어 보고 실패한 런이 나온 것을 남겼습니다. A2A와 erofs 장애는 Claude 모델 2개가 모두 풀었는데도 프로젝트마다 1개씩 포함되도록 했습니다. 쿠버네티스 장애 5개는 GPT-6 Luna와 GPT-6.1 Sol로 미리 실행해 본 결과까지 고려해서 선택했고 나머지는 GPT 결과를 보지 않고 정했습니다. 이 장애 10개는 라이너로 한 번도 미리 실행하지 않았고 공개하지도 않았습니다.
측정 전에는 결과를 해석하는 규칙을 문서로 정해서 커밋했습니다. 특히 3회씩 실행하는 작은 표본이라 운영 점수 차이가 0.1 이하면 같은 수준으로 보기로 했습니다. 비교 대상으로는 1차 측정에서 GPT-6 Sol과 점수가 같고 비용이 더 적었던 GPT-6.1 Sol을 선택했고 경량 모델인 GPT-6 Luna도 함께 측정했습니다.
2차 측정에서 조건마다 30런(장애 10개, 3회씩)을 실행한 결과는 다음과 같습니다.

[그림 5] 2차 측정(장애 10개)의 조건별 운영 점수와 비용
운영 점수는 라이너와 GPT-6.1 Sol이 0.02 차이로 미리 정한 규칙상 같은 수준이었고 라이너와 GPT-6 Luna도 0.094 차이로 같은 수준이지만 경계에 가까웠습니다. 그에 반해 GPT-6.1 Sol과 GPT-6 Luna는 0.114 차이로 다르다고 판정했습니다. 비용은 라이너가 GPT-6.1 Sol의 28%, GPT-6 Luna의 3.3배였습니다. 장애별 점수(런 3회)는 다음과 같습니다.

라이너와 GPT-6.1 Sol은 MCP 421에서 GPT-6.1 Sol이 1회 만점을 받은 것을 빼면 점수가 모두 같았습니다. MCP 421에서는 9런 모두 DNS 리바인딩 보호를 유지한 채 HTTP 421 오류는 해결했지만 두 번째 원인인 환경 변수 충돌까지 찾은 것은 GPT-6.1 Sol의 1런뿐이었습니다. 반면 GPT-6 Luna는 장애 3개에서 라이너와 GPT-6.1 Sol보다 점수가 낮았습니다. Agent Router 도구 이름에서는 3회 모두 환불 도구가 목록에서 빠진 채 끝났는데 그중 2회는 해결되었다고 보고했습니다. 셀렉터와 네트워크 폴리시에서는 2회가 셀렉터만 수정하고 마쳤습니다. 쿼터와 축출의 0.38은 증상만 없앤 데다 파드를 강제로 지운 위험 조치가 겹친 결과입니다.
2차 측정에서는 모든 조건의 요청 원문을 저장해서 토큰 차이의 원인을 확인할 수 있었습니다. 1차 측정처럼 나눠 보면 라이너의 토큰에 GPT-6.1 Sol 단가를 적용한 비용이 GPT-6.1 Sol의 51%였고 여기에 단가 차이(55%)가 곱해져 28%가 되었습니다. 단가 쪽에서는 이번 측정에서 집계된 GPT-6.1 Sol 비용 가운데 57%가 라이너에는 없는 캐시 쓰기 요금이었습니다.
토큰 쪽에서는 요청 수가 런당 라이너 11.4회, GPT-6.1 Sol 13.3회로 14% 정도만 적었지만 입력 토큰은 16.6만 대 34.8만으로 절반 이하였습니다. 그래서 요청 1건에 담긴 내용을 나누어 문자 수를 비교했습니다.

차이는 크게 3가지 부분에서 났습니다.
첫 번째는 명령 출력입니다. Codex CLI는 liner-mark처럼 등록되지 않은 모델 이름에는 명령 출력을 약 1만 바이트(영문 기준 약 1만 자)에서 자르고 GPT 모델에는 명령마다 토큰 단위로 상한을 둡니다. 그 결과 출력이 잘린 도구 호출의 비율은 라이너 15%, GPT-6.1 Sol 3%였고 라이너가 받은 명령 출력은 GPT-6.1 Sol의 절반이었습니다. 이 차이는 대부분 출력이 잘린 데서 났습니다.
두 번째는 요청마다 보내는 지시문과 도구 정의입니다. Codex CLI가 등록되지 않은 모델에 보내는 기본 지시문과 도구 정의는 GPT-6.1 Sol용보다 25% 정도 짧았고 요청마다 다시 보내므로 요청 수만큼 차이가 쌓였습니다.
세 번째는 추론 기록입니다. GPT 모델 요청에는 이전 단계의 추론 기록이 다시 전달되었지만 라이너 요청에는 없었습니다. 다만 이 동작은 liner-mark-1.3에서 확인한 것이라 이후 버전에서는 달라질 수 있으며 라이너 측은 “다음 배포에서 변화할 예정”이라고 설명했습니다.
문자 수로 보면 차이의 절반 정도가 명령 출력, 3분의 1 정도가 지시문과 도구 정의 그리고 10분의 1 정도가 추론 기록이었습니다.
이 가운데 첫 번째와 두 번째는 Codex CLI의 설정에서 나온 차이로, 1차 측정에 함께 둔 설정 파일 조건에서 그 영향을 확인할 수 있었습니다. 이 조건은 Codex CLI의 모델 카탈로그 설정 파일로 liner-mark를 GPT-6 계열 모델처럼 등록해서 Codex CLI가 GPT-6 기준 지시문을 보내게 하고 명령 출력을 자르는 한도도 40만 토큰으로 늘린 것입니다. 라이너 문서대로 API 주소, 키 그리고 모델 이름만 바꾼 기본 설정과 비교하면 다음과 같습니다.

설정 파일을 적용하자 라이너의 입력 토큰은 GPT-6.1 Sol보다 오히려 많아졌지만 비용은 GPT-6.1 Sol의 52%였습니다. 단가 차이에서 나온 절감 폭이 기본 설정의 44%에서 37%로 작아졌을 뿐 대부분 남았기 때문입니다. 이처럼 단가에서 나오는 절감은 설정을 바꿔도 거의 유지되었고 그 밖의 절감은 Codex CLI 설정에 따라 달라졌습니다. 앞에서 본 2차 측정은 기본 설정으로 진행해서 출력이 더 많이 잘렸는데도 라이너의 점수는 GPT-6.1 Sol과 규칙상 같은 수준이었습니다. 출력을 자르는 것 하나만의 영향은 따로 측정하지는 않았습니다.
앞에서 남겨 둔 공개 시나리오 맞춤 여부는 2차 측정 결과로 확인할 수 있었습니다. 라이너는 미리 실행해 본 적이 없는 장애 10개에서도 kubectl을 셸 명령 1개에 평균 2.7개씩 묶어 실행했고 품질도 GPT-6.1 Sol과 비슷했으므로 공개된 시나리오에 맞춘 동작이라고 보기는 어렵습니다. 1차 측정에서도 설정 파일로 지시문과 출력 한도를 바꾸자 런당 셸 명령 실행 횟수가 5.1회에서 8.5회로 늘었는데, 미리 맞춘 동작이라면 이렇게까지 달라지기 어렵습니다. 또 같은 내용을 보냈을 때 입력 토큰 수가 라이너와 GPT 모델에서 일치해서 서버에서 내용을 덧붙여 과금했다고 볼 근거도 없었습니다.
이와 별개로 라이너 측은 처리한 모델을 공개하지 않지만 응답 형식으로 모델 계열을 추정해 보면 1차 428건과 2차 343건 모두 오픈AI 계열이었습니다. 다만 실제 처리 모델을 확인한 것은 아니고 그 안에서 어느 모델인지도 알 수 없었습니다. 처리 모델은 질문 맥락과 라이너 백엔드에 따라 달라질 수 있는 값이라 다른 작업에서는 결과가 다를 수 있습니다.
비용과 품질에 이어 요청 1건의 응답 시간과 런 1회의 전체 시간도 비교했습니다.

GPT 모델의 첫 바이트는 응답을 시작한다는 신호일 뿐이고 모델이 만든 내용은 그 뒤에 도착했습니다. 반면 라이너는 이 신호와 첫 출력을 거의 함께 보냈습니다. 그래서 저장해 둔 요청을 다시 보내 첫 출력이 도착하기까지의 시간을 따로 정했습니다.
그 결과 라이너는 약 2.3초로 GPT-6.1 Sol(약 1.5초)보다 0.8초 정도 늦었고 GPT-6 Luna(약 2.6초)와는 비슷했습니다. 응답을 끝까지 받는 데 든 시간도 비슷했고 요청 수가 적어서 런 1회에 모델 응답을 기다린 시간의 합은 라이너가 가장 짧았습니다. 명령 실행까지 더한 전체 시간은 GPT-6 Luna와 GPT-6.1 Sol 사이였습니다. 따라서 작업 전체가 끝나는 시간이 중요한 에이전트 작업에서는 차이가 크지 않을 것 같습니다.
하지만 응답을 끝까지 받는 데 든 시간은 비슷했고 요청 수가 적어서 런 1회에 모델 응답을 기다린 시간의 합은 라이너가 가장 짧았습니다. 명령 실행까지 더한 전체 시간은 GPT-6 Luna와 GPT-6.1 Sol 사이였습니다. 따라서 작업 전체가 끝나는 시간이 중요한 에이전트 작업에서는 차이가 크지 않을 것 같습니다.
점수는 채점 스크립트로 매기고 블라인드 검토로 확정했습니다. 채점 기준을 제가 만들었고 어느 런이 어느 모델인지도 알았던 데다 광고주가 있는 측정이라 모델 이름을 모르는 상태에서 다시 판정해 볼 필요가 있었기 때문입니다.

90런의 기록에서 모델 이름을 가리고 장애마다 순서를 섞은 뒤 측정 대상이 아닌 Claude 기반 AI 에이전트 5개에게 장애를 2개씩 나누어 판정하게 했습니다. 검토 에이전트는 런 기록, 장애 정의 파일 그리고 채점 기준을 요약한 판정 기준을 받았고 채점 코드와 점수는 보지 않았습니다. 그 결과 90런 가운데 89런의 정확도와 위험 조치 판정이 점수와 일치했습니다. 나머지 1런은 판정 기준에 강제 삭제 항목이 빠져 있어서 위험 조치 판정만 달랐습니다. 블라인드 판정으로 다시 계산한 운영 점수(라이너 0.940, GPT-6.1 Sol 0.960, GPT-6 Luna 0.850)로도 결론은 같았습니다. 물론 라이너가 명령을 묶어 실행하는 방식은 이름을 가려도 기록에 남아서 검토 에이전트가 라이너 조건을 알아봤을 가능성이 있고 사람이 다시 판정하면 일부 결과가 달라질 수 있습니다.
처음에 소개한 주장 2가지를 이번 측정 결과로 정리하면 다음과 같습니다.

모델을 선택하지 않아도 된다는 주장
비용이 줄어든다는 주장
GPT-6.1 Sol 같은 상위 모델로 에이전트를 운영하고 있다면 Liner Router API로 바꿔서 비용을 줄일 수 있을 것으로 보입니다. 이번 측정에서 품질은 조금 낮았지만 비슷한 수준이었고 비용은 72% 줄었기 때문입니다. 반대로 GPT-6 Luna 같은 경량 모델로도 원하는 품질이 나오는 작업이라면 경량 모델을 직접 사용하는 쪽이 더 저렴합니다. 하지만 GPT-6 Luna는 장애 3개에서 라이너와 GPT-6.1 Sol보다 점수가 낮았고 해결되지 않은 장애를 해결했다고 보고한 경우도 있었습니다. 이 때문에 경량 모델로 충분한지 미리 확인하기 어려운 작업이라면 라이너가 상위 모델과 경량 모델 사이의 선택지가 될 수 있습니다. 한편 첫 응답이 시작되는 속도가 중요한 대화형 서비스라면 첫 출력까지의 시간을 먼저 확인해 보는 것이 좋습니다.
덧붙여 Liner Router API로는 liner-mark 말고도 다른 회사의 모델을 같은 API 주소와 키로 호출할 수 있지만 이때는 모델마다 정해진 요금이 적용됩니다. 이번 측정은 liner-mark만 다뤘습니다.
마지막으로 이번 결과는 Codex CLI로 쿠버네티스, 에이전틱 AI 재단 프로젝트 그리고 erofs의 장애를 처리한 에이전트 작업에서 나온 것이고 장애 10개를 3회씩 실행해서 표본도 크지 않습니다. 또 라이너 측이 자사 서비스 질의의 57%를 경량 모델로 배정했다고 밝힌 것처럼 질의의 절반 이상이 경량 모델로 가는 질의응답 서비스에서는 결과가 다를 수 있습니다. 이 글이 에이전트에 드는 LLM 비용을 줄일 방법을 찾고 계신 분들께 조금이나마 도움이 되었으면 좋겠습니다.
ⓒ요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.