Implementación de tipos de datos vectoriales y búsqueda de vectores

Completado

SQL Server 2025 incluye compatibilidad nativa con tipos de datos vectoriales y búsqueda de vectores. Esta característica permite almacenar incrustaciones de vectores de alta dimensión junto con los datos relacionales y realizar búsquedas de similitud, lo que permite crear aplicaciones que comprendan las relaciones semánticas dentro de los datos.

La búsqueda vectorial aborda las limitaciones de las consultas de base de datos tradicionales. Las bases de datos tradicionales se destacan en coincidencias exactas y consultas estructuradas, pero tienen dificultades para comprender el contexto y el significado. La búsqueda de vectores cambia esto habilitando la comprensión semántica, la capacidad de encontrar elementos conceptualmente similares incluso cuando no comparten palabras clave exactas. Por ejemplo, una búsqueda de "zapatos cómodos para correr" puede encontrar productos descritos como "calzado deportivo acolchado" porque sus incrustaciones vectoriales capturan un significado semántico similar.

Para los desarrolladores, esto significa que puede crear aplicaciones inteligentes sin administrar bases de datos vectoriales independientes ni procesos complejos de sincronización de datos. Al mantener los vectores junto con los datos relacionales en SQL Server, se mantiene el cumplimiento de ACID, se usan directivas de seguridad existentes, se usa la sintaxis de T-SQL conocida y se simplifica la arquitectura. Esta integración se aplica a escenarios como:

  • Búsqueda semántica y recomendaciones: Buscar productos, documentos o contenido relevantes en función del significado en lugar de simplemente palabras clave
  • Sistemas de respuesta a preguntas: Impulsar chatbots y asistentes virtuales que entienden las consultas de lenguaje natural sobre los datos empresariales
  • Detección de anomalías: Identificar patrones inusuales mediante la búsqueda de puntos de datos que están semánticamente distantes del comportamiento normal
  • Desduplicación de contenido: Detectar elementos similares o duplicados incluso cuando están redactados de manera diferente
  • Motores de personalización: Emparejar las preferencias de los usuarios con productos o contenido en función de la similitud matizada

Exploración del tipo de datos vectorial

El tipo de datos vectorial en SQL Server 2025 está diseñado para almacenar matrices de números de punto flotante de forma eficaz. Los vectores se usan normalmente para representar incrustaciones generadas por modelos de IA, donde cada dimensión captura características específicas o características semánticas de los datos.

Exploración de las características clave

  • Formato de almacenamiento optimizado: Los vectores se almacenan en un formato binario optimizado internamente, pero se exponen como matrices JSON para facilitar el uso y la compatibilidad.
  • Precisión flexible: Cada elemento del vector se puede almacenar mediante valores de punto flotante de precisión única (4 bytes) o de precisión media (2 bytes), lo que le permite equilibrar la precisión y la eficacia del almacenamiento.
  • Compatibilidad con dimensiones: SQL Server 2025 admite vectores con hasta 1998 dimensiones para dimensiones de precisión única y 3.996 para la precisión media, que admiten una amplia gama de modelos de inserción.

Creación y almacenamiento de vectores

Puede crear vectores mediante la conversión de matrices JSON al tipo de vector datos. Este es un ejemplo:

-- Create a vector from a JSON array
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);

SELECT @v1 AS v1, @v2 AS v2;

Este código muestra dos maneras de crear un vector 3 dimensional: mediante la conversión directa de un literal de cadena JSON o mediante la JSON_ARRAY función. Ambos métodos producen el mismo resultado, almacenando los valores [1.0, -0.2, 30] en un tipo de datos vectorial.

Para almacenar vectores en una tabla:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name NVARCHAR(100),
    description NVARCHAR(MAX),
    embedding VECTOR(1536)  -- Common dimension for OpenAI embeddings
);

