Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x)
AzureSQL Database Azure SQL Managed Instance
SQL-database
in Microsoft Fabric
De SQL Database Engine biedt de mogelijkheid om elk soort gegevens op te slaan en elk soort query uit te voeren: gestructureerd en ongestructureerd, en om vectorzoekopdrachten uit te voeren op die gegevens. Het is een goede keuze voor scenario's waarin u op al deze gegevens moet zoeken en u geen afzonderlijke service wilt gebruiken om te zoeken die uw architectuur ingewikkeld maakt.
Opmerking
- Vectorfuncties zijn beschikbaar in Azure SQL Managed Instance dat is geconfigureerd met sql Server 2025 of Always-up-to-dateupdatebeleid.
Vectors
Vectoren zijn geordende matrices van getallen (meestal floats) die informatie over sommige gegevens kunnen vertegenwoordigen. Een afbeelding kan bijvoorbeeld worden weergegeven als een vector van pixelwaarden, of een tekenreeks met tekst kan worden weergegeven als een vector van ASCII-waarden. Het proces om gegevens om te zetten in een vector wordt vectorisatie genoemd. Het vectorgegevenstype in SQL Server is ontworpen om deze matrices van getallen efficiënt op te slaan.
Embedderingen
Insluitingen zijn vectoren die belangrijke functies van gegevens vertegenwoordigen. Insluitingen worden vaak geleerd met behulp van een Deep Learning-model en machine learning- en AI-modellen gebruiken ze als functies. Insluitingen kunnen ook semantische overeenkomsten tussen vergelijkbare concepten vastleggen. Bij het genereren van een insluiting voor de woorden person en human, verwachten we bijvoorbeeld dat hun insluitingen (vectorweergave) vergelijkbaar zijn in waarde, omdat de woorden ook semantisch vergelijkbaar zijn.
Azure OpenAI bevat modellen voor het maken van insluitingen op basis van tekstgegevens. De service breekt tekst op in tokens en genereert insluitingen met behulp van modellen die vooraf zijn getraind door OpenAI. Zie Insluitingen maken met Azure OpenAIvoor meer informatie.
Zodra insluitingen zijn gegenereerd, kunnen ze worden opgeslagen in een SQL Server-database. Hiermee kunt u de insluitingen naast de gegevens die ze vertegenwoordigen, opslaan en vectorzoekquery's uitvoeren om vergelijkbare gegevenspunten te vinden.
Zoeken met vectoren
Vectorzoekopdrachten verwijzen naar het proces van het vinden van alle vectoren in een gegevensset die vergelijkbaar zijn met een specifieke queryvector. Daarom zoekt een queryvector voor het woord human de hele dataset op vergelijkbare vectoren en dus vergelijkbare woorden. In dit voorbeeld zou het woord person als een nauwe overeenkomst moeten worden gevonden. Deze nabijheid, of afstand, wordt gemeten met behulp van een metrische afstand, zoals cosinusafstand. Hoe dichtere vectoren zijn, hoe vergelijkbaarer ze zijn.
SQL Server biedt ingebouwde ondersteuning voor vectoren via de vector gegevenstype. Vectoren worden opgeslagen in een geoptimaliseerde binaire indeling, maar worden voor het gemak weergegeven als JSON-matrices. Elk element van de vector wordt opgeslagen als een enkele-precisie (4 bytes) drijvende-kommawaarde. Naast het gegevenstype zijn er speciale functies om te werken op vectoren. Het is bijvoorbeeld mogelijk om de afstand tussen twee vectoren te vinden met behulp van de functie VECTOR_DISTANCE . De functie retourneert een scalaire waarde met de afstand tussen twee vectoren op basis van de metrische afstand die u opgeeft.
Aangezien vectoren doorgaans worden beheerd als matrices van floats, kan het maken van een vector eenvoudigweg worden gedaan door een JSON-matrix naar een vector gegevenstype te gieten. Met de volgende code wordt bijvoorbeeld een vector gemaakt op basis van een JSON-matrix:
SELECT
CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS v1,
CAST(JSON_ARRAY(1.0, -0.2, 30) AS VECTOR(3)) AS v2;
Of gebruik impliciete cast-conversie
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;
Hetzelfde geldt voor het converteren van een vector naar een JSON-matrix:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Exacte zoek- en vectorafstand (exacte dichtstbijzijnde buren)
Exacte zoekopdracht, ook wel k-dichtstbijzijnde buren (k-NN) zoeken genoemd, omvat het berekenen van de afstand tussen een bepaalde vector en alle andere vectoren in een gegevensset, het sorteren van de resultaten en het selecteren van de dichtstbijzijnde buren op basis van een opgegeven afstandsmetrie. Deze methode garandeert nauwkeurige ophaaltijd van de dichtstbijzijnde buren, maar kan rekenintensief zijn, met name voor grote gegevenssets.
Vectorafstandsfuncties worden gebruikt om de nabijheid tussen vectoren te meten. Algemene metrische gegevens over afstand zijn Euclidean afstand, cosinus-gelijkenis en dot-product. Deze functies zijn essentieel voor het uitvoeren van k-NN-zoekopdrachten en het garanderen van nauwkeurige resultaten.
Met exact dichtste buur (ENN) wordt een volledige afstandsbepaling uitgevoerd voor alle geïndexeerde vectoren om het ophalen van de dichtstbijzijnde buren te garanderen, gebaseerd op een specifieke afstandsmatrix. Deze methode is nauwkeurig, maar resource-intensief, waardoor deze geschikt is voor kleinere gegevenssets of scenario's waarbij nauwkeurigheid van het grootste belang is.
In de SQL Database Engine kunnen k-NN-zoekopdrachten worden uitgevoerd met behulp van de functie VECTOR_DISTANCE , waarmee een efficiënte berekening van afstanden tussen vectoren mogelijk is en het ophalen van de dichtstbijzijnde buren mogelijk wordt.
In het volgende voorbeeld ziet u hoe u k-NN kunt doen om de tien meest vergelijkbare vectoren die in de content_vector tabel zijn opgeslagen, te retourneren aan de opgegeven queryvector @qv.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) id, VECTOR_DISTANCE('cosine', @qv, [content_vector]) AS distance, title
FROM [dbo].[wikipedia_articles_embeddings]
ORDER BY distance
Het gebruik van een exacte zoekopdracht wordt aanbevolen wanneer u niet veel vectoren hebt om op te zoeken (minder dan 50.000 vectoren als algemene aanbeveling). De tabel kan veel meer vectoren bevatten zolang uw zoekpredicaat het aantal vectoren vermindert dat moet worden gebruikt voor het zoeken naar buren tot 50.000 of minder.
Geschatte vectorindex en vectorzoekopdracht (dichtstbijzijnde buren)
Opmerking
Approximate vectorindex en vectorzoekopdracht zijn in preview en momenteel alleen beschikbaar in SQL Server 2025 (17.x), Azure SQL Database en SQL database in Microsoft Fabric.
Voor het identificeren van alle vectoren dicht bij een bepaalde queryvector zijn aanzienlijke resources nodig om de afstand tussen de queryvector en de vectoren die zijn opgeslagen in de tabel te berekenen. Het zoeken naar alle vectoren dicht bij een bepaalde queryvector omvat een volledige scan van de tabel en een aanzienlijk CPU-gebruik. Dit wordt een 'K-dichtstbijzijnde buren' of 'k-NN'-query genoemd en retourneert de 'k' dichtstbijzijnde vectoren.
Vectoren worden gebruikt om vergelijkbare gegevens voor AI-modellen te vinden om gebruikersquery's te beantwoorden. Dit omvat het uitvoeren van query's op de database voor de k-vectoren die het dichtst bij de queryvector zijn gelegen met behulp van metrische gegevens over afstand, zoals puntproduct (binnenste), cosinus-overeenkomsten of Euclidische afstand.
K-NN-queries hebben vaak moeite met schaalbaarheid, waardoor het in veel gevallen acceptabel is om enige nauwkeurigheid, met name de recall, in te ruilen voor aanzienlijke snelheidswinsten. Deze methode staat bekend als "bij benadering dichtstbijzijnde buren" (ANN).
Herinnering is een belangrijk concept waarmee iedereen vertrouwd zou moeten raken die vectoren en insluitingen gebruikt of van plan is te gebruiken. In feite meet de herinneringsmaatregel het aandeel van de benaderde dichtstbijzijnde buren die door het algoritme worden geïdentificeerd, ten opzichte van de exacte dichtstbijzijnde buren die een uitputtende zoekopdracht zou opleveren. Daarom is het een goede meting van de kwaliteit van de benadering die het algoritme doet. Een perfecte herinnering, zonder enige benadering, is 1.
Voor AI-toepassingen is de afweging redelijk. Aangezien vector-embeddings al concepten benaderen, heeft het gebruik van ANN geen aanzienlijke invloed op de resultaten, mits de herinnering dicht bij 1 ligt. Dit zorgt ervoor dat de geretourneerde resultaten vergelijkbaar zijn met de resultaten van k-NN, terwijl de prestaties aanzienlijk zijn verbeterd en het resourcegebruik aanzienlijk is verminderd, wat zeer nuttig is voor operationele databases.
Het is belangrijk om te begrijpen dat de term 'index' wanneer deze wordt gebruikt om te verwijzen naar een vectorindex een andere betekenis heeft dan de index waarmee u in relationele databases werkt. In feite retourneert een vectorindex geschatte resultaten.
In de SQL Database-engine zijn vectorindexen gebaseerd op het DiskANN-algoritme . DiskANN is afhankelijk van het maken van een grafiek om snel door alle geïndexeerde vectoren te navigeren om de dichtstbijzijnde overeenkomst met een bepaalde vector te vinden. DiskANN is een systeem op basis van grafieken voor het indexeren en doorzoeken van grote sets vectorgegevens met behulp van beperkte rekenbronnen. Het maakt efficiënt gebruik van SSD's en minimaal geheugen voor het verwerken van aanzienlijk meer gegevens dan indexen in het geheugen, terwijl hoge query's per seconde (QPS) en lage latentie worden onderhouden, waardoor een balans tussen geheugen, CPU en I/O-gebruik en zoekprestaties wordt gegarandeerd.
U kunt eerst een vectorindex maken met behulp van de opdracht CREATE VECTOR INDEX T-SQL en vervolgens VECTOR_SEARCH T-SQL-functie gebruiken om de zoekopdracht bij benadering uit te voeren.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDINGS(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT
t.id, s.distance, t.title
FROM
VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance