도구 하나에도 따라붙는 시스템 프롬프트 토큰
MCP 서버를 붙이는 흐름을 정리한 뒤 모델 교체를 검토했습니다. 처음에는 입력과 출력 단가만 비교하면 될 줄 알았습니다. 도구를 쓰는 요청도 결국 입력 토큰을 보내는 일이니, 모델별 MTok 가격만 보면 된다고 생각했습니다.
그런데 공식 가격 페이지의 Tool use pricing 절을 열어 보니 표가 한 줄 더 있었고, tools를 하나라도 넘기면 API가 도구 사용용 시스템 프롬프트를 자동으로 붙이며 그 토큰도 입력으로 계산된다는 내용이었습니다. 가격표를 다시 읽게 된 계기였습니다.
먼저 결론부터
- tools 파라미터에는 도구 이름, 설명, 스키마가 들어가며 이 내용도 입력 토큰으로 계산됩니다.
- 그 밖에도 tool_use 블록과 tool_result 블록에서 토큰이 더 나옵니다. 문서가 구분한 추가 출처는 세 군데였습니다.
- tools를 하나라도 주면 위 항목과 별개로 도구 사용용 시스템 프롬프트 토큰이 자동으로 붙습니다.
- Sonnet 5.5의 auto·none 값은 286 토큰이고, Sonnet 4.6은 497 토큰입니다. 둘의 차이는 211 토큰입니다.
- tools 없이 tool_choice를 none으로 두면 이 시스템 프롬프트 추가분은 0 토큰입니다.
- any·tool 열은 auto·none 열과 값이 다르며, Sonnet 5.5와 Opus 5.5에는 빈칸도 있었습니다.
입력 단가만 보고 비교했던 때
처음에는 Sonnet 5.5의 입력 단가가 2달러/MTok이고 Sonnet 4.6은 3달러/MTok이라는 줄만 놓고 비교했고, 도구를 붙인 요청이라도 텍스트가 비슷하면 낮은 입력 단가 쪽이 그대로 유리할 것이라 읽었습니다.
하지만 tools를 넘기는 순간 비교 대상이 달라집니다. 도구 정의 자체가 입력에 포함되고, 모델이 도구를 호출하면 tool_use 블록이 붙고, 결과를 다시 넣으면 tool_result 블록도 입력에 들어갑니다.
여기까지는 예상한 범위였습니다.
놓친 것은 시스템 프롬프트였습니다. 도구를 실제로 호출하지 않은 요청이라도 tools가 있으면 API가 도구 사용을 켜는 특수 시스템 프롬프트를 덧붙이는데, 공식 표의 값은 이 시스템 프롬프트 몫만 따로 적은 것이고, tools 파라미터와 tool_use, tool_result 토큰은 여기서 빠집니다.
그래서 단가 한 줄만으로는 비교가 끝나지 않은 겁니다. 같은 도구 정의를 보낸다는 전제에서도 모델마다 먼저 붙는 토큰 수가 달랐습니다.
표에서는 auto와 any를 나눠 읽었습니다
공식 표는 tool_choice가 auto 또는 none일 때와 any 또는 tool일 때를 따로 적고 있었습니다. 처음에는 도구 사용 설정이니 비슷한 숫자일 것이라 생각했습니다. 실제 표의 값은 갈렸습니다.
Sonnet 5는 auto·none에서 354 토큰, any·tool에서 474 토큰입니다. Sonnet 4.6도 각각 497 토큰과 589 토큰으로 나뉘어 있었습니다. Opus 4.7은 675 토큰과 804 토큰, Haiku 4.5는 496 토큰과 588 토큰으로 표시됩니다.
Haiku 5.5도 예외는 아니었습니다. auto·none은 286 토큰인데 any·tool은 406 토큰이었습니다. 반면 Sonnet 5.5와 Opus 5.5의 any·tool 칸은 비어 있었습니다.
빈칸의 이유는 문서에 적혀 있지 않았습니다. 그래서 다른 모델의 값을 가져와 채워 넣지 않았습니다. 표에 없는 값을 추정하는 순간, 가격 비교가 문서 확인이 아니라 가정으로 바뀌기 때문입니다.
요청 횟수로 바꾸니 차이가 보였습니다
Sonnet 5.5의 auto·none 시스템 프롬프트 추가분은 286 토큰입니다. Sonnet 4.6은 497 토큰입니다. 여기에 입력 단가(2달러/MTok, 3달러/MTok)를 곱해 요청 1,000번 기준으로 직접 계산하면 각각 0.572달러와 1.491달러입니다. 문서에 적힌 금액이 아니라 제가 계산한 금액입니다.
도구 설명과 스키마 길이는 이 계산 밖입니다. 도구 호출과 결과 토큰도 마찬가지입니다. 표의 금액만 보고 요청 전체 비용이라고 읽으면 안 되는 이유가 여기 있었습니다.
토크나이저도 변수였습니다. 공식 페이지는 Claude 4.7 이후 모델이 새 토크나이저를 쓰며, 같은 텍스트에서 약 30% 더 많은 토큰이 나올 수 있다고 안내합니다. 모델을 바꾸며 입력 단가만 낮아졌다고 판단하기 어려운 이유가 하나 더 생겼습니다.
아직 직접 센 값은 없습니다
이 저장소에는 Claude API에 tools를 넘기는 코드가 아직 없습니다. 토큰 계산도 돌려 보지 않은 상태입니다. 이번에 적은 286 토큰, 497 토큰 같은 값은 모두 2026-10-19에 공식 가격 페이지 표에서 읽은 값입니다.
따라서 실제 요청에서 도구 정의가 얼마를 차지하는지, tool_use와 tool_result가 어느 정도 붙는지는 확인하지 못했습니다. 시스템 프롬프트 표의 값과 실제 요청의 토큰 수가 어떻게 연결되는지도 아직 확인하지 못했습니다.
다만 다음 비교에서는 가격표의 입력·출력 단가 옆에 Tool use pricing 표를 함께 놓게 됐습니다. tools가 있는 요청과 없는 요청은 같은 입력 단가만으로 비교할 수 없다는 점은, 문서를 다시 읽는 과정에서 분명해졌습니다.