PrestaShop Inteligencia Artificial

DataFirefly Enlazado Interno Semántico IA — Embeddings vectoriales, similitud coseno e inserción semiautomática con anclas inteligentes para PrestaShop 8 & 9 (Mistral, OpenAI)

Enlazado interno semántico impulsado por embeddings de IA para PrestaShop. Tu contenido se vectoriza (Mistral u OpenAI), se compara por similitud coseno y el módulo propone los enlaces más relevantes con anclas extraídas literalmente del texto fuente.

La mayoría de módulos de enlazado interno se limitan a hacer find-replace de palabras clave. El resultado es rígido, rompe enlaces existentes y se pierde la mayoría de las oportunidades de enlazado — todas aquellas en las que la palabra clave exacta no aparece pero el significado está muy cerca. DataFirefly Enlazado Interno Semántico IA funciona de otra manera: cada producto, categoría y página CMS se transforma en un vector de embedding (Mistral mistral-embed u OpenAI text-embedding-3-small, a tu elección). El módulo compara entonces los vectores por similitud coseno y propone los pares de contenido más próximos semánticamente, independientemente del vocabulario usado. Para cada sugerencia, un generador de anclas extrae n-gramas del título destino que aparecen literalmente en el cuerpo fuente — el ancla es a la vez optimizada SEO y natural en el texto. Inserción semiautomática con validación uno a uno o en lote, reversión limpia mediante marcador único, cola persistente, worker CLI para catálogos grandes, reindexación automática con cada cambio. Multiidioma, multitienda, dos proveedores de IA conmutables, sin suscripción.

PrestaShop 8.0 → 9.x PHP 8.1+ Mistral · OpenAI Embeddings vectoriales Similitud coseno Anclas extraídas literalmente Inserción semiautomática Reversión por marcador único Worker CLI Reindexación automática Multiidioma y multitienda Sin suscripción
  • Reembolso de 30 días
  • 12 meses de actualizaciones
  • Soporte 24h
www.datafirefly.com/es/
DataFirefly Enlazado Interno Semántico IA — Embeddings vectoriales, similitud coseno e inserción semiautomática con anclas inteligentes para PrestaShop 8 & 9 (Mistral, OpenAI)
v1.0.0 · actualizado 2026-05-15
Qué hace

La versión corta.

01

Embeddings vectoriales Mistral u OpenAI

Cada producto, categoría y página CMS se transforma en un vector de embedding por el proveedor de IA que elijas: Mistral mistral-embed (1024 dimensiones, ~0,10 EUR por millón de tokens) u OpenAI text-embedding-3-small (1536 dimensiones, ~0,02 USD por millón de tokens). Los vectores se almacenan como BLOB float32 empaquetado con la norma L2 precalculada — la similitud coseno se calcula entonces en PHP, sin dependencia externa (no necesitas pgvector ni Elasticsearch). Cambia de proveedor con un simple desplegable, sin nada que reindexar manualmente.

02

Anclas extraídas literalmente del texto fuente

Esto es lo que distingue al módulo. Para cada sugerencia, el generador de anclas extrae n-gramas del título destino (de 2 a 6 palabras) que aparecen literalmente en el cuerpo de la fuente, y los ordena por longitud y relevancia. El ancla propuesta es por tanto natural (ya está en tu texto, no fuerzas nada) y optimizada SEO (contiene las palabras clave exactas del título destino). Stopwords francés e inglés integrados. Mantienes el control: menú desplegable con todos los candidatos, o campo libre para escribir un ancla personalizada.

03

Inserción semiautomática con validación

Cada sugerencia entra en la cola con estado Pendiente. Validas o rechazas una a una, o en lote con multiselección y botones de acción masiva. La inserción usa una regex robusta que evita las etiquetas a, code, pre y las zonas HTML ya enlazadas — cero riesgo de romper un enlace existente. Cada enlace insertado recibe un atributo data-dfasl con un identificador único de tipo UUID, lo que permite una reversión quirúrgica: eliminación del enlace desde la pestaña Enlaces insertados, sin tocar el resto del HTML, sin regex arriesgada, sin riesgo de corromper la descripción.

