Comprender un ejemplo de un flujo de trabajo de incrustación

Esta página proporciona un ejemplo de flujo de trabajo que demuestra cómo funciona la función mysql.ml_embedding() con los datos almacenados en las tablas y la funcionalidad de consulta mysql vector . El ejemplo utiliza texto sin formato para obtener un resultado de una base de datos que utiliza el análisis semántico del significado del texto basado en el modelo de lenguaje grande (LLM).

Un escenario de ejemplo de un flujo de trabajo de incrustación

Imagine una base de datos que se ejecuta en Cloud SQL para MySQL con los siguientes aspectos:

  • La base de datos contiene una tabla: items . Cada fila de esta tabla describe un artículo que vende su empresa.

  • La tabla items contiene una columna: complaints . Esta columna almacena las quejas de los compradores registradas sobre cada artículo como texto sin formato.

  • La base de datos se integra con Vertex AI Model Garden , lo que le otorga acceso al LLM textembedding-gecko .

Aunque esta base de datos almacena quejas sobre artículos, estas se almacenan como texto sin formato, lo que dificulta su consulta. Por ejemplo, si desea ver qué artículos reciben más quejas de clientes que recibieron mercancía del color incorrecto, puede realizar consultas SQL comunes en la tabla para buscar coincidencias de palabras clave. Sin embargo, este método solo coincide con las filas que contienen esas mismas palabras clave.

Por ejemplo, una consulta SQL básica como SELECT * FROM item WHERE complaints LIKE "%wrong color%" no devuelve una fila donde el campo complaints contenga solo The picture shows a blue one, but the one I received was red .

Las consultas SQL que utilizan incrustaciones con tecnología LLM pueden ayudar a superar esta brecha. Al aplicar incrustaciones, se puede consultar la tabla de este ejemplo para encontrar elementos cuyas quejas tengan similitud semántica con un mensaje de texto determinado, como "Era del color equivocado".

Los siguientes pasos muestran cómo habilitar esto en el escenario de ejemplo descrito anteriormente.

Preparar la mesa

Antes de ejecutar consultas basadas en LLM en el contenido de la tabla items , debe preparar la tabla para almacenar e indexar incrustaciones en función de sus datos existentes.

Crear una columna para almacenar incrustaciones

Agrega una columna a la tabla para almacenar incrustaciones.

sql ALTER TABLE items ADD COLUMN complaint_embedding vector(768) using varbinary;

Este ejemplo especifica 768 como argumento porque ese es el número de dimensiones que admite el LLM textembedding-gecko . Para más información, consulte Generar una incrustación .

El ejemplo aplica el tipo de datos vector a la columna para simplificar el uso de las funciones y operadores pgvector con los valores de la columna.

Rellene la nueva columna

Utilice la función mysql.ml_embedding() para rellenar esta nueva columna con incrustaciones según el valor del texto de cada fila que aparece en la columna complaints . En este ejemplo, Cloud SQL genera las incrustaciones utilizando el LLM con el ID textembedding-gecko , versión 004 .

UPDATE items SET complaint_embedding = mysql.ml_embedding('text-embedding-005', complaints);
Este ejemplo convierte el valor de retorno binario de mysql.ml_embedding() en un valor vector implícitamente para almacenar el valor en la columna vector que creó en Crear una columna para almacenar incrustaciones .

Crear un índice

Para mejorar el rendimiento, agregue un índice a la tabla de items .

CREATE VECTOR INDEX complaint_embed_idx ON items(complaint_embedding)
  USING SCANN DISTANCE_MEASURE=COSINE;

Para obtener más información sobre la creación de este tipo de índice, consulte Crear un índice de vecino más próximo . Asimismo, para obtener más información sobre cómo ajustar el índice mediante la configuración de parámetros, consulte Incrustaciones de consultas e índices .

Ejecute consultas impulsadas por LLM con el texto proporcionado

Ahora puede realizar consultas semánticas de vecino más próximo en la tabla items . La siguiente consulta utiliza la función approx_distance para realizar las siguientes acciones:

  • Ordena las filas de la tabla por proximidad semántica al texto de It was the wrong color .
  • Devuelve las diez principales quejas.

La consulta muestra los valores de id y name de la primera fila ordenada.

SELECT mysql.ML_EMBEDDING('text-embedding-005', 'It was the wrong color') into @query_vector;

select id, name from items order by approx_distance(complaint_embedding , @query_vector,'distance_measure=cosine') limit 10;

¿Qué sigue?