유용한 사고방식

출력 토큰을 답변의 조각이자 답변을 만들어 가는 단계라고 생각해 보세요.

텍스트 모델은 뒤에서 완성된 답변을 작성한 다음 이를 토큰으로 나누는 방식으로 작동하지 않습니다. 모델은 한 번에 하나의 토큰씩 답변을 만들어 갑니다. 각 토큰이 생성될 때마다 지금까지 늘어난 시퀀스가 다음 토큰을 선택하는 데 사용되는 정보의 일부가 됩니다.

이 차이 때문에 긴 답변은 짧은 답변보다 생성하는 데 더 오래 걸립니다. 출력 토큰이 하나 추가될 때마다 생성 단계가 하나 더 필요하기 때문입니다.

출력 토큰이 생성되는 방식

모델은 입력을 처리한 후 다음에 올 수 있는 모든 토큰에 점수를 부여합니다. 생성 설정에 따라 이러한 후보 중 하나가 선택됩니다. 선택된 토큰은 시퀀스에 추가되고, 모델은 이 과정을 반복합니다.

process the input
        |
        v
score possible next tokens
        |
        v
choose one output token ----+
        |                   |
        v                   |
append it to the sequence --+
        |
        v
stop when a stopping condition is met

이 반복 과정은 다음과 같은 이유로 종료될 수 있습니다.

  • 모델이 자연스러운 끝에 도달함
  • 설정된 중지 시퀀스를 생성함
  • 출력 토큰 한도에 도달함
  • 도구 호출과 같은 작업으로 전환함
  • 서비스가 모델별 또는 정책별 다른 중지 조건을 적용함

정확한 토큰 수는 모델의 토크나이저에 따라 달라집니다. 짧은 단어는 하나의 토큰일 수 있습니다. 더 길거나 익숙하지 않은 단어는 여러 토큰으로 나뉠 수 있습니다. 공백, 구두점, 코드, 비영어 텍스트도 서로 다르게 나뉠 수 있습니다. 따라서 문자 수와 단어 수로 출력 길이를 추정할 수는 있지만, 정확히 결정할 수는 없습니다.

출력 토큰으로 계산되는 것

일반적인 텍스트 응답에서는 눈에 보이는 답변이 생성된 출력 토큰으로 구성됩니다. 생성된 JSON과 도구 호출 인수도 모델의 출력입니다. 애플리케이션이 원시 텍스트를 표시하는 대신 이를 인터페이스 작업으로 렌더링하더라도 마찬가지입니다.

제공업체의 사용량 범주는 여기에 또 다른 층위를 더합니다. “출력 토큰”은 눈에 보이는 생성 시퀀스를 가리킬 수도 있고, 측정된 총량을 가리킬 수도 있습니다. 이러한 총량의 기준은 표준화되어 있지 않습니다.

  • 일부 API는 생성된 토큰을 완성 토큰이라고 부릅니다.
  • 일부는 숨겨진 추론을 출력 총량에 포함하고 별도의 세부 내역을 제공합니다.
  • 일부는 눈에 보이는 후보 토큰과 사고 토큰을 별도 필드로 보고합니다.
  • 특수한 출력 유형에는 별도의 세부 사항이나 과금 규칙이 적용될 수 있습니다.

특정 요청에 대한 신뢰할 수 있는 출처는 해당 제공업체와 엔드포인트가 반환하는 사용량 데이터입니다. 눈에 보이는 응답을 토크나이저에 그대로 넣는 것만으로 과금되는 출력량을 추론하지 마세요. 현재의 OpenAI, AnthropicGoogle 문서에서도 레이블과 세부 내역이 서로 다르다는 점을 확인할 수 있습니다.

예제로 살펴보기

출력 토큰을 최대 100개로 설정한 API 요청을 생각해 봅시다.

모델이 완전한 답변을 생성하고 24개 토큰 후에 중지했다고 합시다. 사용량 데이터에는 다음과 같이 기록됩니다.

{
  "input_tokens": 18,
  "output_tokens": 24,
  "total_tokens": 42
}

출력 토큰 수는 24개입니다. 100토큰 설정은 단지 상한선일 뿐입니다. 모델이 100개 토큰을 생성하도록 강제하지 않으며, 그 자체로 100개 토큰이 과금되었다는 의미도 아닙니다.

이제 모델이 100토큰 상한에 도달할 때까지 계속 생성한다고 가정해 봅시다. 이 요청은 여전히 기술적으로 성공한 API 응답을 반환할 수 있지만, 답변이 문장 중간이나 구조 중간에서 끝날 수 있습니다. 프로덕션 애플리케이션에서는 반환된 텍스트가 완전하다고 가정하지 말고 응답의 중지 이유를 확인해야 합니다.