04

Worker CLI + reindexación automática vía hooks

Para catálogos a partir de 1.000 entidades, la interfaz backoffice se ralentiza. El módulo proporciona un worker CLI (bin/analyze.php) con opciones --enqueue-all, --loop, --max-batches, --sleep — adaptado a un cron que corre cada 15 minutos para procesar la cola. En cada cambio de un producto, una categoría o una página CMS, los hooks de PrestaShop colocan la entidad afectada en la cola en segundo plano: el índice se mantiene al día sin intervención. La cola persiste los estados Pendiente, En proceso, Completado, Error y reinicia automáticamente las entradas bloqueadas desde hace más de 30 minutos.

La versión larga

Todo lo que querrías saber antes de instalar.

Una mirada detallada a cómo funciona DataFirefly Enlazado Interno Semántico IA — Embeddings vectoriales, similitud coseno e inserción semiautomática con anclas inteligentes para PrestaShop 8 & 9 (Mistral, OpenAI), por qué lo construimos así y la lógica detrás de las características anteriores.

§ 01

Por qué el enlazado interno semántico es superior al enlazado por palabras clave

Los módulos de enlazado interno clásicos funcionan con reglas palabra clave hacia URL. Introduces alfombra bereber y asocias la URL de la categoría alfombra-bereber. El motor hace luego un find-replace en el HTML de tus artículos, productos o páginas. Este enfoque tiene dos limitaciones grandes. Es rígido: solo dispara un enlace cuando la palabra clave exacta aparece, lo que excluye todas las páginas donde el tema se trata con otra formulación (alfombra marroquí, kilim, alfombra tradicional). Y es ciego al contexto semántico: el motor no sabe si la página destino es realmente relevante para el contenido fuente, solo hace coincidencia de cadenas. El enlazado semántico funciona de otra forma: cada contenido se representa por un vector de varios cientos de dimensiones que codifica su significado — producto, categoría, página CMS, blog. Dos contenidos están vinculados si están cerca en este espacio vectorial, independientemente de las palabras usadas. El módulo detecta así oportunidades de enlazado que un motor por palabras clave nunca vería, y evita los falsos positivos donde una palabra clave aparece en un contexto no relevante.

§ 02

Embeddings IA: cómo funciona en la práctica

En la primera indexación, el módulo recorre todas las entidades activas de tu tienda para los tipos habilitados (productos, categorías, páginas CMS). Para cada entidad, el contenido textual se extrae y se limpia: título, meta_title, meta_description, descripción corta y descripción larga (el HTML se elimina correctamente). El texto limpio se envía entonces en lote al proveedor de IA configurado (Mistral u OpenAI), que devuelve un vector de embedding por elemento — una lista de números flotantes que representa la semántica del texto. Este vector se almacena en la base como BLOB float32 empaquetado en little-endian, con su norma L2 precalculada para acelerar los cálculos posteriores de similitud. La similitud entre dos contenidos se calcula entonces en PHP por producto escalar normalizado (similitud coseno), una operación extremadamente rápida una vez precalculadas las normas. En un catálogo de 5.000 entidades, el cálculo completo de todos los pares en un idioma solo tarda unos segundos.

§ 03

Por qué dos proveedores y no uno solo

Cada proveedor tiene su sweet spot. Mistral mistral-embed es la opción por defecto recomendada: 1024 dimensiones, latencia muy baja, alojamiento en Europa (soberanía UE para tiendas sensibles), coste de unos 10 céntimos por millón de tokens — muy por debajo de un euro para indexar un catálogo de varios miles de entidades multiidioma. OpenAI text-embedding-3-small es la alternativa: 1536 dimensiones (espacio vectorial más rico), excelente en idiomas no europeos, coste de unos 2 centavos por millón de tokens (cinco veces más barato que Mistral en USD). El módulo unifica los dos proveedores tras una interfaz común: mismo formato de retorno, mismo mecanismo de lote, misma gestión de errores con PrestaShopLogger. Puedes pasar de un proveedor a otro desde el desplegable de configuración — el módulo detectará que las dimensiones han cambiado e invitará a reindexar (un solo clic en Reindexar todo).

