Implementera vektordatatyper och vektorsökning

Slutförd

SQL Server 2025 innehåller inbyggt stöd för vektordatatyper och vektorsökning. Med den här funktionen kan du lagra högdimensionella vektorbäddningar tillsammans med dina relationsdata och utföra likhetssökningar, vilket gör det möjligt att skapa program som förstår semantiska relationer i dina data.

Vektorsökning åtgärdar begränsningar i traditionella databasfrågor. Traditionella databaser utmärker sig på exakta matchningar och strukturerade frågor, men de kämpar med att förstå kontext och mening. Vektorsökning ändrar detta genom att aktivera semantisk förståelse – möjligheten att hitta konceptuellt liknande objekt även när de inte delar exakta nyckelord. Till exempel kan en sökning efter "bekväma löparskor" hitta produkter som beskrivs som "dämpade atletiska skor" eftersom deras vektorinbäddningar fångar liknande semantisk betydelse.

För utvecklare innebär det att du kan skapa intelligenta program utan att hantera separata vektordatabaser eller komplexa datasynkroniseringsprocesser. Genom att behålla dina vektorer tillsammans med dina relationsdata i SQL Server upprätthåller du ACID-efterlevnad, använder befintliga säkerhetsprinciper, använder välbekant T-SQL-syntax och förenklar arkitekturen. Den här integreringen gäller för scenarier som:

  • Semantisk sökning och rekommendationer: Hitta relevanta produkter, dokument eller innehåll baserat på innebörd snarare än bara nyckelord
  • Frågesvarssystem: Driv chatbots och virtuella assistenter som förstår frågor på naturligt språk om dina företagsdata
  • Avvikelseidentifiering: Identifiera ovanliga mönster genom att hitta datapunkter som är semantiskt avlägsna från normalt beteende
  • Innehållsdeduplicering: Identifiera liknande eller duplicerade objekt även när de är formulerade på olika sätt
  • Personanpassningsmotorer: Matcha användarinställningar med produkter eller innehåll baserat på nyanserad likhet

Utforska vektordatatypen

Vektordatatypen i SQL Server 2025 är utformad för att effektivt lagra matriser med flyttalsnummer. Vektorer används ofta för att representera inbäddningar som genereras av AI-modeller, där varje dimension samlar in specifika funktioner eller semantiska egenskaper hos data.

Utforska viktiga egenskaper

  • Optimerat lagringsformat: Vektorer lagras i ett optimerat binärt format internt men exponeras som JSON-matriser för enkel användning och kompatibilitet.
  • Flexibel precision: Varje element i vektorn kan lagras med enkel precision (4 byte) eller halvprecision (2 byte) flyttalsvärden, så att du kan balansera noggrannhet och lagringseffektivitet.
  • Dimensionsstöd: SQL Server 2025 stöder vektorer med upp till 1998 dimensioner för enkel precision och 3 996 dimensioner för halvprecision, vilket ger en mängd olika inbäddningsmodeller.

Skapa och lagra vektorer

Du kan skapa vektorer genom att casta JSON-matriser till vector datatypen. Här är ett exempel:

-- 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;

Den här koden visar två sätt att skapa en 3-dimensionell vektor: genom att direkt kasta en JSON-strängliteralen eller med hjälp av funktionen JSON_ARRAY. Båda metoderna ger samma resultat och lagrar värdena [1.0, -0.2, 30] i en vektordatatyp.

Så här lagrar du vektorer i en tabell:

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

Den här koden skapar en tabell för att lagra produktinformation tillsammans med en 1536-dimensionell vektorbäddning. Dimensionsstorleken 1536 används ofta med OpenAI:s textinbäddningsmodeller, vilket gör den här tabellen redo att lagra inbäddningar som genereras från produktbeskrivningar.

Konvertera vektorer till JSON

Du kan enkelt konvertera vektorer tillbaka till JSON-matriser för visning eller bearbetning:

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;

Den här koden konverterar tillbaka en vektor till läsbara format. CAST NVARCHAR(MAX) returnerar vektorn som en sträng, medan CASTJSON returnerar den som en JSON-matris, vilket är användbart för interoperabilitet med applikationer och API:er.

Utför exakt närmaste grannsökning (k-NN)

Exakt närmsta grannsökning (k-NN) innebär att beräkna avståndet mellan en frågevektor och alla vektorer i datauppsättningen och sedan returnera de k närmaste matchningarna. Den här metoden garanterar exakta resultat men kan vara beräkningsintensiv för stora datamängder.

Använd VECTOR_DISTANCE funktionen

Funktionen VECTOR_DISTANCE mäter likheten mellan två vektorer med ett angivet avståndsmått:

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;

Den här frågan genererar en inbäddning för texten "Pink Floyd music style" med hjälp av modellen Ada2Embeddings och hittar sedan de 10 produkter med inbäddningar som mest liknar frågan. Funktionen VECTOR_DISTANCE beräknar cosinéavståndet mellan frågevektorn och varje produkts inbäddning, med mindre avstånd som indikerar större likhet.

Välj avståndsmått