Este código crea una tabla para almacenar información del producto junto con una inserción de vectores 1536 dimensionales. El tamaño de dimensión de 1536 se usa normalmente con los modelos de inserción de texto de OpenAI, lo que hace que esta tabla esté lista para almacenar incrustaciones generadas a partir de descripciones de productos.

Conversión de vectores en JSON

Puede convertir fácilmente vectores en matrices JSON para mostrar o procesar:

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT 
    CAST(@v AS NVARCHAR(MAX)) AS string_representation,
    CAST(@v AS JSON) AS json_representation;

Este código convierte un vector en formatos legibles. El CAST a NVARCHAR(MAX) devuelve el vector como una cadena, mientras que el CAST a JSON lo devuelve como una matriz JSON, lo que resulta útil para la interoperabilidad con aplicaciones y APIs.

Realizar la búsqueda de vecinos más cercana (k-NN)

La búsqueda de vecinos más cercanos exacta (k-NN) implica calcular la distancia entre un vector de consulta y todos los vectores del conjunto de datos, luego de lo cual se devuelven las k coincidencias más cercanas. Este método garantiza resultados precisos, pero puede ser de uso intensivo de cálculo para grandes conjuntos de datos.

Usar la función VECTOR_DISTANCE

La VECTOR_DISTANCE función mide la similitud entre dos vectores mediante una métrica de distancia especificada:

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT TOP (10) 
    product_id, 
    product_name,
    VECTOR_DISTANCE('cosine', @query_vector, embedding) AS distance
FROM products
ORDER BY distance;

Esta consulta genera una inserción para el texto "Pink Floyd music style" mediante el modelo Ada2Embeddings y, a continuación, busca los 10 productos con incrustaciones más similares a la consulta. La función VECTOR_DISTANCE calcula la distancia de coseno entre el vector de consulta y la representación de cada producto, donde distancias más pequeñas indican una mayor similitud.

Elegir métricas de distancia

SQL Server 2025 admite varias métricas de distancia:

  • Similitud de coseno: Mide el ángulo entre vectores, ideal para incrustaciones de texto
  • Distancia euclidiana: Mide la distancia de línea recta en el espacio vectorial
  • Producto de punto: Útil para vectores normalizados

Se recomienda realizar una búsqueda exacta cuando:

  • Tienes menos de 50.000 vectores para buscar
  • Los predicados de consulta filtran el conjunto de datos por un tamaño manejable.
  • Necesita recordar perfectamente (precisión del 100%)
  • El costo de cálculo adicional es aceptable

Implementar la búsqueda de vecino más cercano aproximada (ANN)

En el caso de conjuntos de datos más grandes, la búsqueda aproximada del vecino más cercano (ANN) proporciona un equilibrio entre la velocidad y la precisión. SQL Server 2025 implementa ANN mediante el algoritmo DiskANN, que crea un índice basado en grafos para una navegación vectorial eficaz.

Comprender el recall

El recall mide la proporción de verdaderos vecinos más cercanos que un algoritmo de redes neuronales artificiales identifica en comparación con la búsqueda exacta. Una recuperación de 1,0 (100%) significa que la búsqueda aproximada devuelve los mismos resultados que la búsqueda exacta. En la práctica, los valores de recuperación superiores a 0,95 suelen proporcionar excelentes resultados para las aplicaciones de inteligencia artificial, al tiempo que ofrecen mejoras significativas en el rendimiento.

Creación de índices vectoriales

Para habilitar la búsqueda de ANN, cree un índice vectorial en la columna de vector:

CREATE VECTOR INDEX idx_product_embedding 
ON products(embedding);

Este código crea un índice vectorial en la columna de inserción mediante el algoritmo DiskANN. El índice mejora el rendimiento de las búsquedas de vecinos más cercanas aproximadas en grandes conjuntos de datos mediante la creación de una estructura de grafos para una navegación vectorial eficaz.

Índices vectoriales en SQL Server 2025:

  • Uso del algoritmo DiskANN para una búsqueda eficaz basada en grafos
  • Compatibilidad con recursos limitados de memoria y CPU
  • Equilibrar la E/S del disco, el uso de memoria y el rendimiento de las consultas
  • Actualizar automáticamente a medida que cambian los datos

