Implémenter des types de données vectorielles et une recherche vectorielle
SQL Server 2025 inclut la prise en charge native des types de données vectorielles et de la recherche vectorielle. Cette fonctionnalité vous permet de stocker des incorporations de vecteurs haute dimension en même temps que vos données relationnelles et d’effectuer des recherches de similarité, ce qui vous permet de créer des applications qui comprennent les relations sémantiques au sein de vos données.
La recherche vectorielle résout les limitations des requêtes de base de données traditionnelles. Les bases de données traditionnelles excellent à des correspondances exactes et des requêtes structurées, mais elles ont du mal à comprendre le contexte et la signification. La recherche vectorielle change cela en activant la compréhension sémantique , la possibilité de trouver des éléments conceptuellement similaires même lorsqu’ils ne partagent pas de mots clés exacts. Par exemple, une recherche de « chaussures de course confortables » peut trouver des produits décrits comme « chaussures athlétiques amorties », car leurs incorporations vectorielles capturent une signification sémantique similaire.
Pour les développeurs, cela signifie que vous pouvez créer des applications intelligentes sans gérer des bases de données vectorielles distinctes ou des processus de synchronisation de données complexes. En conservant vos vecteurs en même temps que vos données relationnelles dans SQL Server, vous maintenez la conformité ACID, utilisez des stratégies de sécurité existantes, utilisez la syntaxe T-SQL familière et simplifiez votre architecture. Cette intégration s’applique aux scénarios tels que :
- Recherche sémantique et recommandations : Rechercher des produits, des documents ou du contenu pertinents en fonction de la signification plutôt que des mots clés
- Systèmes de réponses aux questions : Power chatbots et assistants virtuels qui comprennent les requêtes en langage naturel sur vos données d’entreprise
- Détection d’anomalie : Identifier des modèles inhabituels en recherchant des points de données qui sont sémantiquement éloignés du comportement normal
- Déduplication du contenu : Détecter des éléments similaires ou dupliqués même lorsqu’ils sont wordés différemment
- Moteurs de personnalisation : Faire correspondre les préférences utilisateur aux produits ou au contenu en fonction de la similarité nuancée
Explorer le type de données vectorielles
Le type de données vectorielles dans SQL Server 2025 est conçu pour stocker efficacement des tableaux de nombres à virgule flottante. Les vecteurs sont couramment utilisés pour représenter des incorporations générées par des modèles IA, où chaque dimension capture des caractéristiques spécifiques ou des caractéristiques sémantiques des données.
Explorer les principales caractéristiques
- Format de stockage optimisé : Les vecteurs sont stockés dans un format binaire optimisé en interne, mais exposés en tant que tableaux JSON pour faciliter l’utilisation et la compatibilité.
- Précision flexible : Chaque élément du vecteur peut être stocké à l’aide de valeurs à virgule flottante simple précision (4 octets) ou demi-précision (2 octets), ce qui vous permet d’équilibrer la précision et l’efficacité du stockage.
- Prise en charge des dimensions : SQL Server 2025 prend en charge les vecteurs avec jusqu’à 1998 dimensions pour une seule précision et 3 996 dimensions pour la demi-précision, prenant en charge une large gamme de modèles incorporés.
Créer et stocker des vecteurs
Vous pouvez créer des vecteurs en cas de conversion de tableaux JSON vers le vector type de données. Voici un exemple :
-- 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;
Ce code montre deux façons de créer un vecteur 3 dimensionnel : en effectuant un cast direct d’une chaîne JSON, ou en utilisant la JSON_ARRAY fonction. Les deux méthodes produisent le même résultat, stockant les valeurs [1.0, -0.2, 30] dans un type de données vectorielle.
Pour stocker des vecteurs dans une table :
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name NVARCHAR(100),
description NVARCHAR(MAX),
embedding VECTOR(1536) -- Common dimension for OpenAI embeddings
);
Ce code crée une table pour stocker les informations de produit ainsi qu'un vecteur d'intégration de 1536 dimensions. La taille de dimension 1536 est couramment utilisée avec les modèles d’incorporation de texte d’OpenAI, ce qui rend cette table prête à stocker les incorporations générées à partir de descriptions de produits.
Convertir des vecteurs en JSON
Vous pouvez facilement convertir des vecteurs en tableaux JSON pour l’affichage ou le traitement :
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;
Ce code convertit un vecteur en formats lisibles.
CAST sur NVARCHAR(MAX) renvoie le vecteur sous forme de chaîne, alors que CAST sur JSON le renvoie sous forme de tableau JSON, ce qui est utile pour l’interopérabilité avec les applications et les API.
Effectuer une recherche exacte du voisin le plus proche (k-NN)
La recherche exacte du voisin le plus proche (k-NN) implique le calcul de la distance entre un vecteur de requête et tous les vecteurs de votre jeu de données, puis retourne les correspondances k les plus proches. Cette méthode garantit des résultats précis, mais peut être gourmande en calcul pour les jeux de données volumineux.
Utiliser la fonction VECTOR_DISTANCE
La VECTOR_DISTANCE fonction mesure la similarité entre deux vecteurs à l’aide d’une métrique de distance spécifiée :
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;
Cette requête génère une incorporation pour le texte « Pink Floyd music style » à l’aide du modèle Ada2Embeddings, puis recherche les 10 produits avec des incorporations les plus similaires à la requête. La VECTOR_DISTANCE fonction calcule la distance de cosinus entre le vecteur de requête et l’incorporation de chaque produit, avec des distances plus petites indiquant une plus grande similarité.
Choisir les métriques de distance
SQL Server 2025 prend en charge plusieurs métriques de distance :
- Similarité cosinus : Mesure l’angle entre les vecteurs, idéal pour les incorporations de texte
- Distance euclide : Mesure la distance de ligne droite dans l’espace vectoriel
- Produit dot : utile pour les vecteurs normalisés
Déterminer quand utiliser la recherche exacte
La recherche exacte est recommandée lorsque :
- Vous avez moins de 50 000 vecteurs à rechercher
- Vos prédicats de requête filtrent le jeu de données à une taille gérable
- Vous avez besoin d’un rappel parfait (100% précision)
- Le coût supplémentaire de calcul est acceptable
Implémenter une recherche approximative du voisin le plus proche (ANN)
Pour les jeux de données plus volumineux, la recherche du voisin le plus proche (ANN) offre un équilibre entre la vitesse et la précision. SQL Server 2025 implémente ANN à l’aide de l’algorithme DiskANN, qui crée un index basé sur un graphique pour une navigation vectorielle efficace.
Comprendre le rappel
Rappelez-vous mesure la proportion de vrais voisins les plus proches qu’un algorithme ANN identifie par rapport à la recherche exacte. Un rappel de 1.0 (100%) signifie que la recherche approximative retourne les mêmes résultats que la recherche exacte. Dans la pratique, les valeurs de rappel supérieures à 0,95 fournissent souvent d’excellents résultats pour les applications IA tout en offrant des améliorations significatives des performances.
Créer des index vectoriels
Pour activer la recherche ANN, créez un index vectoriel sur votre colonne vectorielle :
CREATE VECTOR INDEX idx_product_embedding
ON products(embedding);
Ce code crée un index vectoriel sur la colonne d’incorporation à l’aide de l’algorithme DiskANN. L’index améliore les performances des recherches approximatives du voisin le plus proche sur des jeux de données volumineux en créant une structure de graphique pour une navigation vectorielle efficace.
Index vectoriels dans SQL Server 2025 :
- Utiliser l’algorithme DiskANN pour une recherche basée sur des graphiques efficace
- Prendre en charge des ressources limitées de mémoire et d’unité centrale
- Équilibrer les E/S de disque, l’utilisation de la mémoire et les performances des requêtes
- Mettre à jour automatiquement lorsque les données changent
Utiliser la fonction VECTOR_SEARCH
La VECTOR_SEARCH fonction effectue des recherches approximatives du voisin le plus proche :
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;
Cette requête effectue une recherche voisine la plus proche approximative à l’aide de l’index vectoriel créé précédemment. La VECTOR_SEARCH fonction utilise l’algorithme DiskANN pour rechercher les 10 produits les plus similaires sans analyser tous les vecteurs, fournissant des améliorations des performances pour les jeux de données volumineux tout en conservant une précision élevée.
Prendre en compte les avantages en matière de performances
Offres de recherche ANN :
- Exécution plus rapide des requêtes : En particulier pour les jeux de données avec des millions de vecteurs
- Réduction de la consommation des ressources : Réduction de l’utilisation du processeur et de la mémoire par rapport à la recherche exacte
- Scalabilité : Gère efficacement les jeux de données vectoriels à grande échelle
- Rappel élevé : Obtient généralement des taux de rappel supérieurs à 95%, ce qui garantit des résultats de qualité
Créer des scénarios de recherche hybride
SQL Server 2025 prend en charge la combinaison de la recherche vectorielle avec les opérations SQL traditionnelles pour les scénarios de recherche hybride.
Combiner la recherche sémantique et de mot clé
Vous pouvez effectuer une recherche sémantique à l’aide de vecteurs tout en appliquant également des filtres traditionnels :
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;
Cette recherche hybride combine la recherche de similarité sémantique avec le filtrage SQL traditionnel. Tout d’abord, il trouve les 20 produits les plus sémantiquement similaires à « chaussures de course confortables », puis filtre ces résultats pour inclure uniquement les articles de chaussures facturés entre 50 USD et 150 USD. Cette approche permet un ciblage précis tout en utilisant la compréhension sémantique.
Intégrer la recherche de texte intégral et de vecteur
Combinez la recherche en texte intégral avec la recherche vectorielle pour obtenir des résultats complets :
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);
Cette requête combine la recherche vectorielle avec la recherche en texte intégral. Il trouve des produits sémantiquement similaires à « matériaux durables » à l’aide d’incorporations vectorielles, puis se joint aux résultats de recherche en texte intégral pour les mots clés « durables » ou « écologiques » dans la description. Le classement final combine les deux scores avec une formule pondérée (60% similarité sémantique, 40% correspondance de mot clé).
Appliquer les meilleures pratiques
Lors de l’implémentation de la recherche vectorielle dans SQL Server 2025 :
- Choisissez la bonne précision : Utiliser la demi-précision pour les dimensions plus grandes lorsque le stockage est un problème
- Index stratégiquement : créer des index vectoriels sur des colonnes fréquemment recherchées
- Rappel du moniteur : Testez vos requêtes ANN pour garantir des taux de rappel acceptables pour votre cas d’usage
- Optimiser les requêtes : Utiliser les filtres appropriés pour réduire l’espace de recherche avant les opérations vectorielles
- Opérations par lots : Générer et insérer des incorporations dans des lots pour améliorer les performances
À l’aide de ces fonctionnalités vectorielles, vous pouvez créer des applications basées sur l’IA qui comprennent les relations sémantiques, fournir des recommandations intelligentes et offrir des expériences de recherche en langage naturel, toutes au sein de la plateforme SQL Server approuvée.