Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database a Microsoft Fabricben
Az SQL Database Engine lehetővé teszi bármilyen adat tárolását és bármilyen lekérdezés futtatását: strukturált és strukturálatlan, valamint vektorkeresést végezhet az adatokon. Ez egy jó választás olyan helyzetekben, ahol az összes adatot együtt kell keresnie, és nem szeretne külön szolgáltatást használni a kereséshez, amely bonyolítaná az architektúrát.
Megjegyzés:
- A vektorfunkciók az SQL Server 2025 vagy always-up-todátumfrissítési szabályzattal konfigurált felügyelt Azure SQL-példányban érhetők el.
Vectors
A vektorok számokat tartalmazó rendezett tömbök (általában lebegőpontosak), amelyek bizonyos adatokkal kapcsolatos információkat képviselnek. Egy kép például a képpontértékek vektoraként is megjeleníthető, vagy egy szöveges sztring az ASCII-értékek vektoraként is megjeleníthető. Az adatok vektorossá alakításának folyamatát vektorizálásnak nevezzük. Az SQL Server vektoros adattípusa úgy lett kialakítva, hogy hatékonyan tárolja ezeket a számtömböket.
Beágyazások
A beágyazások olyan vektorok, amelyek az adatok fontos jellemzőit képviselik. A beágyazásokat gyakran mélytanulási modell használatával tanulják meg, és a gépi tanulási és AI-modellek funkcióként használják őket. A beágyazások a hasonló fogalmak szemantikai hasonlóságát is rögzíthetik. Például a person és humanszavak beágyazásának létrehozásakor elvárnánk, hogy a beágyazásuk (vektorábrázolás) értéke hasonló legyen, mivel a szavak szemantikailag is hasonlóak.
Az Azure OpenAI olyan modelleket kínál, amelyekkel beágyazásokat hozhat létre szöveges adatokból. A szolgáltatás tokenekre bontja a szöveget, és beágyazásokat hoz létre az OpenAI által előre betanított modellek használatával. További információ: Beágyazások létrehozása az Azure OpenAI.
A beágyazások létrehozása után sql Server-adatbázisba is tárolhatók. Ez lehetővé teszi, hogy a beágyazásokat az általuk képviselt adatok mellett tárolja, és vektorkeresési lekérdezéseket hajthat végre a hasonló adatpontok megkereséséhez.
Vektoros keresés
A vektorkeresés egy adott lekérdezésvektorhoz hasonló adathalmaz összes vektorának megkeresésére utal. Ezért a human szó lekérdezésvektorának a teljes adathalmazban hasonló vektorokat, és így hasonló szavakat kell keresnie: ebben a példában a person szót szoros egyezésként kell megtalálnia. Ezt a közelséget vagy távolságot egy távolságmetrika, például a koszinusz távolsága alapján mérik. Minél közelebb vannak a vektorok, annál hasonlóbbak.
Az SQL Server beépített támogatást nyújt a vektorokhoz a vektor adattípuson keresztül. A vektorok tárolása optimalizált bináris formátumban történik, de JSON-tömbökként van elérhetővé téve a kényelem érdekében. A vektor minden eleme egypontos (4 bájt) lebegőpontos értékkel van tárolva. Az adattípus mellett dedikált függvények is léteznek a vektorokon való működéshez. A VECTOR_DISTANCE függvénnyel például két vektor közötti távolságot is meg lehet találni. A függvény egy skaláris értéket ad vissza két vektor távolságával a megadott távolságmetrika alapján.
Mivel a vektorokat általában lebegőpontos tömbökként kezelik, a vektorok létrehozása egyszerűen elvégezhető egy JSON-tömb vektor adattípusba való beírásával. A következő kód például létrehoz egy vektort egy JSON-tömbből:
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;
Vagy implicit öntés használata
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;
Ugyanez vonatkozik a vektor JSON-tömbökké való konvertálására is:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Pontos keresés és vektor távolság (pontos legközelebbi szomszédok)
A pontos keresés, más néven k-legközelebbi szomszéd (k-NN) keresés magában foglalja egy adott vektor és az adathalmaz összes többi vektora közötti távolság kiszámítását, az eredmények rendezését és a legközelebbi szomszédok kiválasztását egy megadott távolságmetrika alapján. Ez a módszer garantálja a legközelebbi szomszédok pontos lekérését, de számításigényes lehet, különösen nagy adathalmazok esetén.
A vektorok távolságfüggvényei a vektorok közötti közelség mérésére szolgálnak. A gyakori távolságmetrikák közé tartozik az euklideszi távolság, a koszinusz hasonlósága és a pont termék. Ezek a függvények elengedhetetlenek a k-NN-keresésekhez és a pontos eredmények biztosításához.
A pontos legközelebbi szomszéd (ENN) vektor keresés teljes körű távolságszámítást végez az összes indexelt vektoron, hogy a legközelebbi szomszédokat egy megadott távolságmetrika alapján visszakeresse. Ez a módszer pontos, de erőforrás-igényes, így alkalmas kisebb adathalmazokhoz vagy olyan forgatókönyvekhez, ahol a pontosság a legfontosabb.
Az SQL Database Engine-ben a k-NN-keresések a VECTOR_DISTANCE függvénnyel végezhetők el, amely lehetővé teszi a vektorok közötti távolságok hatékony kiszámítását, és megkönnyíti a legközelebbi szomszédok beolvasását.
A következő példa bemutatja, hogyan lehet a k-NN módszert használni a táblázatban tárolt vektorok közül a 10 leginkább hasonlót visszaadni az adott lekérdezésvektorra content_vector.
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
A pontos keresés akkor ajánlott, ha nincs sok vektora a kereséshez (általános javaslatként kevesebb mint 50 000 vektort használ). A táblázat több vektort is tartalmazhat, ha a keresési predikátumok 50 000 vagy annál kevesebb vektorra csökkentik a szomszédkereséshez használandó vektorok számát.
Hozzávetőleges vektorindex és vektorkeresés (közelítő legközelebbi szomszédok)
Megjegyzés:
A közelítő vektorindex és vektorkeresés előnézetben van, jelenleg csak SQL Server 2025 (17.x), Azure SQL Database és SQL adatbázis Microsoft Fabric-ben érhető el.
Az adott lekérdezésvektorhoz közeli összes vektor azonosításához jelentős erőforrásokra van szükség a lekérdezésvektor és a táblázatban tárolt vektorok közötti távolság kiszámításához. Az adott lekérdezésvektorhoz közeli összes vektor keresése magában foglalja a tábla teljes vizsgálatát és a jelentős processzorhasználatot. Ezt "K-legközelebbi szomszédoknak" vagy "k-NN" lekérdezésnek nevezzük, és a legközelebbi "k" vektorokat adja vissza.
A vektorok hasonló adatokat keresnek az AI-modellekhez a felhasználói lekérdezések megválaszolásához. Ez magában foglalja a lekérdezési vektorhoz legközelebbi "k" vektorok adatbázisának lekérdezését olyan távolságmetrikák használatával, mint a pont (belső) termék, a koszinusz hasonlósága vagy az euklideszi távolság.
A K-NN-lekérdezések gyakran küzdenek a méretezhetőséggel, így sok esetben elfogadható bizonyos pontosság, különösen a felidézés feláldozása a jelentős sebességnövekedés érdekében. Ez a módszer a legközelebbi legközelebbi szomszédok (ANN) néven ismert.
A visszahívás egy fontos fogalom, amely mindenki számára ismerős lehet, aki vektorokat és beágyazásokat használ vagy tervez használni. A visszahívás valójában az algoritmus által azonosított közelítő szomszédok arányát méri a teljes keresés által visszaadott legközelebbi szomszédokkal összehasonlítva. Ezért az algoritmus által végzett közelítés minőségének jó mércéje. A tökéletes visszahívás, amely egyenértékű a közelítés hiányával, 1.
Az AI-alkalmazások esetében a kompromisszumok meglehetősen ésszerűek. Mivel a vektoros beágyazások már megközelítik a fogalmakat, az ANN használata nem befolyásolja jelentősen az eredményeket, feltéve, hogy a visszahívás közel 1. Ez biztosítja, hogy a visszaadott eredmények nagyon hasonlóak legyenek a k-NN-től kapott eredményekhez, miközben jelentősen javult a teljesítmény és jelentősen csökkent az erőforrás-használat, ami rendkívül előnyös az operatív adatbázisok számára.
Fontos tisztában lenni azzal, hogy a vektorindexre való hivatkozáskor használt "index" kifejezésnek más jelentése van, mint a relációs adatbázisokban használt indexnek. Valójában a vektorindex hozzávetőleges eredményeket ad vissza.
Az SQL Database motorban a vektorindexek a DiskANN algoritmuson alapulnak. A DiskANN egy gráf létrehozására támaszkodik, amely gyorsan végigjárja az összes indexelt vektort, hogy megkeresse az adott vektorhoz legközelebbi egyezést. A DiskANN egy gráfalapú rendszer, amely nagy mennyiségű vektoradatot indexel és keres korlátozott számítási erőforrások használatával. Hatékonyan használja az SSD-ket és a minimális memóriát a memóriabeli indexeknél lényegesen több adat kezeléséhez, miközben magas lekérdezéseket (QPS) és alacsony késést tart fenn, biztosítva a memória, a PROCESSZOR- és az I/O-használat és a keresési teljesítmény közötti egyensúlyt.
A legközelebbi szomszéd algoritmuskeresés először vektorindexet hozhat létre a CREATE VECTOR INDEX T-SQL paranccsal, majd VECTOR_SEARCH T-SQL-függvény használatával futtathatja a hozzávetőleges keresést.
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
Kapcsolódó tartalom
- Vektor adattípus
- vektorfüggvények
- VECTOR_DISTANCE (Transact-SQL)
- VECTOR_SEARCH (Transact-SQL)
- VEKTORINDEX LÉTREHOZÁSA (Transact-SQL)
- Azure SQL Database–vektorkeresési minták
- Intelligens alkalmazások az Azure SQL Database segítségével