비용 최적화가이드
출력 토큰 줄이기: 답변 길이, max_tokens, 중지 시퀀스
설계로 AI 답변을 단축하세요: 제한된 형식을 요청하고, max_tokens를 상한으로 유지하고, 중지 시퀀스를 사용한 다음 1,000건 요청의 비용을 확인하세요.

이 페이지의 내용
봇이 100개면 충분한 답변을 400 토큰으로 내놓고, 당신은 그 모든 토큰에 비용을 지불합니다. 해결책은 대부분 프롬프트에 있습니다: 길이를 조절하는 손잡이가 아니라 안전 상한으로 max_tokens를 유지하고, 실제로 무엇이 돌아왔는지 확인하려면 usage.을 확인하세요.
이것이 중요한 이유는 우리가 제공하는 모든 모델에서 출력이 더 비싼 쪽이기 때문입니다: 가격 페이지에서 실시간 가격을 확인하세요. 같은 질문, 더 짧은 답변, 더 적은 청구서.
한도가 아니라 프롬프트부터 시작하세요#
하루에 2,000개의 티켓을 처리하는 지원 봇을 운영한다고 가정해 봅시다. 각 티켓에는 카테고리와 한 문장의 이유가 필요합니다. 모델을 그대로 두면 친절한 문단, 주의 사항 목록, 추가 도움 제안을 작성합니다. 바로 그곳에서 400 토큰이 소모됩니다.
비교하기
같은 티켓, 두 가지 프롬프트
개방형
시스템: 당신은 친절한 지원 도우미입니다. 사용자: 이 티켓이 어떤 종류인지 알려주세요: "내 카드는 주문 1182에 대해 두 번 청구되었습니다." 답변: 인사말, 설명, 도움 제안이 포함된 문단 (약 400 토큰).
제한형
시스템: 정확히 두 줄로 답하세요. 1번째 줄: 카테고리, billing, bug, other 중 하나. 2번째 줄: 최대 15단어의 이유. 인사말 없음.
사용자: 같은 티켓.
답변: billing 그리고 짧은 이유 하나 (약 100 토큰 이하).
요령은 답변의 형태를 설명하는 것입니다: 줄 수, 닫힌 레이블 목록, 단어 제한. "간결하게"는 "두 줄, 15단어"보다 효과가 떨어집니다. 모델이 셀 수 있는 구체적인 것이 있기 때문입니다. 레이블만 필요하다면 레이블만 요청하고 다른 것은 요청하지 마세요. billing을 반환해야 하는 분류기는 스스로를 설명할 수 있어서는 안 됩니다.
JSON 추출도 마찬가지입니다. 모델이 JSON을 산문으로 감싸면 그 산문은 비용을 지불하고 버리는 출력입니다. 시스템 메시지에 "JSON 객체만 반환하고 앞뒤에 텍스트를 넣지 마세요"를 넣으세요. 돌아온 것을 파싱하는 방법은 LLM 응답에서 JSON을 추출하는 방법을 참조하세요.
max_tokens는 안전벨트입니다#
max_tokens: 100을 설정하고 끝났다고 생각하기 쉽습니다. 그것으로 짧은 답변을 기대하지 마세요. DeepSeek의 API 참조(2026년 11월 2일 확인)는 max_tokens을 완료 시 생성할 수 있는 최대 토큰 수로 설명하며, 입력과 출력의 합은 모델의 컨텍스트 길이로 제한됩니다. 생성은 중단되지만 모델이 더 짧은 답변을 계획하게 만들지는 않습니다.
따라서 400 토큰을 쓰려던 모델이 100을 받으면 문장이 중간에 끝나고, finish_reason이 length로 설정되며, 100 토큰 전부에 대한 청구서가 나옵니다. 사용할 수 없는 답변에 비용을 지불한 것입니다. 그 이유와 복구 방법은 AI 답변이 문장 중간에 멈추는 이유와 finish_reason "length" 수정에서 다룹니다. 여기서 반복하지 않겠습니다.
작동하는 분할은 간단합니다:
- 프롬프트가 좋은 답변의 길이를 결정합니다;
max_tokens은 가장 긴 좋은 답변보다 약간 위에 두어, 폭주하는 응답이 모델의 출력 한도(DeepSeek-V4-Flash에서 최대 32,768 토큰)까지 커지는 대신 잘리도록 합니다.
두 줄 티켓 답변에는 150이면 충분합니다. 한 단어 레이블에는 20입니다.