§ 04

El generador de anclas, la verdadera pieza maestra del módulo

Es el punto que marca la diferencia con un módulo de sugerencias bruto. Para cada par (fuente, destino) por encima del umbral de similitud, el generador de anclas aplica el siguiente algoritmo: extrae el título del destino, lo divide en n-gramas de 2 a 6 palabras, retira los stopwords (francés e inglés), y busca cada uno de estos n-gramas literalmente en el cuerpo de la fuente. Los n-gramas encontrados se ordenan por longitud decreciente (los más largos son más discriminativos y están más optimizados SEO) y se presentan en el desplegable del backoffice. El ancla por defecto seleccionada es la más larga encontrada — lo que da típicamente un ancla de 3 o 4 palabras que incluye las palabras clave principales del título destino. Si ningún n-grama del título destino aparece en la fuente, el módulo propone el título destino bruto (modo fallback). Mantienes por supuesto el control: desplegable editable, opción Personalizar para escribir cualquier texto de ancla. En el momento de la inserción, el módulo elige la primera ocurrencia del texto del ancla en el cuerpo de la fuente que no esté ya en una etiqueta a, code o pre — cero riesgo de romper un enlace existente o de volver a enlazar un texto ya enlazado.

§ 05

Reversión quirúrgica mediante marcador único

Es la función que tranquiliza a todos los comerciantes prudentes con sus descripciones. Cada enlace insertado recibe un atributo HTML data-dfasl que lleva un identificador único de 36 caracteres generado aleatoriamente en la inserción (formato tipo UUID). El identificador también se guarda en la base de datos en la tabla dfasl_inserted_link, junto con la entidad fuente, el destino, el ancla, la fecha de inserción y el ID del empleado que validó. Para retirar un enlace, vas a la pestaña Enlaces insertados, haces clic en Retirar junto a la fila correspondiente: el módulo ejecuta una regex que coincide exactamente con el patrón de ancla a data-dfasl con este identificador único, retira la etiqueta a manteniendo intacto el texto del ancla, y marca el enlace como retirado en la base de datos. Ninguna otra etiqueta de la descripción se ve afectada, ningún enlace manual corre peligro. Sobre 500 enlaces insertados por el módulo en 200 fichas de producto, puedes retirar uno solo en un clic sin tocar los otros 499.

§ 06

Worker CLI y estrategia de procesamiento para catálogos grandes

En un catálogo de unas decenas de productos, todo se puede hacer desde el backoffice: Reindexar todo y luego Procesar lote es suficiente. Más allá de algunos miles de entidades, la interfaz se vuelve lenta y el usuario no quiere dejar el navegador abierto durante horas. El módulo expone un worker CLI (bin/analyze.php) que se lanza por línea de comandos PHP con cuatro opciones. --shop para apuntar a una tienda concreta en un entorno multitienda. --enqueue-all para volver a encolar todas las entidades activas antes de procesar — útil para una reindexación completa tras un cambio de proveedor o modelo. --loop para seguir iterando mientras queden elementos por procesar. --max-batches para limitar el número de lotes procesados en una sola ejecución (seguridad anti-runaway). --sleep para intercalar una pausa entre lotes (útil para mantenerse bajo los rate limits API). El comando típico para un cron cada 15 minutos es: php modules/dfaisemanticlinks/bin/analyze.php --loop --max-batches=50 --sleep=1. El worker reinicia automáticamente las entradas bloqueadas en estado En proceso desde hace más de 30 minutos (caso en que un worker anterior se habría caído), gestiona los errores API marcando los elementos afectados en estado Error con el mensaje, y sigue procesando los elementos sanos del lote.

§ 07

Reindexación automática y frescura del índice

