Diseño de inserciones para cargas de trabajo de SQL Database

Completado

Las incrustaciones representan datos como vectores para que se pueda comparar la similitud entre fragmentos de texto. La forma en que diseñó las incrustaciones afecta a la relevancia, el rendimiento y el costo cuando los vectores se generan y consultan posteriormente.

SQL Server proporciona funciones de inteligencia artificial integradas que admiten la inserción de flujos de trabajo. Los patrones de búsqueda vectorial comunes ayudan a guiar cómo se debe preparar el texto antes de generar incrustaciones.

Comprender cómo se crean los vectores

¿Pero qué significa el término vector en el contexto de la integración de IA con una base de datos SQL?

Un modelo de IA crea un vector, no el propio SQL. El modelo se entrenó para leer texto y devolver una lista de números que representa el significado de ese texto.

Cuando SQL envía texto a un modelo de inserción, el modelo devuelve un vector, que SQL almacena para la comparación posterior con otros vectores.

Por ejemplo, cuando el texto "mochila ligera de senderismo" se envía a un modelo de inserción, el modelo podría devolver:

[0.12, -0.87, 0.45, 0.31, …]

Una frase relacionada como "mochila compacta para caminatas de día" produciría una lista diferente de números que se parece a:

[0.10, -0.85, 0.47, 0.29, …]

Dado que los vectores tienen un aspecto similar, SQL puede tratar las dos partes de texto como relacionadas, aunque la redacción sea diferente.

Identificación de los datos que se van a incluir en las incrustaciones

Las incrustaciones funcionan mejor cuando representan texto que lleva significado semántico, como descripciones, títulos u otros campos de texto de forma libre.

Las columnas que almacenan identificadores, valores numéricos o metadatos operativos normalmente no agregan valor semántico y deben excluirse. Limitar las incrustaciones a texto significativo reduce el uso de tokens y mejora los resultados de similitud.

Las opciones de diseño en esta fase determinan qué incrustaciones de información capturan y qué tan bien representan los datos subyacentes.

Control del tamaño y la estructura de entrada

Los modelos de incrustación funcionan con entrada tokenizada e imponen límites a la cantidad de texto que se puede procesar en una sola solicitud. Un token es un pequeño fragmento de texto, como una palabra o parte de una palabra, que el modelo procesa como una unidad. Los valores de texto largo suelen requerir la división en unidades más pequeñas.

SQL Server admite este patrón a través de funciones de IA integradas que ayudan a preparar texto para insertar flujos de trabajo. Al controlar el tamaño de entrada, puede mantener el texto dentro de los límites del modelo y asegurarse de que cada inserción representa una parte clara y centrada del contenido.

La entrada bien estructurada también ayuda a evitar insertar ideas no relacionadas juntas, lo que puede reducir la calidad de los resultados de similitud.

Diseñar estrategias de fragmentación

La división en fragmentos define cómo se dividen los valores de texto más grandes en segmentos más pequeños. Una estrategia de fragmentación equilibra el contexto y la precisión.

Los fragmentos demasiado grandes pueden superar los límites de token o diluir el foco semántico. Los fragmentos que son demasiado pequeños pueden perder contexto importante. El objetivo es conservar el significado al tiempo que mantiene los fragmentos eficientes para procesar.

En la práctica, la fragmentación se define mediante las reglas que se aplican al dividir texto en SQL. Estas reglas suelen controlar la cantidad de texto que entra en cada fragmento, como un número máximo de caracteres y dónde se permiten las divisiones.

AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500)

Al definir reglas de fragmentación directamente en SQL, cerca de las tablas de origen, puede cambiar el tamaño del fragmento o el comportamiento de división ajustando la consulta en lugar de modificar el código de la aplicación.

Aplicación del diseño de inserción con SQL

En el ejemplo siguiente se muestra un patrón conceptual que prepara el texto para la generación de incrustaciones mediante la división en unidades más pequeñas.

SELECT
    id,
    c.chunk
FROM dbo.documents
CROSS APPLY
    AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500) AS c;

En este ejemplo, el texto de la description columna se divide en fragmentos de hasta 500 caracteres. Cada fragmento se puede pasar más adelante a una función de inserción, lo que garantiza que las incrustaciones representen partes centradas del contenido original.

Por ejemplo, si una fila contiene el texto siguiente en la description columna:

"Lightweight backpack designed for long day hikes in warm weather."

La función de fragmentación puede producir varios fragmentos, como:

  • "Lightweight backpack designed for long day hikes"
  • "in warm weather."

La consulta devuelve cada fragmento como una fila independiente. Estas partes más pequeñas se pueden pasar individualmente a una función de inserción para que cada inserción represente una parte centrada del texto original.

Sugerencia

Un patrón de diseño es almacenar vectores en una tabla independiente de los datos de texto de origen. Una tabla dedicada de incrustaciones facilita el seguimiento de cuántos recursos consumen los vectores y reconstruir las incrustaciones sin afectar a los datos originales.

Conclusiones clave

La calidad de la inserción depende de las decisiones que tome antes de que se ejecute cualquier modelo. Elegir las columnas correctas y fragmentar el texto largo en segmentos centrados con AI_GENERATE_CHUNKS determina cuán útiles son los resultados de la búsqueda vectorial. Si se toman las decisiones correctas desde el principio, se evitan costosas modificaciones cuando se pasa a la generación y el almacenamiento de inserciones.