Contenido del curso

Fine-tuning de modelos de OpenAI

Estima costos en la API de OpenAI con tiktoken

Resumen

Calcular costos en la API de OpenAI empieza por entender cómo el modelo lee tu texto. La clave está en la tokenización: convertir frases en unidades llamadas tokens que el modelo procesa y factura. Si trabajas con GPT-3.5 Turbo, GPT-4 o embeddings, dominar este cálculo te ahorra sorpresas en la facturación.

¿Qué es un token y por qué importa para el costo?

Un token es la representación numérica que los modelos de OpenAI usan para interpretar texto. Cada palabra, signo o fragmento se convierte en un número antes de que el modelo pueda trabajar con él, y la facturación se calcula sobre esa cantidad.

¿Qué es un token en OpenAI? Es la unidad mínima en la que el modelo divide tu texto para procesarlo. Una frase como El perrito come solito tiene 22 caracteres y se traduce en 7 tokens.

La cantidad de tokens varía según el modelo. No asumas que la misma frase pesa igual en GPT-4 que en GPT-3.5 Turbo, porque cada modelo puede usar un encoding distinto [00:55].

¿Cómo uso el tokenizer web de OpenAI?

La herramienta web de OpenAI te deja pegar texto y ver al instante cuántos tokens genera. Es ideal para frases cortas o pruebas rápidas, pero se queda corta cuando manejas documentos largos o conversaciones completas.

Para esos casos, necesitas algo más robusto: la librería tiktoken en Python.

¿Cómo instalo y configuro tiktoken en Python?

La librería tiktoken permite procesar grandes volúmenes de texto y estimar costos antes de hacer la llamada real a la API. El flujo arranca con la instalación [01:50]:

bash pip install tiktoken

Después importas la librería y cargas el encoding correspondiente a tu modelo. Para GPT-4, GPT-3.5 Turbo y el modelo de embeddings text-embedding-ada-002, el encoding correcto es cl100k_base [02:20].

python import tiktoken

encoding = tiktoken.get_encoding("cl100k_base")

También puedes pedirle a tiktoken que detecte el encoding por modelo, lo cual es útil cuando trabajas con varios al mismo tiempo:

python encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")

¿Cómo tokenizo una frase con tiktoken?

Una vez cargado el encoding, llamas al método encode y obtienes una lista de números. Esa lista es la traducción del texto al lenguaje del modelo.

python tokens = encoding.encode("El perrito come solito") len(tokens) # 7

El resultado coincide con lo que muestra el tokenizer web: 7 tokens. Hasta aquí sirve para frases sueltas, pero los modelos de chat reciben mensajes estructurados con roles, no frases planas.

¿Cómo cuento tokens en una conversación con varios mensajes?

Las conversaciones de chat se envían en formato de lista con roles: system, user y assistant. Cada mensaje incluye metadata que también consume tokens, así que no basta con contar el contenido.

OpenAI publica en su cookbook una función llamada num_tokens_from_messages que considera la estructura completa. Solo la copias en tu notebook y le pasas tu lista de mensajes [04:30].

python num_tokens_from_messages(example_messages, model="gpt-3.5-turbo")

En el ejemplo de la clase, una conversación completa con system, user y assistant suma 130 tokens. Pero ese número mezcla entrada y salida, y para calcular el costo real necesitas separarlos.

¿Por qué separar input y output al contar tokens? Porque OpenAI cobra precios distintos por cada uno. El input es lo que envías (system y user) y el output es la respuesta del modelo (assistant).

¿Cómo separo input y output en el conteo?

Ejecutas la función dos veces sobre la misma conversación, eliminando primero los mensajes del assistant y luego los de system y user. Así obtienes los totales por separado.

  • Input (system + user): 61 tokens.
  • Output (assistant): 72 tokens.
  • Total combinado: 130 tokens.

Con estos dos números ya puedes ir a la calculadora y estimar tu gasto.

¿Cómo calculo el costo en dólares de una conversación?

La página de precios de OpenAI muestra tarifas por cada 1.000 tokens, diferenciadas entre input y output. Para GPT-3.5 Turbo, la fórmula es directa: divides tus tokens entre 1.000 y multiplicas por el precio correspondiente.

Siguiendo el ejemplo de la clase:

  1. Costo del input: 61 / 1.000 × precio input = 0.000061 dólares.
  2. Costo del output: 72 / 1.000 × 0.0020 = 0.000144 dólares.
  3. Costo total de la conversación: aproximadamente 0.000205 dólares.

Es una cifra mínima porque la conversación es corta, pero a escala (miles de usuarios, mensajes largos, contexto extenso) la suma se vuelve significativa. Por eso conviene estimar antes de desplegar a producción.

¿Cómo aplico esto a mi propio proyecto?

El reto que deja la clase es claro: tokeniza cinco conversaciones tuyas, separa input y output, calcula el costo de cada una y compara. Vas a notar cómo crece el gasto cuando los prompts incluyen instrucciones largas o cuando el modelo genera respuestas extensas.

¿Ya hiciste el cálculo con tus propios mensajes? Comparte tus resultados y el modelo que usaste en los comentarios.