중지 시퀀스는 마커에서 답변을 끝냅니다#
DeepSeek의 참조에서 stop은 최대 16개의 시퀀스를 받으며, 모델이 그 중 하나를 생성하려 할 때 생성이 중단됩니다. 그럴 때 finish_reason은 자연스러운 끝과 마찬가지로 stop입니다. 형식에 끝 마커가 있을 때 유용합니다. 답변을 요청한 다음 END이 있는 줄을 요청하고, stop에 END을 넣으세요. 자신의 설정에서 한 번 테스트하세요: 한 번 호출하고 finish_reason가 stop인지, 텍스트가 마커 앞에서 끝나는지 확인하세요.
한 가지 규칙: 중지 텍스트는 좋은 답변 안에 나타날 수 없는 것이어야 합니다. \n\n에 대한 중지는 두 문단 답변을 첫 문단 후에 자릅니다.
실행하고 측정할 수 있는 요청#
다음은 제한형 티켓 호출입니다. 모델 ID는 CheapTokens 문서의 전체 gateway_id이고, 기본 URL은 https:/입니다. 문서는 키 생성 방법을 보여줍니다; 환경 변수에 넣으세요.
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"max_tokens": 150,
"messages": [
{"role": "system", "content": "Reply with exactly two lines. Line 1: the category, one of billing, bug, other. Line 2: a reason in at most 15 words. No greeting."},
{"role": "user", "content": "My card was charged twice for order 1182."}
]
}'응답에서 두 가지가 중요합니다: choices[0].와 prompt_tokens 및 completion_가 있는 usage 객체입니다. openai 패키지를 사용하는 Python에서는 다음과 같습니다:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
r = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
max_tokens=150,
messages=[
{"role": "system", "content": "Reply with exactly two lines. Line 1: the category, one of billing, bug, other. Line 2: a reason in at most 15 words. No greeting."},
{"role": "user", "content": "My card was charged twice for order 1182."},
],
)
print(r.choices[0].message.content)
print(r.choices[0].finish_reason, r.usage.completion_tokens)형식을 신뢰하기 전에 실제 티켓 10개로 실행하세요. completion_가 작게 유지되고 finish_reason이 항상 stop이면 프롬프트가 일을 하는 것입니다. length이 보이면 상한이 좋은 답변에 필요한 것보다 낮은 것입니다: 상한을 올리거나 프롬프트를 조이세요, 둘 다 맹목적으로 하지 마세요.
짝 맞추기
필드가 알려주는 것
왼쪽 항목을 탭한 다음 짝을 탭하세요
- lengthmax_tokens 한도에 도달함
- stop자연스러운 중지 지점 또는 중지 시퀀스
- usage.completion_tokens답변의 토큰, 청구서의 출력 측면
finish_reason가 stop가 아니면 먼저 한도를 확인하세요.
1,000건 요청에서 절약되는 것#
이제 청구서입니다. 티켓과 지침이 300 입력 토큰이고, 개방형 답변이 400 출력 토큰, 제한형이 100이라고 가정합니다. 이는 예시를 위한 가정입니다; 자신의 usage에서 숫자를 바꿔 넣으세요. 1,000건 요청에서 두 경우 모두 300 × 1,000 = 300,000 입력 토큰이고, 400 × 1,000 = 400,000 출력 토큰 대 100 × 1,000 = 100,000입니다.
개방형 답변, 1,000건 요청:
| 모델 | 입력 $/1M | 출력 $/1M | 요청당 | 1,000회 요청 | OpenRouter, 1,000회 요청 |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000022 | $0.022 | $0.0433 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000045 | $0.0445 | $0.077 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000075 | $0.075 | $0.90 |
요청당 입력 300개 및 출력 400개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.
제한형 답변, 1,000건 요청:
| 모델 | 입력 $/1M | 출력 $/1M | 요청당 | 1,000회 요청 | OpenRouter, 1,000회 요청 |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00001 | $0.01 | $0.0184 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000015 | $0.0145 | $0.035 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00003 | $0.03 | $0.36 |
요청당 입력 300개 및 출력 100개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.
입력 측면은 움직이지 않으며, 그것이 핵심입니다: 줄인 부분만 저렴해지고, 그 부분이 더 높은 가격을 가진 부분입니다. 모델별로 같은 1,000개 티켓은 DeepSeek-V4-Flash에서 개방형 $0.0445, 제한형 $0.0145입니다. 총계로 입력과 출력을 합산하면 표의 세 모델 모두 OpenRouter의 참조 가격보다 저렴합니다. 짧은 답변의 경우 위 표에서 모델을 선택하세요: 자신의 입력과 출력에 해당하는 행을 비교하세요. GLM-5.3-Flash(1M 출력 토큰당 $0.04)는 답변이 더 길게 유지되는 곳, 최대 8,192 토큰에 적합합니다; 나머지는 DeepSeek 페이지에 있습니다.
내가 적용할 순서#
순서대로 배열하기
단계를 합리적인 순서로 배치
항목을 드래그하거나 화살표를 사용하세요
- 답변 형식을 프롬프트에 작성
- max_tokens를 가장 긴 좋은 답변보다 약간 위로 설정
- API가 stop을 허용하고 형식에 끝 마커가 있으면 중지 시퀀스 추가
- 모든 호출에 대해 completion_tokens와 finish_reason 기록
- 1,000건 요청 배치의 비용을 전후로 비교
4단계는 사람들이 건너뛰는 단계입니다. 그것 없이는 프롬프트 변경이 효과가 있었는지, 아니면 몇 개의 긴 답변이 평균을 끌어올리는지 알 수 없습니다. 이미 지출을 추적하고 있다면 Python에서 토큰 계산 접근법과 입력 vs 출력 토큰이 계속하기 좋은 곳입니다.



