Menu iconMenu icon
OpenAI API Biblia Volumen 2

Proyecto: Generador de Historias Visuales: flujo de imágenes GPT-4o + DALL·E basado en la narrativa del prompt

4. Explicación Paso a Paso (Referenciando el Código Anterior)

  1. Configuración e Inicialización:
    • El script importa las bibliotecas necesarias (openaiostimedotenvdatetime).
    • Carga el OPENAI_API_KEY desde tu archivo .env.
    • Inicializa el objeto client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí.
    • Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
  2. Crear/Recuperar Asistente (función create_or_retrieve_assistant):
    • Esta función primero verifica si ya existe un asistente con el ASSISTANT_NAME especificado para evitar crear duplicados.
    • Si no se encuentra, llama a client.beta.assistants.create(...) utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramienta image_generation. Esta herramienta utiliza DALL·E 3 internamente.
  3. Iniciar un Hilo (función generate_visual_story):
    • Se crea un nuevo hilo de conversación usando client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
  4. Enviar Indicación del Usuario (función generate_visual_story):
    • La idea de la historia del usuario (user_prompt) se añade al hilo usando client.beta.threads.messages.create(...) con role="user".
  5. Ejecutar el Asistente (función generate_visual_story):
    • Se instruye al asistente para procesar el hilo usando client.beta.threads.runs.create(...), pasando el assistant_id y thread_id.
  6. Esperar la Finalización (función poll_run_status):
    • Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando client.beta.threads.runs.retrieve(...).
    • Muestra el estado (queuedin_progresscompleted, etc.) para retroalimentación del usuario.
    • El bucle continúa hasta que el estado sea completed u otro estado terminal (failedcancelledexpired), o hasta que se alcance el tiempo límite.
  7. Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):
    • Una vez que la ejecución está completa, client.beta.threads.messages.list(...) recupera todos los mensajes del hilo (usando order="asc" para obtenerlos cronológicamente).
    • El código itera a través de los mensajes del asistente.
    • Para contenido de type="text", imprime la descripción de la escena.
    • Para contenido de type="image_file"imprime el file_id asociado con la imagen generada. Este ID es la clave para obtener la imagen real.
  8. Recuperar Contenido de Imagen (función save_image_from_file_id):
    • Este es el paso crucial añadido. Para cada file_id obtenido en el paso anterior, se llama a esta función auxiliar.
    • Utiliza client.files.retrieve_content(file_id) para obtener los datos binarios de la imagen.
    • Luego guarda estos datos binarios en un archivo .png en un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.

Extensiones Opcionales

  • Agregar números de página o leyendas basadas en el scene_count.
  • Modificar las ASSISTANT_INSTRUCTIONS para aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela").
  • Implementar lógica para cargar un thread_id anterior para continuar o remezclar historias.
  • Usar una biblioteca como ReportLab o generación HTML para crear un PDF formateado o una página web de salida.

Lo Que Has Construido

Al ejecutar este script, habrás implementado un motor completo de narración con IA que:

  • Acepta una indicación en lenguaje natural.
  • Utiliza GPT-4o para generar escenas secuenciales con descripciones.
  • Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
  • Recupera tanto las descripciones textuales como los archivos de imagen reales.
  • Construye los componentes de una experiencia narrativa visualmente atractiva.

Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.