Usar la función VECTOR_SEARCH

La función VECTOR_SEARCH realiza búsquedas aproximadas de vecinos más cercanos.

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 10
    ) AS s
ORDER BY s.distance;

Esta consulta realiza una búsqueda de vecino más cercana aproximada mediante el índice vectorial creado anteriormente. La VECTOR_SEARCH función usa el algoritmo DiskANN para encontrar los 10 productos más similares sin examinar todos los vectores, lo que proporciona mejoras de rendimiento para grandes conjuntos de datos a la vez que mantiene una alta precisión.

Tener en cuenta las ventajas de rendimiento

Ofertas de búsqueda de ANN:

  • Ejecución de consultas más rápida: Especialmente para conjuntos de datos con millones de vectores
  • Menor consumo de recursos: Reducción del uso de CPU y memoria en comparación con la búsqueda exacta
  • Escalabilidad: Controla de forma eficaz los conjuntos de datos vectoriales a gran escala
  • Recuperación alta: Normalmente, logra tasas de recuperación superiores a 95%, lo que garantiza resultados de calidad

Creación de escenarios de búsqueda híbrida

SQL Server 2025 admite la combinación de búsquedas vectoriales con operaciones sql tradicionales para escenarios de búsqueda híbrida.

Puede realizar la búsqueda semántica mediante vectores, al tiempo que aplica filtros tradicionales:

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'comfortable running shoes' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    t.category,
    t.price,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 20
    ) AS s
WHERE 
    t.category = 'Footwear'
    AND t.price BETWEEN 50 AND 150
ORDER BY s.distance;

Esta búsqueda híbrida combina la búsqueda de similitud semántica con el filtrado SQL tradicional. En primer lugar, encuentra los 20 productos más semánticamente similares a los "zapatos cómodos de correr", luego filtra esos resultados para incluir solo artículos de calzado a precios entre 50 USD y 150 USD. Este enfoque permite la segmentación precisa mientras se usa la comprensión semántica.

Combine la búsqueda de texto completo con la búsqueda de vectores para obtener resultados completos:

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'sustainable materials' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance,
    fts.RANK AS text_rank
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 50
    ) AS s
INNER JOIN CONTAINSTABLE(products, description, 'sustainable OR eco-friendly') AS fts
    ON t.product_id = fts.[KEY]
ORDER BY (s.distance * 0.6) + ((1.0 - fts.RANK/1000.0) * 0.4);

Esta consulta combina la búsqueda vectorial con la búsqueda de texto completo. Encuentra productos semánticamente similares a los "materiales sostenibles" mediante incrustaciones vectoriales y, a continuación, se combina con resultados de búsqueda de texto completo para palabras clave "sostenibles" o "ecológicas" en la descripción. La clasificación final combina ambas puntuaciones con una fórmula ponderada (60% similitud semántica, 40% coincidencia de palabra clave).

Aplicación de procedimientos recomendados

Al implementar la búsqueda de vectores en SQL Server 2025:

  • Elija la precisión correcta: Usar la precisión media para dimensiones más grandes cuando el almacenamiento es un problema
  • Indexación estratégica: Creación de índices vectoriales en columnas que se buscan con frecuencia
  • Supervisión de la recuperación: Pruebe las consultas ANN para asegurarse de que las tasas de recuperación sean aceptables para su caso de uso
  • Optimización de consultas: Usar filtros adecuados para reducir el espacio de búsqueda antes de las operaciones de vector
  • Operaciones por lotes: Generar e insertar inserciones en lotes para mejorar el rendimiento

Mediante estas funcionalidades vectoriales, puede crear aplicaciones basadas en inteligencia artificial que comprendan las relaciones semánticas, proporcionen recomendaciones inteligentes y entreguen experiencias de búsqueda en lenguaje natural, todo ello dentro de la plataforma de SQL Server de confianza.