시스템 프롬프트가 요금의 95%를 먹는다 — 반복 비용 실측
API로 챗봇이나 자동화를 만들면 시스템 프롬프트가 매 호출마다 따라갑니다. 한 번은 작아 보이는데, 호출 수를 곱하면 이야기가 달라집니다.
얼마나 달라지는지 직접 재봤습니다. 결론: 호출당 입력 토큰의 95%가 시스템 프롬프트였습니다. 사용자가 실제로 물어본 내용은 5%였습니다.
측정 조건
- 인코딩
o200k_base·tiktoken 0.14.0· 측정일 2026년 10월 13일 - 쇼핑몰 고객 상담 챗봇을 가정하고 시스템 프롬프트를 짧게·보통·길게 세 가지로 작성
- 사용자 메시지는 “주문한 지 3일 됐는데 아직 배송이 안 왔어요”(34자·22토큰) 고정
- 표본은 전부 직접 작성
결론부터
| 시스템 프롬프트 | 토큰 | 호출 1회 합계 | 시스템 비중 |
|---|---|---|---|
| 짧게 (한 줄) | 23 | 45 | 51% |
| 보통 (규칙 5줄 + 환불 규정) | 154 | 176 | 88% |
| 길게 (+ FAQ·배송·금지사항) | 391 | 413 | 95% |
긴 버전에서는 사용자 질문이 전체의 5%입니다. 나머지 95%는 매번 똑같은 내용을 다시 보내는 데 쓰입니다.
호출 수를 곱하면
| 시스템 프롬프트 | 1,000회 | 10,000회 | 100,000회 |
|---|---|---|---|
| 짧게 | 45,000 | 450,000 | 4,500,000 |
| 보통 | 176,000 | 1,760,000 | 17,600,000 |
| 길게 | 413,000 | 4,130,000 | 41,300,000 |
하루 300건을 처리하는 작은 상담 챗봇이면 한 달에 약 9,000회입니다. 긴 시스템 프롬프트를 쓰면 월 370만 토큰이 들어가고, 그중 350만 토큰이 시스템 프롬프트입니다.
짧은 버전으로 바꾸면 10,000회 기준 368만 토큰이 절약됩니다.
어디를 줄일 수 있나 — 조각별로 뜯어보기
긴 버전을 부분별로 재봤습니다. 10,000회 호출 기준으로 환산했습니다.
| 조각 | 토큰 | 10,000회 환산 |
|---|---|---|
| FAQ 3개 | 97 | 970,000 |
| 답변 규칙 5줄 | 76 | 760,000 |
| 환불 규정 3줄 | 55 | 550,000 |
| 금지 사항 3줄 | 44 | 440,000 |
| 역할 한 줄 | 13 | 130,000 |
FAQ가 가장 비쌉니다. 그런데 FAQ는 대부분의 대화에서 쓰이지 않습니다. 배송을 묻는 손님에게 영수증 FAQ는 필요 없는데도 매번 같이 보내집니다.
그래서 어떻게 줄이나
1. 매번 필요하지 않은 것은 빼세요
FAQ·규정표처럼 특정 질문에만 필요한 내용은 시스템 프롬프트에서 빼고, 질문을 보고 필요할 때만 붙이는 편이 낫습니다. 질문에 “환불”이 들어갈 때만 환불 규정을 붙이는 식입니다.
이 방식은 호출마다 분기가 생겨 코드가 조금 복잡해집니다. 호출 수가 적다면 그냥 다 넣는 게 낫습니다 — 1,000회면 97,000토큰이라 큰돈이 아닙니다. 10,000회를 넘어가면 그때 분리를 고민하세요.
2. 규칙은 문장이 아니라 목록으로
같은 지시도 풀어 쓴 문장보다 짧은 목록이 쌉니다. 위 표에서 ‘답변 규칙 5줄’이 76토큰인데, 이걸 줄글로 늘려 쓰면 쉽게 두 배가 됩니다. 다만 너무 줄이면 지시가 흐려집니다 — 토큰을 아끼려고 규칙을 뭉개면 답변 품질이 떨어져 재질문이 늘고, 그게 더 비쌉니다. 이 글은 비용만 측정했고 품질은 측정하지 않았습니다. 줄인 뒤에는 실제 답변이 전과 같은지 꼭 확인하세요.
3. 프롬프트 캐싱이 있으면 쓰세요
일부 서비스는 반복되는 앞부분을 캐싱해 할인해 줍니다. 이 경우 시스템 프롬프트가 길어도 비용 부담이 크게 줄어듭니다. 쓰는 서비스가 지원하는지 먼저 확인하세요. 캐싱이 되면 위 계산은 적용되지 않습니다.
직접 재보기
본인 시스템 프롬프트가 몇 토큰인지는 토큰 계산기에 붙여 넣으면 바로 나옵니다. 거기에 예상 호출 수를 곱해 보세요.
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
n = lambda t: len(enc.encode(t))
system = open("시스템프롬프트.txt", encoding="utf-8").read()
user = "사용자 질문 예시"
s, u = n(system), n(user)
print("시스템 %d토큰 / 사용자 %d토큰" % (s, u))
print("호출당 %d토큰 중 시스템이 %.0f%%" % (s + u, s / (s + u) * 100))
for calls in (100, 1_000, 10_000, 100_000):
print("%7d회: 시스템만 %s토큰" % (calls, format(s * calls, ",")))한계: 이 측정은 입력 토큰만 다룹니다. 실제 요금은 출력 토큰이 더 비싼 경우가 많아, 전체 비용에서 시스템 프롬프트가 차지하는 비중은 여기 수치보다 낮아집니다. 또 프롬프트 캐싱을 지원하는 서비스에서는 반복 비용이 크게 줄어듭니다. 대화가 여러 턴 이어지는 경우에는 이전 대화도 함께 재전송되므로 계산이 또 달라집니다. 시스템 프롬프트 예시는 쇼핑몰 상담 한 가지라 다른 업무에서는 길이가 다를 수 있습니다.
정리
- 긴 시스템 프롬프트에서는 호출당 입력의 95%가 시스템 프롬프트였습니다.
- 사용자 질문은 5%인데 요금은 전체에 붙습니다.
- 10,000회 기준 길게 413만 vs 짧게 45만 토큰 — 9배 차이입니다.
- FAQ가 가장 비싼 조각이고, 대부분의 대화에서 쓰이지 않습니다.
- 호출이 적으면 그냥 다 넣으세요. 1만 회를 넘을 때 분리를 고민하면 됩니다.
- 프롬프트 캐싱을 지원하면 먼저 그것부터 켜세요.
측정일: 2026년 10월 19일 / tiktoken 0.14.0 / o200k_base / 입력 토큰 기준