4. Explicación Paso a Paso (Referenciando el Código Anterior)

  1. Configuración e Inicialización:
    • El script importa las bibliotecas necesarias (openaiostimedotenvdatetime).
    • Carga el OPENAI_API_KEY desde tu archivo .env.
    • Inicializa el objeto client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí.
    • Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
  2. Crear/Recuperar Asistente (función create_or_retrieve_assistant):
    • Esta función primero verifica si ya existe un asistente con el ASSISTANT_NAME especificado para evitar crear duplicados.
    • Si no se encuentra, llama a client.beta.assistants.create(...) utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramienta image_generation. Esta herramienta utiliza DALL·E 3 internamente.
  3. Iniciar un Hilo (función generate_visual_story):
    • Se crea un nuevo hilo de conversación usando client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
  4. Enviar Indicación del Usuario (función generate_visual_story):
    • La idea de la historia del usuario (user_prompt) se añade al hilo usando client.beta.threads.messages.create(...) con role="user".
  5. Ejecutar el Asistente (función generate_visual_story):
    • Se instruye al asistente para procesar el hilo usando client.beta.threads.runs.create(...), pasando el assistant_id y thread_id.
  6. Esperar la Finalización (función poll_run_status):
    • Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando client.beta.threads.runs.retrieve(...).
    • Muestra el estado (queuedin_progresscompleted, etc.) para retroalimentación del usuario.
    • El bucle continúa hasta que el estado sea completed u otro estado terminal (failedcancelledexpired), o hasta que se alcance el tiempo límite.
  7. Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):
    • Una vez que la ejecución está completa, client.beta.threads.messages.list(...) recupera todos los mensajes del hilo (usando order="asc" para obtenerlos cronológicamente).
    • El código itera a través de los mensajes del asistente.
    • Para contenido de type="text", imprime la descripción de la escena.
    • Para contenido de type="image_file"imprime el file_id asociado con la imagen generada. Este ID es la clave para obtener la imagen real.
  8. Recuperar Contenido de Imagen (función save_image_from_file_id):
    • Este es el paso crucial añadido. Para cada file_id obtenido en el paso anterior, se llama a esta función auxiliar.
    • Utiliza client.files.retrieve_content(file_id) para obtener los datos binarios de la imagen.
    • Luego guarda estos datos binarios en un archivo .png en un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.

Extensiones Opcionales

  • Agregar números de página o leyendas basadas en el scene_count.
  • Modificar las ASSISTANT_INSTRUCTIONS para aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela").
  • Implementar lógica para cargar un thread_id anterior para continuar o remezclar historias.
  • Usar una biblioteca como ReportLab o generación HTML para crear un PDF formateado o una página web de salida.

Lo Que Has Construido

Al ejecutar este script, habrás implementado un motor completo de narración con IA que:

  • Acepta una indicación en lenguaje natural.
  • Utiliza GPT-4o para generar escenas secuenciales con descripciones.
  • Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
  • Recupera tanto las descripciones textuales como los archivos de imagen reales.
  • Construye los componentes de una experiencia narrativa visualmente atractiva.

Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.

4. Explicación Paso a Paso (Referenciando el Código Anterior)

  1. Configuración e Inicialización:
    • El script importa las bibliotecas necesarias (openaiostimedotenvdatetime).
    • Carga el OPENAI_API_KEY desde tu archivo .env.
    • Inicializa el objeto client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí.
    • Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
  2. Crear/Recuperar Asistente (función create_or_retrieve_assistant):
    • Esta función primero verifica si ya existe un asistente con el ASSISTANT_NAME especificado para evitar crear duplicados.
    • Si no se encuentra, llama a client.beta.assistants.create(...) utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramienta image_generation. Esta herramienta utiliza DALL·E 3 internamente.
  3. Iniciar un Hilo (función generate_visual_story):
    • Se crea un nuevo hilo de conversación usando client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
  4. Enviar Indicación del Usuario (función generate_visual_story):
    • La idea de la historia del usuario (user_prompt) se añade al hilo usando client.beta.threads.messages.create(...) con role="user".
  5. Ejecutar el Asistente (función generate_visual_story):
    • Se instruye al asistente para procesar el hilo usando client.beta.threads.runs.create(...), pasando el assistant_id y thread_id.
  6. Esperar la Finalización (función poll_run_status):
    • Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando client.beta.threads.runs.retrieve(...).
    • Muestra el estado (queuedin_progresscompleted, etc.) para retroalimentación del usuario.
    • El bucle continúa hasta que el estado sea completed u otro estado terminal (failedcancelledexpired), o hasta que se alcance el tiempo límite.
  7. Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):
    • Una vez que la ejecución está completa, client.beta.threads.messages.list(...) recupera todos los mensajes del hilo (usando order="asc" para obtenerlos cronológicamente).
    • El código itera a través de los mensajes del asistente.
    • Para contenido de type="text", imprime la descripción de la escena.
    • Para contenido de type="image_file"imprime el file_id asociado con la imagen generada. Este ID es la clave para obtener la imagen real.
  8. Recuperar Contenido de Imagen (función save_image_from_file_id):
    • Este es el paso crucial añadido. Para cada file_id obtenido en el paso anterior, se llama a esta función auxiliar.
    • Utiliza client.files.retrieve_content(file_id) para obtener los datos binarios de la imagen.
    • Luego guarda estos datos binarios en un archivo .png en un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.

