개요
토큰은 OpenAI 모델이 텍스트를 처리하는 데 사용하는 단위입니다. 토큰은 문자 하나, 단어의 일부, 단어 전체 또는 문장 부호를 나타낼 수 있습니다. 공백도 텍스트가 토큰으로 분할되는 방식에 영향을 줍니다.
토큰 수와 단어 수는 서로 다릅니다. 같은 텍스트라도 모델, 인코딩, 언어에 따라 토큰 수가 달라질 수 있습니다.
텍스트가 토큰으로 변환되는 방식 이해
모델에 텍스트를 보내면 다음과 같이 처리됩니다.
텍스트가 토큰으로 분할됩니다.
모델이 해당 토큰을 처리합니다.
모델이 출력 토큰을 생성합니다. 여기에는 사용자가 받는 텍스트가 포함될 수 있으며, 추론 모델의 경우 답변 텍스트로 표시되지 않는 내부 추론 토큰도 포함될 수 있습니다.
영어 텍스트의 대략적인 추정치 활용
다음 추정치를 활용하면 영어 텍스트의 크기를 가늠할 수 있습니다.
토큰 1개는 약 4자입니다.
토큰 1개는 단어 약 4분의 3개에 해당합니다.
토큰 100개는 약 75단어입니다.
이는 추정치이며 정확한 수치는 아닙니다. 문장과 문단의 길이는 다양하며, 다른 언어에서는 문자, 단어, 토큰 사이의 관계가 다를 수 있습니다.
공백과 대소문자 고려
단어는 철자, 대소문자, 주변 텍스트에 따라 서로 다른 토큰으로 분할될 수 있습니다.
예를 들어 red, Red, red는 동일한 텍스트가 아닙니다. 마지막 예시에는 앞에 공백이 있습니다. 인코딩에 따라 서로 다르게 표현될 수 있습니다.
토큰 ID도 인코딩에 따라 달라집니다. 예시 토큰 ID가 모든 모델에 적용된다고 가정하지 마세요.
입력 토큰과 출력 토큰 구분
| 범주 | 설명 |
| 입력 토큰 | 요청을 통해 모델에 제공되는 토큰입니다. 프롬프트 토큰이라고도 합니다. |
| 출력 토큰 | 모델이 생성한 토큰입니다. Chat Completions에서는 이를 완성 토큰이라고 합니다. |
| 캐시된 입력 토큰 | 프롬프트 캐싱을 통해 재사용되는 입력 토큰입니다. 캐시되지 않은 입력 토큰과 요금이 다를 수 있습니다. |
| 추론 토큰 | 추론 모델이 표시되는 답변을 생성하기 전에 내부적으로 사용하는 토큰입니다. |
추론 토큰은 답변 텍스트로 표시되지 않지만 출력 사용량에 포함되며 출력 토큰으로 요금이 청구됩니다.
따라서 표시되는 답변이 짧더라도 화면에 보이는 텍스트보다 더 많은 토큰이 사용될 수 있습니다.
요청 전 토큰 수 계산
일반 텍스트 계산
텍스트가 토큰으로 어떻게 분할되는지 확인하려면 토크나이저를 사용하세요.
프로그래밍 방식으로 일반 텍스트를 토큰화하려면 tiktoken을 사용하세요. tiktoken.encoding_for_model(model) 등을 사용하여 대상 모델에 맞는 인코딩을 선택하세요.
일반 텍스트의 토큰 수에 API 요청의 모든 토큰이 반드시 포함되는 것은 아닙니다. 메시지 구조, 도구, 스키마, 이미지, 파일에 따라 전체 입력 토큰 수가 달라질 수 있습니다.
전체 Responses 입력 계산
전체 Responses API 입력을 계산하려면 입력 토큰 계산 API를 사용하세요.
메시지, 이미지, 파일, 도구, 대화를 비롯한 Responses 입력 형식을 지원합니다. 계산 결과에는 메시지 역할과 경계 등 요청 구조에 사용되는 서식 토큰이 포함됩니다.
입력 토큰 수로 모델이 생성할 출력 토큰 수를 예측할 수는 없습니다.
실제 토큰 사용량 확인
요청 후 사용량 정보를 확인하세요. 필드 이름은 엔드포인트마다 다릅니다.
Chat Completions는 prompt_tokens, completion_tokens, total_tokens를 보고합니다.
Responses는 input_tokens, output_tokens, total_tokens를 보고합니다.
Usage Dashboard에서 시간에 따른 활동도 검토할 수 있습니다. 스트리밍 사용량을 비롯한 관련 지침은 API 사용량 및 비용 검토를 참조하세요.
모델 한도 준수
모델 문서에서 컨텍스트 윈도우와 최대 출력 한도를 확인하세요. 이러한 한도는 모델마다 다를 수 있습니다.
컨텍스트 윈도우는 모델이 한 요청에서 처리할 수 있는 토큰 수를 제한합니다. 모델에는 출력 한도도 있습니다. 추론 모델에서는 표시되는 답변뿐 아니라 추론 토큰을 위한 공간도 확보하세요.
입력이 너무 크면 다음과 같이 조정할 수 있습니다.
프롬프트를 줄이거나 바꿔 쓰세요.
불필요하거나 반복되는 컨텍스트를 삭제하세요.
큰 입력을 더 작은 부분으로 나누세요.
텍스트를 보내기 전에 요약하거나 전처리하세요.
엔드포인트와 모델에서 지원하는 출력 토큰 설정을 사용하세요. Chat Completions는 max_completion_tokens를, Responses는 max_output_tokens를 사용합니다.
이러한 요청 크기 한도는 API 속도 제한 및 월간 사용량 또는 지출 한도와 별개입니다. 사용하는 모델의 모델 문서를 검토하세요.
토큰 요금 이해
토큰 기반 API 요금은 모델과 토큰 범주에 따라 달라집니다. 입력 토큰, 캐시된 입력 토큰, 출력 토큰의 요금은 서로 다를 수 있습니다. 다른 API 기능에는 다른 청구 단위가 적용될 수 있습니다.
현재 요금은 API 요금 페이지에서 확인하세요.
모델을 비교할 때는 작업 완료에 필요한 총 토큰 수와 비용을 고려하세요. 백만 토큰당 요금이 낮다고 해서 총비용도 반드시 낮은 것은 아닙니다. 모델마다 같은 텍스트를 다르게 토큰화하고 서로 다른 양의 출력이나 추론을 생성할 수 있습니다.
표시되는 응답 길이만 비교하지 말고 대표적인 작업을 테스트하세요.
여러 완성 결과 고려
엔드포인트와 모델이 여러 완성 결과 생성을 지원하는 경우 추가 완성 결과에도 토큰이 사용됩니다.
Chat Completions에서 n을 1보다 크게 설정하면 여러 선택지가 생성됩니다. 이러한 선택지에서 생성된 모든 토큰에 대해 요금이 청구됩니다.
레거시 Completions API에서는 best_of가 반환되지 않는 후보까지 생성할 수 있습니다. 예를 들어 best_of = 3이면 후보 전체에서 최대 3 × max_tokens개의 완성 토큰이 생성될 수 있습니다.
이러한 매개변수는 엔드포인트별로 다릅니다. 다른 API나 모델에서도 n 또는 best_of가 지원된다고 가정하지 마세요.