여기에 한 가지 변수가 더 있습니다. 추론 모델은 눈에 보이는 답변을 생성하기 전에 내부 추론을 수행할 수 있습니다. 제공업체에 따라 사용량에 이러한 숨겨진 토큰이 output_tokens에 포함되거나 별도의 사고 필드에 보고될 수 있습니다. 따라서 눈에 보이는 답변의 토큰 수와 측정된 출력 토큰 수가 서로 다를 수 있습니다.

출력 토큰이 중요한 이유

비용

토큰 기반 과금 서비스는 일반적으로 입력과 출력을 별도로 측정하며, 각각의 요율이 다를 수 있습니다. 따라서 요청한 상한선뿐 아니라 실제 출력 사용량도 각 요청 비용의 일부입니다. 제공업체별 할당량 시스템에서는 실제 생성량을 기준으로 과금하더라도 상한선에 따라 용량을 일시적으로 예약할 수 있습니다.

응답 시간

출력 토큰은 순차적으로 생성됩니다. 일반적으로 출력이 많을수록 생성 단계가 늘어나 완전한 응답을 기다리는 시간이 길어집니다. 스트리밍을 사용하면 일부 출력이 더 빨리 표시될 수 있지만, 나머지 토큰을 생성하는 데 필요한 작업이 사라지는 것은 아닙니다.

완전성

출력 상한선은 길이를 제어하는 데 도움이 되지만, 상한선이 너무 낮으면 산문, 코드, JSON 또는 도구 인수가 중간에 잘릴 수 있습니다. 완전성이 중요한 경우에는 항상 중지 이유를 확인하세요.

사용 가능한 컨텍스트

입력과 출력은 모두 모델의 컨텍스트 윈도우 공간을 사용합니다. 사용 가능한 공간 대부분을 입력에 사용한 요청은 모델과 엔드포인트의 제한 및 계산 규칙에 따라 생성에 사용할 수 있는 공간이 줄어들 수 있습니다.

흔한 오해

“출력 토큰은 단어와 같다”

그렇지 않습니다. 토큰은 완전한 단어, 단어의 일부, 구두점, 공백 또는 기타 단위일 수 있습니다. 같은 문장도 토크나이저에 따라 토큰 수가 달라질 수 있습니다.

“최대 출력 설정은 예상 출력량이다”

최대 출력 설정은 상한선입니다. 모델은 상한에 도달하기 전에 중지할 수 있습니다. 또한 제공업체가 더 낮은 모델 한도나 내부 추론을 포함하는 공유 예산을 적용할 수도 있습니다.

“API가 텍스트를 반환했다면 답변은 완전하다”

반드시 그렇지는 않습니다. 출력 한도에 도달하면 길이와 관련된 중지 이유와 함께 일부 텍스트만 반환될 수 있습니다. 닫는 문자 하나만 빠져도 결과를 사용할 수 없게 되는 코드와 구조화된 데이터에서는 특히 중요합니다.

“눈에 보이는 응답은 과금된 출력량과 같다”

대체로 그렇지만 항상 그런 것은 아닙니다. 숨겨진 추론, 여러 개의 생성 후보 또는 엔드포인트별 계산 방식 때문에 사용량이 눈에 보이는 텍스트보다 클 수 있습니다. 해당 서비스에서는 반환된 사용량 필드를 신뢰할 수 있는 기준으로 사용하세요.

“출력 길이는 프롬프트에 의해 고정된다”

프롬프트는 길이에 영향을 주지만, 생성은 여전히 조건부로 이루어집니다. 모델의 동작, 샘플링 설정, 중지 시퀀스, 도구 사용, 안전 동작에 따라 출력이 끝나는 지점이 달라질 수 있습니다.

모델 요청에서 출력 토큰이 차지하는 위치

요청은 입력 토큰으로 시작합니다. 그런 다음 모델이 출력 토큰을 생성합니다. 추론 모델은 내부적으로 추론 토큰을 사용할 수도 있으며, 이를 보고하고 과금하는 방식은 제공업체마다 다릅니다.

이 구분은 입력 토큰 vs. 출력 토큰 vs. 추론 토큰에서 나란히 비교하면 가장 쉽게 이해할 수 있습니다. 서비스 동작을 측정한다면 출력 생성은 초당 토큰 수추론 지연 시간과도 직접 연결됩니다.

실용적인 원칙은 간단합니다. 적절한 출력 상한선을 설정하고, 실제 사용량을 확인하며, 응답을 완전한 것으로 간주하기 전에 중지 이유를 점검하세요.