Elegir un CMS suele ser el primer punto donde los proyectos se complican antes de empezar. O te ahogas en configuración visual y pierdes control real sobre el código, o te vas al otro extremo y acabas manteniendo un frankenstein casero sin panel de edición que nadie quiere tocar. Existe una tercera vía que resuelve bien esta dicotomía: Payload CMS como núcleo code-first, Typesense como capa de búsqueda vectorial, y un microservicio Python para la lógica de agentes. En este post desglosamos cómo encajan estas tres piezas y por qué la separación de responsabilidades importa.
La mayoría de los CMS comparten el mismo problema estructural: la definición de datos vive en la base de datos, no en el repositorio. Cualquier cambio de esquema queda fuera del control de versiones, no pasa por una Pull Request y es difícil de revertir de forma limpia.
Payload CMS invierte este paradigma. Las colecciones se definen en TypeScript, lo que tiene tres consecuencias relevantes:
El panel de administración también es extensible: se pueden inyectar componentes React propios para construir botones de sincronización con sistemas externos, flujos de aprobación con feedback visual o vistas personalizadas por rol. La lógica compleja va encapsulada en plugins reutilizables, sin ensuciar el núcleo.
En cuanto a infraestructura, la apuesta natural es Docker + CI/CD con despliegue en cualquier entorno que soporte contenedores, y Keycloak como proveedor de identidad para OIDC, SAML y SSO. Sin vendor lock-in, sin dependencia de plataformas de hosting propietarias.
Tener los datos bien estructurados es solo la mitad del trabajo. La otra es hacerlos accesibles de manera inteligente. Esto suele derivar a delegar la búsqueda a la base de datos principal. Las bases de datos relacionales son eficientes para integridad transaccional, pero lentas y limitadas para texto completo, tolerancia a erratas o filtrado por facetas a escala. Para eso existe una capa dedicada.
Typesense encaja bien aquí: open source, in-memory (muy rápido), fácil de desplegar y con soporte nativo para búsqueda vectorial. La sincronización con el CMS se resuelve con hooks de base de datos que transforman y envían cada documento a Typesense en el momento en que se crea, actualiza o elimina. El índice siempre refleja el estado real del contenido.
La estrategia de indexación varía según el tipo de dato. Los campos que requieren comprensión semántica, como los resúmenes o cuerpos de texto, se vectorizan mediante embeddings. Los metadatos estructurados, fechas, autores y categorías, van a índices exactos para filtrado rápido.
El resultado más potente es la búsqueda híbrida: ejecutar ambas consultas en paralelo y fusionar los resultados con un algoritmo de ranking (RRF - Reciprocal Rank Fusion). Una consulta como "cómo configuro la autenticación" puede encontrar un documento que habla de "gestión de identidad y SSO" sin compartir una sola palabra. Eso es lo que separa un buscador útil de uno que devuelve resultados literales.
Esta infraestructura no solo sirve a usuarios humanos. Es también la base sobre la que se construye la capa de agentes.
Con datos estructurados y búsqueda vectorial, el paso siguiente es añadir capacidad de razonamiento. Para eso tiene sentido un microservicio independiente en Python, separado del servidor Node.js del CMS.
Las razones son arquitectónicas, no de preferencia de lenguaje. El ecosistema Python para IA (LangChain, LlamaIndex, librerías de orquestación de LLMs) no tiene equivalente real en Node.js. La lógica de agentes evoluciona a un ritmo diferente que la gestión de contenidos, por lo que separarla permite desplegar mejoras sin tocar la estabilidad del CMS. Y los perfiles de consumo de recursos son distintos: la inferencia de IA tiene picos de CPU y memoria que deben poder escalarse de forma independiente.
Para esto, una arquitectura sobre Kubernetes con autoescalado funciona especialmente bien. Esto es, Scale to zero en momentos de inactividad: sin carga, sin coste de cómputo. Scale to N ante picos de tráfico o procesamiento masivo en segundo plano, con réplicas aprovisionadas automáticamente. El núcleo del servicio implementa el patrón RAG (Retrieval-Augmented Generation):
Para que el RAG funcione bien, los documentos deben estar preprocesados: divididos en fragmentos que preservan el contexto (respetando párrafos y encabezados), con embeddings precalculados y metadatos de origen que permiten citar fuentes con precisión. Tener el chunking bien resuelto es lo que separa un RAG que alucina de uno que razona.
Tener un servicio dedicado abre además la puerta a agentes autónomos con razonamiento multi-paso: el sistema decide que para responder necesita consultar primero la documentación interna, luego llamar a una API externa, y finalmente sintetizar ambas respuestas. O directamente actuar creando borradores, enviando alertas o detectando inconsistencias en los datos, con los permisos necesarios.
Al final del recorrido, la arquitectura tiene tres capas con responsabilidades bien delimitadas:
Esta separación de responsabilidades no es elegancia arquitectónica por el gusto de la elegancia. Es lo que hace el sistema resiliente cuando algo falla, fácil de mantener cuando el equipo rota y capaz de absorber las innovaciones que siguen llegando en el campo de la IA sin necesidad de reescribir todo.
Sus datos personales se incorporan a ficheros de los que es responsable IRONTEC-INTERNET Y SISTEMAS SOBRE GNU LINUX, SL, con domicilio en Ribera de Axpe, 11 Edif A 116 - Erandio - 48950 - Bizkaia, cuya finalidad es la gestión de datos recogidos en los formularios de la página web, la gestión de contactos, la realización de acciones de comunicación comercial y la respuesta a consultas y sugerencias, siendo obligatorio su consentimiento, que es causa legitima de dicho tratamiento. De no prestarlo no podremos atender su solicitud. Estos datos se conservaran por tiempo indefinido en tanto no manifieste su voluntad en contra.
Sus datos no se cederán a ninguna entidad sin su consentimiento previo. Puede ejercitar los derechos de acceso, rectificación, limitación de tratamiento, supresión, portabilidad, cancelación y revocar el consentimiento prestado, dirigiendo escrito con copia de su DNI a la dirección anteriormente citada o al correo electrónico: [email protected]
También podrá en caso de no ver atendidos sus derechos presentar su reclamación a la Agencia Española de Protección de Datos.