Plataforma PIM multiinquilino — enriquecimiento con IA & sync multicanal

Para una marca de comercio electrónico con miles de productos activos construí una plataforma de Product Information Management que centraliza los datos de producto, los enriquece con IA y los mantiene sincronizados entre Shopify, marketplaces y ERP — con una persona que revisa cada cambio antes de publicarlo.

PIM multiinquilino
Enriquecimiento con IA
Búsqueda vectorial / RAG
Sync multicanal

Rol & alcance

Diseñada y construida por completo, y desarrollada de forma continua desde entonces: una plataforma PIM multiinquilino con aislamiento de inquilinos (super admin, admin de inquilino, usuario), un flujo de borrador/publicación para que cada cambio se revise antes de salir en vivo, y registro de auditoría completo con instantáneas de antes y después.

  • Sincronización Shopify-first, junto con integración con el ERP NetSuite y exportación a Amazon y otros marketplaces mediante ChannelEngine.
  • Enriquecimiento con IA de títulos, descripciones, textos SEO y traducciones — con un paso de revisión antes de publicar el contenido generado.
  • Un asistente RAG integrado que permite al equipo de producto buscar y trabajar en el catálogo por chat: búsqueda vectorial sobre los datos de producto, con llamadas a herramientas para acciones que el usuario debe aprobar primero.
  • Una extensión de Chrome aparte que permite al equipo mandar productos desde las páginas de marketplace directamente a la cola de enriquecimiento.
  • Un módulo de cumplimiento del GPSR europeo, un módulo SEO con validación del volumen de palabras clave y tareas en segundo plano (sync vectorial, enriquecimiento, planificador) mediante una cola con reintentos.

Impacto

  • Más de 3.400 productos activos en el mercado principal, con flujos de exportación hacia cientos de listados adicionales en marketplaces como Amazon.
  • Un pipeline de traducción con IA que sobrescribía en silencio las URL de categoría se revirtió y se sustituyó por una versión que crea redirecciones y lo registra todo en una traza de auditoría.
  • Un fallo de sincronización por el que cada enlace con NetSuite sobrescribía el contenido generado por IA y los cambios de Shopify se resolvió de forma estructural, en lugar de repararse a mano cada vez.
  • Más de 350 commits en ocho meses de desarrollo continuo — no una entrega puntual, sino un sistema que crece con el surtido.

Arquitectura

Un monorepo Turborepo con backend NestJS y frontend Next.js 14 (App Router), un paquete compartido de base de datos Prisma y tipos comunes. PostgreSQL con la extensión pgvector guarda tanto los datos de producto como los embeddings, de modo que la búsqueda vectorial y las consultas normales corren sobre la misma base de datos. El trabajo en segundo plano (sync vectorial, enriquecimiento con IA, sync de marketplaces) va por colas respaldadas por Redis con reintentos automáticos y backoff exponencial, desacopladas de la interfaz para que una sincronización lenta de marketplace no bloquee el resto de la plataforma.

Elección de modelo

El asistente RAG integrado es deliberadamente multiproveedor: distintas tareas pasan por distintos modelos (desde un modelo barato para el chat rutinario hasta variantes más pesadas de Claude y GPT para trabajos de enriquecimiento complejos), con el precio por tokens registrado por modelo para que el coste por conversación sea visible y no una caja negra. El contenido generado (títulos, descripciones, traducciones) pasa siempre primero por un paso de revisión — el modelo propone, una persona aprueba; la misma razón por la que en otros proyectos la lógica de precios tampoco pasa nunca directamente por un modelo de lenguaje.

Costes & latencia

  • El coste en tokens por conversación se registra por modelo, de modo que los modelos más caros se emplean de forma deliberada y visible, no por defecto.
  • Las tareas en segundo plano (sync vectorial, enriquecimiento) corren de forma asíncrona con un máximo de 3 reintentos y backoff exponencial, para que una caída temporal de un marketplace no cause de inmediato pérdida de datos.
  • La búsqueda vectorial y las consultas normales de producto corren sobre la misma instancia de PostgreSQL (pgvector), lo que hace innecesaria una base de datos vectorial aparte y su capa de sincronización.

Lecciones aprendidas

El pipeline de traducción con IA sobrescribía las URL de categoría sin avisar en cuanto se regeneraba una traducción — a primera vista bueno para el SEO, pero rompía los enlaces externos existentes. Se resolvió restaurando las URL históricas, añadiendo redirecciones y construyendo una traza de auditoría que a partir de ahora hace visibles esos cambios antes de que salgan en vivo. Un segundo fallo: cada sincronización con NetSuite sobrescribía el contenido generado por IA y los cambios de Shopify en cuanto un producto se vinculaba a NetSuite — no un incidente, sino un patrón estructural, resuelto revisando el sentido de la sincronización en vez de repararlo a mano cada vez. Y un tercero, menor pero revelador: el pipeline traducía mal abreviaturas de materiales como «RVS» (acero inoxidable), resuelto con una regla de glosario explícita en lugar de confiar en que el modelo adivine el conocimiento del dominio.