Extensiones Opcionales

  • Agregar números de página o leyendas basadas en el scene_count.
  • Modificar las ASSISTANT_INSTRUCTIONS para aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela").
  • Implementar lógica para cargar un thread_id anterior para continuar o remezclar historias.
  • Usar una biblioteca como ReportLab o generación HTML para crear un PDF formateado o una página web de salida.

Lo Que Has Construido

Al ejecutar este script, habrás implementado un motor completo de narración con IA que:

  • Acepta una indicación en lenguaje natural.
  • Utiliza GPT-4o para generar escenas secuenciales con descripciones.
  • Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
  • Recupera tanto las descripciones textuales como los archivos de imagen reales.
  • Construye los componentes de una experiencia narrativa visualmente atractiva.

Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.

4. Explicación Paso a Paso (Referenciando el Código Anterior)

  1. Configuración e Inicialización:
    • El script importa las bibliotecas necesarias (openaiostimedotenvdatetime).
    • Carga el OPENAI_API_KEY desde tu archivo .env.
    • Inicializa el objeto client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí.
    • Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
  2. Crear/Recuperar Asistente (función create_or_retrieve_assistant):
    • Esta función primero verifica si ya existe un asistente con el ASSISTANT_NAME especificado para evitar crear duplicados.
    • Si no se encuentra, llama a client.beta.assistants.create(...) utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramienta image_generation. Esta herramienta utiliza DALL·E 3 internamente.
  3. Iniciar un Hilo (función generate_visual_story):
    • Se crea un nuevo hilo de conversación usando client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
  4. Enviar Indicación del Usuario (función generate_visual_story):
    • La idea de la historia del usuario (user_prompt) se añade al hilo usando client.beta.threads.messages.create(...) con role="user".
  5. Ejecutar el Asistente (función generate_visual_story):
    • Se instruye al asistente para procesar el hilo usando client.beta.threads.runs.create(...), pasando el assistant_id y thread_id.
  6. Esperar la Finalización (función poll_run_status):
    • Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando client.beta.threads.runs.retrieve(...).
    • Muestra el estado (queuedin_progresscompleted, etc.) para retroalimentación del usuario.
    • El bucle continúa hasta que el estado sea completed u otro estado terminal (failedcancelledexpired), o hasta que se alcance el tiempo límite.
  7. Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):
    • Una vez que la ejecución está completa, client.beta.threads.messages.list(...) recupera todos los mensajes del hilo (usando order="asc" para obtenerlos cronológicamente).
    • El código itera a través de los mensajes del asistente.
    • Para contenido de type="text", imprime la descripción de la escena.
    • Para contenido de type="image_file"imprime el file_id asociado con la imagen generada. Este ID es la clave para obtener la imagen real.
  8. Recuperar Contenido de Imagen (función save_image_from_file_id):
    • Este es el paso crucial añadido. Para cada file_id obtenido en el paso anterior, se llama a esta función auxiliar.
    • Utiliza client.files.retrieve_content(file_id) para obtener los datos binarios de la imagen.
    • Luego guarda estos datos binarios en un archivo .png en un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.

Extensiones Opcionales

  • Agregar números de página o leyendas basadas en el scene_count.
  • Modificar las ASSISTANT_INSTRUCTIONS para aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela").
  • Implementar lógica para cargar un thread_id anterior para continuar o remezclar historias.
  • Usar una biblioteca como ReportLab o generación HTML para crear un PDF formateado o una página web de salida.

Lo Que Has Construido

Al ejecutar este script, habrás implementado un motor completo de narración con IA que:

  • Acepta una indicación en lenguaje natural.
  • Utiliza GPT-4o para generar escenas secuenciales con descripciones.
  • Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
  • Recupera tanto las descripciones textuales como los archivos de imagen reales.
  • Construye los componentes de una experiencia narrativa visualmente atractiva.

Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.