Construí un Sistema de 6 Agentes de IA para Publicar Contenido Solo. Así Funciona la Arquitectura.

Proyectos· 6 min de lectura

Construí un Sistema de 6 Agentes de IA para Publicar Contenido Solo. Así Funciona la Arquitectura.

Hay un momento concreto en el que te das cuenta de que el problema no es la calidad del contenido. Es la escala.

Era febrero de 2026. Tenía conversoriaecnae.es en marcha: un directorio de códigos CNAE e IAE para autónomos y pymes en España. El SEO funcionaba. Las páginas posicionaban. Pero tenía 2.163 códigos que cubrir con artículos educativos de calidad y una newsletter semanal, más distribución en seis plataformas sociales.

Hacer eso manualmente no era un reto de productividad. Era matemáticamente imposible.

La solución no fue contratar redactores. Fue construir un sistema.

La Arquitectura: Orquestador → Agentes Especializados → Distribución

El sistema tiene una lógica sencilla de entender, aunque la implementación tiene su complejidad:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Cada capa tiene responsabilidades claras. Ningún agente hace demasiado. Esta separación no es solo arquitectura limpia: es lo que permite optimizar cada pieza por separado.

Los Agentes, Uno a Uno

1. Filter Agent: El Portero

Monitoriza el Gmail conectado a Google Alerts. Cuando llegan alertas nuevas, las procesa en lotes de 10 con Claude Haiku 4.5 y asigna una puntuación de 0 a 100 según relevancia para CNAE/IAE.

La decisión de usar Haiku aquí (en vez de Sonnet) fue deliberada: esta tarea es alta en volumen y baja en complejidad creativa. Haiku gestiona perfectamente la clasificación estructurada. Sonnet quedaría sobredimensionado y el coste acumulado en cinco ejecuciones diarias sería innecesario.

2. Planner Agent: El Editor

Selecciona cuatro temas diarios siguiendo una lógica concreta:

  • 2 artículos educativos sobre códigos CNAE/IAE seleccionados por oportunidad de keyword
  • 2 artículos de noticias basados en las fuentes filtradas con mayor puntuación

Usa una cola de prioridad basada en rankings de búsqueda para garantizar cobertura sistemática. No aleatoria. Sistemática. Si no, tardarías años en cubrir 2.163 códigos con algún orden lógico.

3. Educational Agent: El Redactor

Genera artículos de entre 800 y 1.200 palabras con estructura fija: introducción, explicación del código, ejemplos prácticos para autónomos, sección FAQ e imagen de Unsplash con atribución automática.

Lo interesante: cada artículo pasa por un checklist de calidad de 8 puntos. Si la puntuación es ≥80, se publica automáticamente sin intervención humana. Si no llega, se marca para revisión.

Eso es lo que hace posible el sistema sin supervisión constante: no confío ciegamente en la IA, pero tampoco reviso cada pieza. El umbral de calidad hace el trabajo de filtrado.

4. Publisher Agent: El Técnico

Convierte el markdown generado a Portable Text de Sanity CMS. Esto parece un detalle menor, pero es una decisión de arquitectura importante: HTML raw te ata a un formato; Portable Text te permite reusar el contenido en cualquier superficie futura.

También extrae los bloques FAQ, gestiona las imágenes como assets de Sanity y añade los metadatos SEO (título 40-70 caracteres, meta description 50-60, descripción 140-160). Estos límites se aplican en el momento de generación, no como post-procesado. Mucho más fiable.

5. Newsletter Agent: El Comunicador

Cada semana genera un resumen con los artículos destacados, el dato de la semana y alternativas de asunto para A/B testing. Se integra con el pipeline de estadísticas para incluir rankings actualizados de códigos CNAE/IAE cuando está disponible.

6. Social Agents: Los Distribuidores

Hay un agente por plataforma: LinkedIn, Twitter/X, Facebook, Threads, Instagram y Reddit. Cada uno conoce los límites de caracteres, el tono apropiado y la estrategia de hashtags de su canal. El contenido llega a Late API para programación automática.

Un solo agente genérico para todas las plataformas sería más sencillo de construir. Pero el resultado sería contenido mediocre en todas partes. Los agentes especializados permiten optimizar el copy para cada contexto.

Las Tres Decisiones Técnicas Que Más Importan

Prompt Caching

Cada agente tiene un system prompt extenso (más de 4.096 tokens) con contexto del dominio, reglas editoriales y ejemplos. Sin caching, ese coste se duplicaría en cada llamada. Con caching activado en la API de Anthropic, el ahorro en tokens de entrada ronda el 80% en llamadas repetidas.

En un sistema que ejecuta cinco pipelines diarios, esto no es optimización prematura. Es lo que hace que el sistema sea económicamente viable a largo plazo.

Structured Outputs (JSON Schema)

Todos los agentes devuelven JSON con schema definido. Sin excepciones. Esto elimina el problema de parseo frágil y, más importante, elimina la ambigüedad de salida que obliga a manejar casos edge en el código downstream.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Cuando el JSON viene garantizado por schema, el código que lo consume es drásticamente más simple.

Temporal Context Injection

Todos los agentes reciben contexto temporal dinámico: fecha actual, temporada, calendario fiscal español. Esto impide que el contenido generado quede desfasado o ignore contexto relevante (como que en enero hay picos de consultas sobre cambios de epígrafe IAE).

El commit 496b64e del 16 de febrero de 2026 implementó esto. Antes de ese cambio, algunos artículos ignoraban el momento del año. Un detalle pequeño con impacto real en relevancia.

El Problema Real: El Timeout de Vercel

El sistema procesa cuatro temas en paralelo por ejecución de cron. Al procesarlos secuencialmente, el pipeline superaba el límite de 300 segundos de Vercel en cargas altas.

La solución fue paralelización con dos lotes concurrentes de diez ítems, más reemplazar Promise drops con await explícito dentro del procesamiento de cada tema. Los commits del 15 de febrero de 2026 documentan exactamente ese debugging:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Esto es build in public en su versión más honesta: el problema estaba en producción, los commits lo documentan, la solución es visible.

Takeaway

Lo que más me ha sorprendido de construir este sistema no es la tecnología. Es que la arquitectura de agentes especializados con responsabilidades claras funciona por la misma razón que funciona un equipo humano bien organizado: cada pieza hace una cosa bien, y la coordinación emerge de las interfaces, no del caos.

Si estás pensando en construir algo similar:

  1. Empieza con el agente más sencillo (el filtro) antes de orquestar el sistema completo.
  2. Añade structured outputs desde el día uno, no como refactor posterior.
  3. El prompt caching no es opcional si vas a ejecutar pipelines con frecuencia. Actívalo desde el inicio.

El código de este sistema es privado por ahora, pero documento las decisiones de arquitectura en público. Si tienes preguntas concretas sobre alguna capa, las respondo en los comentarios.

Brian Mena

Brian Mena

Ingeniero informatico construyendo productos digitales rentables: SaaS, directorios y agentes de IA. Todo desde cero, todo en produccion.

LinkedIn