Un índice que se desincroniza del catálogo pierde todo su valor. El módulo gestiona la frescura vía hooks nativos de PrestaShop. En cada cambio de un producto, una categoría o una página CMS (hooks actionObjectProductUpdateAfter, actionObjectCategoryUpdateAfter, actionObjectCmsUpdateAfter), la entidad afectada vuelve a la cola con estado Pendiente, en todos los idiomas activos — el siguiente worker la procesará automáticamente. En la eliminación (hooks actionObjectProductDeleteAfter, actionObjectCategoryDeleteAfter, actionObjectCmsDeleteAfter), los embeddings y sugerencias asociadas se purgan en cascada. El módulo incluye también un hash de contenido (SHA-256 del texto limpio): si una entidad vuelve a la cola sin que su contenido real haya cambiado (por ejemplo porque un empleado solo ha tocado el stock), el lote de indexación detecta el hash sin cambios y omite la llamada API — ahorro de tokens. La reindexación automática es conmutable desde Configuración (opción DFASL_AUTO_INDEX), útil para pausarla durante una importación CSV masiva y reanudarla con un Reindexar todo una vez terminada la importación.

§ 08

Multitienda y multiidioma nativos

El módulo es nativamente multitienda y multiidioma. Los embeddings tienen scope por el triplete (entidad, idioma, tienda) — un mismo producto en dos tiendas tendrá dos embeddings independientes si las descripciones difieren, y un mismo producto en francés e inglés tendrá dos embeddings diferentes aunque la ficha sea la misma. Las sugerencias nunca cruzan fronteras lingüísticas: un producto francés nunca recibirá una sugerencia de enlace a un producto inglés (lo que no tendría ningún sentido SEO). Las fronteras de tienda se respetan de la misma forma. La configuración puede diferir por tienda (clave API, umbral de similitud, tipos indexados, hook de visualización) — útil cuando tienes una tienda B2B con contenido técnico y una tienda B2C con contenido para el gran público en la misma infraestructura.

§ 09

Casos de uso típicos

Tienda de moda multiidioma con catálogo de 2.000 productos — el enlazado semántico detecta pares de productos visualmente o estilísticamente cercanos (por ejemplo dos variaciones de un corte de vestido) que las reglas por palabras clave perderían sistemáticamente. Tienda B2B técnica con descripciones densas — el enlazado semántico conecta productos que comparten un mismo caso de uso industrial sin que el vocabulario sea idéntico. Blog de e-commerce — cada artículo puede referenciar automáticamente los productos, categorías y otros artículos más relevantes por significado, con anclas extraídas literalmente del texto del artículo (lo contrario de un find-replace mecánico). Renovación de catálogo — tras una importación masiva o una reorganización, un Reindexar todo reconstruye el enlazado en unos minutos donde una estrategia manual habría llevado semanas de trabajo editorial. Catálogo con vocabulario muy especializado (cosmética bio, equipo médico, productos técnicos) — el módulo detecta proximidades semánticas que los no expertos no verían, y permite al equipo SEO descubrir oportunidades de enlazado no evidentes.

§ 10

Arquitectura interna y compatibilidad PrestaShop 8 y 9

El módulo está construido en PHP 8.1+ con tipos estrictos, clases readonly y características modernas (match, enums). La carga automática es PSR-4 bajo el namespace DataFirefly/AiSemanticLinks/ mapeado en src/. Los controllers admin están en legacy ModuleAdminController (no Symfony Grid) — elección deliberada para garantizar una compatibilidad estable entre PrestaShop 8.0 y 9.x sin tener que mantener dos variantes del código. Un mini-contenedor de servicios casero (ServiceContainer) conecta los repositorios y servicios de negocio — esto aísla al módulo de las diferencias del contenedor Symfony entre versiones de PrestaShop, y evita una dependencia que se rompería en cada actualización mayor. Cinco tablas SQL con prefijo dfasl_: embedding (vectores y hashes), queue (cola de trabajo), suggestion (pares propuestos), inserted_link (enlaces activos), job (operaciones de bulk). La desinstalación elimina limpiamente las 5 tablas y purga todas las variables de configuración DFASL_*. El código fuente se entrega sin cifrar, conforme PSR — puedes override, auditar o extender a tu gusto.