Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
Aparat bazy danych SQL zapewnia możliwość przechowywania dowolnego rodzaju danych i uruchamiania dowolnego rodzaju zapytania: ustrukturyzowanego i nieustrukturyzowanego oraz wykonywania wyszukiwania wektorowego na tych danych. Jest to dobry wybór w scenariuszach, w których trzeba przeszukiwać wszystkie te dane razem i nie chcesz używać oddzielnej usługi do wyszukiwania, które komplikują architekturę.
Uwaga / Notatka
- Funkcje wektorowe są dostępne w usłudze Azure SQL Managed Instance skonfigurowanym przy użyciu zasad aktualizacjiprogramu SQL Server 2025 lub Always-up-to-date.
Vectors
Wektory są uporządkowanymi tablicami liczb (zazwyczaj zmiennoprzecinkowymi), które mogą reprezentować informacje o niektórych danych. Na przykład obraz może być reprezentowany jako wektor wartości pikseli lub ciąg tekstu może być reprezentowany jako wektor wartości ASCII. Proces przekształcania danych w wektor jest nazywany wektoryzacją. Typ danych wektorów w programie SQL Server jest przeznaczony do wydajnego przechowywania tych tablic liczb.
Osadzanie
Osadzanie to wektory reprezentujące ważne funkcje danych. Osadzanie jest często używane przy użyciu modelu uczenia głębokiego, a modele uczenia maszynowego i sztucznej inteligencji wykorzystują je jako funkcje. Osadzenia mogą również uchwycić semantyczne podobieństwo między podobnymi pojęciami. Na przykład podczas generowania osadzania dla wyrazów person i human, spodziewalibyśmy się, że ich osadzanie (reprezentacja wektorowa) będzie podobne w wartości, ponieważ wyrazy są również semantycznie podobne.
Modele oferowane przez usługę Azure OpenAI do tworzenia embeddingów na podstawie danych tekstowych. Usługa dzieli tekst na tokeny i generuje embeddingi przy użyciu modeli przetrenowanych przez OpenAI. Aby dowiedzieć się więcej, zobacz Tworzenie osadzania za pomocą usługi Azure OpenAI.
Po wygenerowaniu osadzania można je przechowywać w bazie danych programu SQL Server. Dzięki temu można przechowywać osadzanie wraz z reprezentowanymi danymi oraz wykonywać zapytania wyszukiwania wektorowego w celu znalezienia podobnych punktów danych.
Wyszukiwanie wektorowe
Wyszukiwanie wektorowe odnosi się do procesu znajdowania wszystkich wektorów w zestawie danych, które są podobne do określonego wektora zapytania. W związku z tym wektor zapytania dla wyrazu human przeszukuje cały zestaw danych w poszukiwaniu podobnych wektorów, w ten sposób podobnych słów: w tym przykładzie powinno znaleźć wyraz person jako bliskie dopasowanie. Bliskość lub odległość jest mierzona przy użyciu metryki odległości, takiej jak odległość cosinusowa. Im bliżej znajdują się wektory, tym bardziej podobne są.
Program SQL Server zapewnia wbudowaną obsługę wektorów za pośrednictwem typu danych wektorów . Wektory są przechowywane w zoptymalizowanym formacie binarnym, ale udostępniane jako tablice JSON dla wygody. Każdy element wektora jest przechowywany przy użyciu wartości zmiennoprzecinkowej o pojedynczej precyzji (4 bajty). Wraz z typem danych istnieją dedykowane funkcje do działania na wektorach. Na przykład można znaleźć odległość między dwoma wektorami przy użyciu funkcji VECTOR_DISTANCE . Funkcja zwraca wartość skalarną z odległością między dwoma wektorami na podstawie określonej metryki odległości.
Ponieważ wektory są zwykle zarządzane jako tablice liczb zmiennoprzecinkowych, tworzenie wektora można wykonać po prostu poprzez rzutowanie tablicy JSON na typ danych wektora. Na przykład poniższy kod tworzy wektor z tablicy JSON:
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;
Albo użyj niejawnej konwersji
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;
To samo dotyczy konwertowania wektora na tablicę JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Dokładna odległość wyszukiwania i wektora (dokładne najbliższe sąsiady)
Dokładne wyszukiwanie, nazywane również wyszukiwaniem k najbliższych sąsiadów (k-NN), polega na obliczaniu odległości między danym wektorem a wszystkimi innymi wektorami w zestawie danych, sortowaniu wyników i wybieraniu najbliższych sąsiadów na podstawie określonej metryki odległości. Ta metoda gwarantuje dokładne znajdowanie najbliższych sąsiadów, ale może być intensywna obliczeniowo, szczególnie w przypadku dużych zbiorów danych.
Funkcje odległości wektorów służą do mierzenia zbliżenia między wektorami. Typowe metryki odległości obejmują odległość euklidesową, podobieństwo cosinusu i produkt kropkowy. Te funkcje są niezbędne do przeprowadzania wyszukiwania k-NN i zapewnienia dokładnych wyników.
Dokładne wyszukiwanie wektorowe najbliższego sąsiada (ENN) wykonuje wyczerpujące obliczenia odległości dla wszystkich indeksowanych wektorów, aby zapewnić odnalezienie najbliższych sąsiadów według określonej metryki odległości. Ta metoda jest precyzyjna, ale intensywnie obciąża zasoby, dzięki czemu nadaje się do mniejszych zestawów danych lub scenariuszy, w których dokładność jest najważniejsza.
W silniku bazy danych SQL wyszukiwanie k-NN można wykonać przy użyciu funkcji VECTOR_DISTANCE, która umożliwia efektywne obliczanie odległości między wektorami i ułatwia pobieranie najbliższych sąsiadów.
W poniższym przykładzie pokazano, jak wykonać k-NN, aby zwrócić 10 najbardziej podobnych wektorów przechowywanych w content_vector tabeli do danego wektora @qvzapytania .
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
Korzystanie z dokładnego wyszukiwania jest zalecane, gdy nie ma wielu wektorów do wyszukiwania (mniej niż 50 000 wektorów jako rekomendacji ogólnej). Tabela może zawierać o wiele więcej wektorów, o ile predykaty wyszukiwania zmniejszają liczbę wektorów używanych do wyszukiwania sąsiadów do 50 000 lub mniej.
Przybliżony indeks wektorowy i wyszukiwanie wektorowe (przybliżeni najbliżsi sąsiedzi)
Uwaga / Notatka
Przybliżony indeks wektorowy i wyszukiwanie wektorowe są dostępne w podglądzie i obecnie dostępne tylko w SQL Server 2025 (17.x), Azure SQL Database oraz bazie SQL w Microsoft Fabric.
Zidentyfikowanie wszystkich wektorów zbliżonych do danego wektora zapytania wymaga znacznych zasobów w celu obliczenia odległości między wektorem zapytania a wektorami przechowywanymi w tabeli. Wyszukiwanie wszystkich wektorów znajdujących się w pobliżu danego wektora zapytania obejmuje pełne skanowanie tabeli i znaczne użycie procesora CPU. Jest to nazywane zapytaniem "K najbliższych sąsiadów" lub "k-NN" i zwraca najbliższe wektory "k".
Wektory służą do znajdowania podobnych danych dla modeli sztucznej inteligencji w celu odpowiadania na zapytania użytkowników. Obejmuje to wykonywanie zapytań względem bazy danych dla wektorów "k" najbliższych wektorowi zapytania przy użyciu metryk odległości, takich jak produkt kropki (wewnętrzny), podobieństwo cosinusu lub odległość euklidesowa.
Zapytania K-NN często zmagają się ze skalowalnością, co w wielu przypadkach czyni akceptowalnym wymianę pewnej dokładności, szczególnie odtworzenia, w zamian za znaczne przyspieszenie. Metoda ta jest znana jako przybliżeni najbliżsi sąsiedzi (ANN).
Przywołanie jest ważną koncepcją, która powinna być znana wszystkim osobom korzystającym z wektorów i osadzeń lub planującym ich używanie. W rzeczywistości przypominanie mierzy proporcję przybliżonych najbliższych sąsiadów zidentyfikowanych przez algorytm w porównaniu do dokładnych najbliższych sąsiadów, które zwróciłoby wyczerpujące wyszukiwanie. W związku z tym dobrym pomiarem jakości przybliżenia jest to, że algorytm wykonuje. Idealne przypomnienie, które jest równoważne z brakiem przybliżenia, to 1.
W przypadku aplikacji sztucznej inteligencji kompromis jest dość rozsądny. Ponieważ osadzanie wektorów już przybliża koncepcje, użycie ANN nie wpływa znacząco na wyniki, pod warunkiem, że przeszukiwanie jest zbliżone do 1. Gwarantuje to, że zwrócone wyniki są bardzo podobne do tych z k-NN, oferując znacznie lepszą wydajność i znacznie zmniejszone użycie zasobów, co jest bardzo korzystne dla operacyjnych baz danych.
Ważne jest, aby zrozumieć, że termin "indeks" używany podczas odwoływania się do indeksu wektorowego ma inne znaczenie niż indeks używany do pracy z relacyjnymi bazami danych. W rzeczywistości indeks wektorowy zwraca przybliżone wyniki.
Indeksy wektorowe silnika bazy danych SQL są bazujące na algorytmie DiskANN. DiskANN polega na utworzeniu grafu, aby szybko przechodzić przez wszystkie indeksowane wektory w celu znalezienia najbliższego dopasowania do danego wektora. DiskANN to system oparty na grafach do indeksowania i wyszukiwania dużych zestawów danych wektorowych przy użyciu ograniczonych zasobów obliczeniowych. Wydajnie używa dysków SSD i minimalnej pamięci do obsługi znacznie większej ilości danych niż indeksy w pamięci, przy zachowaniu wysokich zapytań na sekundę (QPS) i małych opóźnieniach, zapewniając równowagę między użyciem pamięci, procesorem i operacjami we/wy i wydajnością wyszukiwania.
Najpierw można przeprowadzić przybliżone wyszukiwanie najbliższych sąsiadów, tworząc indeks wektorowy za pomocą polecenia T-SQL CREATE VECTOR INDEX, a następnie korzystając z funkcji T-SQL VECTOR_SEARCH do wykonania przybliżonego wyszukiwania.
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