Contenido del curso
Interfaces de la API y streaming
Function calling y salidas estructuradas
Reducción de costos con caching y batch
Ingeniería de producción y control de calidad
Proyecto final de consultas sobre documentos
Crear un cliente reutilizable para OpenAI
Resumen
Cuando haces tu primera llamada a la API de OpenAI y dejas todo en un solo archivo, el proyecto crece en desorden muy rápido. Aquí aprenderás a crear un cliente reutilizable de OpenAI en Python, una capa que puedes importar en varias partes del proyecto sin repetir la configuración. Es ideal para developers que empiezan a construir aplicaciones con IA.
Por qué conviene separar el cliente en su propio paquete
Dejar la llamada a la API dentro de main.py funciona para una prueba rápida, pero no escala. Si en el futuro necesitas conectarte a la API desde otro archivo, tendrías que copiar y pegar toda la configuración una y otra vez.
La solución es mover esa lógica a un subpaquete que puedas importar cuando lo necesites. Así centralizas la configuración en un solo lugar y tu código queda mucho más limpio.
¿Qué es un paquete en Python? Es una carpeta que contiene un archivo
__init__.py, lo que le indica a Python que puede importar el contenido que vive dentro de ella. Sin ese archivo, la carpeta no funciona como paquete importable.
Cómo estructurar la carpeta app y el archivo del cliente
Dentro de tu carpeta de Python creas una nueva carpeta llamada app, que usarás como subpaquete [00:38]. El primer paso es agregar el archivo __init__.py, que convierte esa carpeta en un paquete importable desde otros archivos [01:06].
Luego, dentro de la misma carpeta app, creas el archivo openai_client.py. Ahí migrarás todo lo que antes vivía en main.py:
- Los imports de la parte superior.
- El
load_dotenvpara cargar las variables de entorno. - El primer llamado al client de OpenAI.
Con esa estructura lista, ya tienes la base para construir tu función reutilizable.
Cómo construir el wrapper generate_text
El corazón de este cliente es una función llamada generate_text, que actúa como wrapper de la Response API [01:53]. Recibe un prompt (un string) y devuelve un diccionario.
python def generate_text(prompt: str) -> dict: """Genera texto a partir de un prompt usando la Response API.""" response = client.responses.create( model="gpt-5.4", input=prompt, instructions="Eres un asistente experto en estrategia de contenido", ) return { "text": response.output_text, "usage": response.usage, "response_id": response.id, }
Dentro del llamado a responses.create le pasas tres parámetros clave: el model, el input (que es el prompt que recibe la función) y unas instructions que definen el rol del asistente [02:35].
La función devuelve tres cosas útiles:
- El texto, que es el
response.output_text. - El usage, para saber cuántos tokens estás consumiendo.
- El response id, para llevar el rastro de cada respuesta [02:52].
Cómo importar y usar el cliente desde main.py
Con el cliente listo, vuelves a main.py y borras todo lo que tenías del response hacia arriba, porque ya vive dentro del cliente [03:14].
Ahora solo necesitas importar la función desde tu nuevo paquete:
python from app.openai_client import generate_text
result = generate_text("Quiero lanzar un workshop de AI para developers")
print(result["text"]) print(result["usage"])
En lugar de llamar directamente a la API con toda la estructura de OpenAI, defines un result igual al uso de generate_text. Como la respuesta cambió de response a result, ajustas los prints para acceder a result["text"] y result["usage"] [04:03].
El resultado es un main.py mucho más pequeño y legible, que ya no contiene el cliente sino que lo importa como paquete.
Qué muestran los tokens al ejecutar el proyecto
Al correr python main.py en la terminal, el proyecto importa el cliente desde el nuevo archivo y ejecuta la llamada [04:36].
Al final verás el print del usage con el detalle de tokens:
- Input tokens: 31 (el prompt que enviaste).
- Output tokens: 1.621 (la respuesta generada).
- Total: 1.652 tokens en toda la llamada [04:59].
¿Qué son los tokens en una API de IA? Son las unidades en que el modelo divide el texto de entrada y salida. Cuentan tanto tu prompt como la respuesta, y el total determina cuánto cuesta cada llamada según el modelo que uses.
Y aquí viene lo interesante: en la sección de recursos encuentras la documentación para entender los costos por tokens de acuerdo al modelo [05:14].
Con esto, tu función para generar texto ya es totalmente reutilizable. ¿Te animas a probar tu propio wrapper y comentar qué prompt usaste para tu primera llamada?