SQL Server 2025 stöder flera avståndsmått:

  • Cosinélikhet: Mäter vinkeln mellan vektorer, perfekt för textbäddningar
  • Euklidiska avstånd: Mäter rät linjeavstånd i vektorutrymme
  • Dot-produkt: Användbart för normaliserade vektorer

Exakt sökning rekommenderas när:

  • Du har färre än 50 000 vektorer att söka efter
  • Dina frågepredikat filtrerar datamängden till en hanterbar storlek
  • Du behöver perfekt återkallelse (100% noggrannhet)
  • Den extra beräkningskostnaden är acceptabel

Implementera ungefärlig sökning efter närmaste granne (ANN)

För större datamängder ger en ungefärlig ann-sökning (närmaste granne) en balans mellan hastighet och noggrannhet. SQL Server 2025 implementerar ANN med hjälp av DiskANN-algoritmen, som skapar ett grafbaserat index för effektiv vektornavigering.

Förstå återkallande

Recall mäter andelen sanna närmaste grannar som en ANN-algoritm identifierar jämfört med exakt sökning. En återkallelse av 1,0 (100%) innebär att den ungefärliga sökningen returnerar samma resultat som exakt sökning. I praktiken ger återkallandevärden över 0,95 ofta utmärkta resultat för AI-program samtidigt som betydande prestandaförbättringar erbjuds.

Skapa vektorindex

Om du vill aktivera ANN-sökning skapar du ett vektorindex i vektorkolumnen:

CREATE VECTOR INDEX idx_product_embedding 
ON products(embedding);

Den här koden skapar ett vektorindex i inbäddningskolumnen med hjälp av DiskANN-algoritmen. Indexet förbättrar prestandan för ungefärliga närliggande sökningar på stora datamängder genom att skapa en grafstruktur för effektiv vektornavigering.

Vektorindex i SQL Server 2025:

  • Använda DiskANN-algoritmen för effektiv grafbaserad sökning
  • Stöd för begränsat minne och CPU-resurser
  • Balansera disk-I/O, minnesanvändning och frågeprestanda
  • Uppdatera automatiskt när data ändras

Använd VECTOR_SEARCH funktionen

Funktionen VECTOR_SEARCH utför ungefärliga närmsta grannsökningar:

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;

Den här frågan utför en ungefärlig sökning efter närmaste granne med hjälp av vektorindexet som skapades tidigare. Funktionen VECTOR_SEARCH använder DiskANN-algoritmen för att hitta de 10 mest liknande produkterna utan att genomsöka alla vektorer, vilket ger prestandaförbättringar för stora datamängder samtidigt som hög noggrannhet bibehålls.

Överväg prestandafördelar

ANN-sökerbjudanden:

  • Snabbare frågekörning: Särskilt för datauppsättningar med miljontals vektorer
  • Lägre resursförbrukning: Minskad processor- och minnesanvändning jämfört med exakt sökning
  • Skalbarhet: Hanterar storskaliga vektordatauppsättningar effektivt
  • Hög återkallelse: Uppnår vanligtvis återkallelsefrekvens över 95%, vilket säkerställer resultat av hög kvalitet

Skapa hybridsökningsscenarier

SQL Server 2025 stöder kombination av vektorsökning med traditionella SQL-åtgärder för hybridsökningsscenarier.

Du kan utföra semantisk sökning med hjälp av vektorer samtidigt som du använder traditionella filter:

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;

Den här hybridsökningen kombinerar semantisk likhetssökning med traditionell SQL-filtrering. Först finner den de 20 mest semantiskt liknande produkterna till "bekväma löparskor", och filtrerar sedan dessa resultat för att endast inkludera skor som är prissatta mellan 50 USD och 150 USD. Den här metoden möjliggör exakt målinriktning när du använder semantisk förståelse.

Kombinera fulltextsökning med vektorsökning för omfattande resultat:

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);

Den här frågan kombinerar vektorsökning med fulltextsökning. Den hittar produkter som semantiskt liknar "hållbara material" med hjälp av vektorinbäddningar och ansluter sedan till fulltextsökresultat för nyckelord "hållbara" eller "miljövänliga" i beskrivningen. Den slutliga rankningen kombinerar båda poängen med en viktad formel (60% semantisk likhet, 40% nyckelordsmatchning).

Tillämpa bästa praxis

När du implementerar vektorsökning i SQL Server 2025:

  • Välj rätt precision: Använd halv precision för större dimensioner när lagring är ett problem
  • Index strategiskt: Skapa vektorindex för kolumner som söks ofta
  • Övervaka återkallelse: Testa dina ANN-frågor för att säkerställa godtagbar återkallelsegrad för ditt användningsfall
  • Optimera frågor: Använd lämpliga filter för att minska sökutrymmet före vektoråtgärder
  • Batch-åtgärder: Generera och infoga inbäddningar i batchar för bättre prestanda

Genom att använda dessa vektorfunktioner kan du skapa AI-baserade program som förstår semantiska relationer, ger intelligenta rekommendationer och levererar sökupplevelser för naturligt språk – allt inom den betrodda SQL Server-plattformen.