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
De idea desordenada a brief de campaña
Resumen
Convertir una idea suelta en un briefing de contenido claro es más rápido de lo que crees usando OpenAI. Si trabajas con Python y quieres automatizar la parte más tediosa de planear contenido, aquí aprendes a crear una función que transforma notas desordenadas en un plan estructurado con objetivo, audiencia, tono y canales.
La premisa es simple: casi nunca arrancamos con un briefing perfecto. Empezamos con una nota rápida, un mensaje suelto o una idea a medio cocinar. La meta es que el modelo haga el trabajo pesado de ordenar esa idea por ti.
Qué hace la función generate_brief y cómo se conecta a OpenAI
La pieza central es una tercera función dentro del cliente de OpenAI, que se suma a las dos que ya existían. Se llama generate_brief, recibe una idea como string y devuelve otro string [00:26].
Esta función se conecta al endpoint responses.create usando el mismo modelo que se venía trabajando, GPT 5.4 [00:38]. La clave está en las instrucciones que le pasas al llamado.
Las instrucciones le piden al modelo que convierta ideas desordenadas en briefings claros de contenido, e incluya cinco elementos concretos:
- Objetivo del contenido.
- Audiencia a la que apunta.
- Tono recomendado.
- Canales sugeridos.
- Próximos pasos.
Además, le indica que responda en español [00:44]. El input que recibe es la idea que llega directamente como parámetro, y la respuesta se obtiene a través de output_text, el mismo parámetro que ya se usaba antes [01:02].
¿Qué es un briefing de contenido? Es un documento que ordena una idea suelta en objetivo, audiencia, tono, canales recomendados y próximos pasos, para que sepas exactamente qué crear y para quién.
Cómo agregar el endpoint /brief en el servidor
Para que la función funcione en la app, hay que tocar el archivo server. Hasta ese punto existían dos rutas: el endpoint raíz / y el de generate [01:20].
El nuevo endpoint se llama /brief. Su función recibe una idea desde un formulario y usa el resultado de generate_brief con esa idea [01:30]. Luego renderiza un HTML con tres elementos: un título de briefing generado, el resultado y un botón para devolver [01:40].
Aquí aparece un detalle práctico que suele frenar a más de uno.
¿Por qué mi función aparece en blanco y no se ejecuta? Porque no la importaste. Al agregar
generate_briefal import, junto agenerate_text, el editor la reconoce, cambia de color y queda lista para usarse.
Con la función ya importada, falta un cambio más para poder consumir el endpoint desde el home [01:53].
Cómo conectar el formulario del home con el endpoint
En el endpoint raíz se agrega un segundo formulario que salta de línea del original. Este nuevo formulario dice "convertir idea en briefing" [02:07].
Ese form apunta al endpoint /brief, incluye un text area llamado idea y un botón que dice generar briefing [02:15]. Con esto guardado, ya puedes levantar el servidor y probarlo en el navegador.
Cómo probar el briefing en el navegador
Para levantar el servidor se usa el comando uvicorn app:app --reload, que activa la URL local [02:24]. Al abrir el navegador aparecen dos text areas: el original del primer endpoint y el nuevo para convertir idea en briefing [02:38].
La prueba usa una idea concreta: organizar un evento en Bogotá sobre IA para developers, invitando también a personas no técnicas que quieran crear software con nuevas herramientas [02:47]. Al hacer clic en generar briefing, el navegador muestra que está llamando al endpoint de OpenAI.
El resultado llega organizado con objetivos, detalles y recomendaciones. El modelo sugiere:
- Incluir demos en el evento.
- Atraer perfiles como developers, founders, PMs, startups y perfiles corporativos.
- Separar el contenido por canal: Twitter, comunidades de WhatsApp, Telegram, Discord, Meetup, Eventbrite, Luma e Instagram [03:15].
Y aquí viene lo interesante: el modelo generó el contenido y lo separó por canal, pero el texto sigue siendo difícil de leer.
Por qué el texto libre todavía es un problema
Este primer flujo ya es útil. El modelo organiza objetivo, audiencia, propuesta de valor, tono, canales y próximos pasos [03:44]. Pero devuelve texto libre, sin una estructura separada.
Eso complica que una app tome ese contenido y lo use en casos específicos, como mostrar una card independiente para LinkedIn y otra para cada canal [03:30]. El texto plano no se deja manipular tan fácil.
¿Por qué necesito estructura y no solo texto libre? Porque una app no puede tomar un bloque de texto y separarlo en piezas útiles. Con estructura, cada canal o campo queda identificado y listo para usarse por separado.
La solución llega con structured outputs usando la librería Pydantic, que le da al briefing una estructura confiable [03:52].
¿Ya probaste generar tu propio briefing con una idea suelta? Cuéntame en los comentarios qué evento o pieza de contenido le pasaste al modelo.