Image Generator: portadas automáticas con DALL-E 3
Agente Image Generator
Se implementa el agente image_generator.py (844 líneas) que automatiza completamente la generación de portadas para los artículos del blog. El agente escanea la carpeta _posts/ y detecta todos los artículos que no tienen un archivo cover.webp en disco, procesándolos en lotes según los parámetros configurados.
El flujo de generación usa GPT-4o como meta-prompter: dado el título, descripción y categoría del artículo, construye un prompt visual detallado alineado con la identidad de marca de Azurebrains antes de llamar a DALL-E 3. Esto evita prompts genéricos y garantiza coherencia visual entre portadas. DALL-E 3 genera la imagen base en resolución 1792×1024 HD vivid mediante Azure OpenAI.
Variantes de Imagen con Pillow
Una vez generada la imagen base, Pillow produce automáticamente 11 variantes por artículo: cover.webp para la card del listado, cuatro resoluciones de hero (hero-640w, hero-1024w, hero-1280w, hero-1536w) en formato WebP y JPEG para máxima compatibilidad, y og-image.png (1200×630 px) optimizada para Open Graph y tarjetas en redes sociales. El resultado es un PR automático en GitHub con todas las imágenes, sin push directo a main.
GitHub Actions Workflow
El workflow agent-image-generator.yml ejecuta el agente con schedule semanal los domingos a las 05:00 UTC y admite disparo manual mediante workflow_dispatch con cuatro parámetros: --post para procesar un artículo específico por slug, --max para limitar el número de artículos a procesar, --dry-run para revisar los prompts de GPT-4o sin invocar a DALL-E 3, y --force-all para regenerar portadas aunque ya existan en disco. AUTO_MERGE=true está activado por defecto para que el PR se fusione automáticamente si superan las validaciones.
Portadas Generadas
En esta primera ejecución se generaron portadas para 10 artículos del catálogo, incluyendo todos los de la serie RAG, los artículos de Azure Reliability y los posts de noticias del 22 de febrero. La imagen social por defecto del sitio (og-default.png) también fue regenerada con el agente.
Detalles Técnicos
Se crearon 3 archivos nuevos: scripts/agents/image_generator.py (844 líneas), .github/workflows/agent-image-generator.yml y .github/agents/image-generator.agent.md. Se añadieron al repositorio 10 conjuntos de portadas (110 archivos de imagen en total).
Todas las portadas cumplen las dimensiones optimizadas para Open Graph (1200×630 px) y se almacenan en la ruta assets/images/posts/. La imagen social por defecto del sitio también se regeneró con este agente, mejorando la presencia del blog en redes sociales.
Azure AI Search e Integración Semántica
Se ha desplegado el modelo text-embedding-3-small en Azure AI Foundry y se han creado los índices necesarios en Azure AI Search. Esto sienta las bases para búsqueda semántica y experiencias RAG sobre el contenido del blog. La integración permite que los agentes del pipeline consulten el índice para evitar duplicidades temáticas y mejorar la relevancia del contenido propuesto por el Discoverer.
Scripts de Operación Python
four scripts Python nuevos se han añadido a la carpeta scripts/agents/ para gestionar el ciclo de vida completo de los posts:
inject.py inserta artículos directamente en el repositorio con el formato correcto, validando frontmatter y estructura antes de commitear. delete_post.py elimina posts de forma segura asegurándose de limpiar también las imágenes asociadas, con opción --push para controlar si el cambio se propaga al remoto inmediatamente. feature_post.py marca o desmarca el artículo destacado del blog, gestionando el campo featured en el frontmatter con un solo comando. create_prs.py automatiza la apertura de Pull Requests desde cualquier rama de trabajo, asociando la descripción del cambio al PR de GitHub.
CI/CD: Auto-Publicación de Posts Programados
El workflow de GitHub Actions Publish Scheduled Posts ahora dispara automáticamente el workflow de despliegue tras publicar posts programados. Anteriormente era necesario un push manual o esperar al siguiente trigger para que los artículos aparecieran en producción. El workflow también cuenta con los permisos contents: write correctamente configurados para realizar commits sin intervención.
Se ha añadido además la asignación automática de categorías basada en el contenido del post. Un paso del pipeline analiza el texto y asigna la categoría correcta (Artículos, Noticias, Blog) sin requerir que el agente Writer la especifique manualmente.
Monitorización de Agentes con Application Insights
Todos los workflows de agentes emiten telemetría a Application Insights: duración de cada fase, tokens consumidos, modelo utilizado, resultado (éxito/error) y metadatos del artículo generado. Esto permite medir el rendimiento del pipeline de forma objetiva y detectar degradaciones.
Se ha creado un Azure Monitor Workbook específico para el dashboard de agentes, con paneles para volumen de publicaciones, tiempo medio por fase, tasa de éxito y distribución por categoría. El workbook está disponible en scripts/monitoring/.
Dominio y DNS
Se ha configurado el dominio blog.azurebrains.com apuntando a GitHub Pages. El registro CNAME está gestionado en el repositorio y el certificado TLS se aprovisiona automáticamente. El sitio es accesible tanto desde azurebrains.github.io/blog como desde blog.azurebrains.com.
RUNBOOK Operacional
Se ha creado docs/RUNBOOK.md con el manual de operaciones completo del blog. Cubre todos los flujos habituales: publicar un artículo manualmente, regenerar una portada, forzar un redeploy, eliminar un post, marcar el artículo destacado, depurar errores del pipeline y gestionar los secretos de Azure en GitHub Actions.
Correcciones
Se han resuelto varios problemas de categorías que impedían que artículos aparecieran en la homepage. Se eliminó el wrapper ` ```yaml ` que se colaba en el frontmatter de 23 posts durante la migración, causando errores de parseo en Jekyll. Se corrigió la lógica de filtrado de la categoría Blog para que no apareciera como enlace clicable en las cards de artículos. La normalización de categorías en posts antiguos asegura que todos los artículos sean visibles en sus secciones correspondientes.
Detalles Técnicos
Se crearon 12 archivos nuevos (scripts Python, workflows, workbook, RUNBOOK), se modificaron 31 existentes y se publicaron 23 artículos nuevos mediante el pipeline autónomo. El tiempo de build de Jekyll se mantiene por debajo de 0.4 segundos.