Реалізація векторних типів даних та векторного пошуку

Завершено

SQL Server 2025 включає вбудовану підтримку векторних типів даних і векторного пошуку. Ця функція дозволяє зберігати високорозмірні векторні вкладення поряд із вашими реляційними даними та виконувати пошук подібності, що дає змогу створювати програми, які розуміють семантичні зв'язки у ваших даних.

Векторний пошук усуває обмеження в традиційних запитах до баз даних. Традиційні бази даних досягають успіху в точних збігах і структурованих запитах, але їм важко зрозуміти контекст і значення. Векторний пошук змінює це, забезпечуючи семантичне розуміння – можливість знаходити концептуально схожі елементи, навіть якщо вони не мають точних ключових слів. Наприклад, за запитом "зручні кросівки" можна знайти товари, описані як "м'яке спортивне взуття", оскільки їхні векторні вкладення відображають схоже семантичне значення.

Для розробників це означає, що ви можете створювати інтелектуальні програми без управління окремими векторними базами даних або складними процесами синхронізації даних. Зберігаючи вектори поряд з реляційними даними в SQL Server, ви підтримуєте відповідність ACID, використовуєте існуючі політики безпеки, використовуєте знайомий синтаксис T-SQL і спрощуєте свою архітектуру. Ця інтеграція застосовується до таких сценаріїв, як:

  • Семантичний пошук та рекомендації: Знаходьте релевантні продукти, документи або контент на основі значення, а не лише ключових слів
  • Системи відповідей на запитання: Потужні чат-боти та віртуальні помічники, які розуміють запити природною мовою через ваші корпоративні дані
  • Виявлення аномалій: Виявляйте незвичайні закономірності, знаходячи точки даних, семантично віддалені від нормальної поведінки
  • Дедуплікація контенту: Виявляйте схожі або повторювані елементи, навіть якщо вони сформульовані по-різному
  • Двигуни персоналізації: Зіставлення вподобань користувачів із продуктами або контентом на основі детальної схожості

Дослідження векторного типу даних

Векторний тип даних у SQL Server 2025 призначений для ефективного зберігання масивів чисел з плаваючою комою. Вектори зазвичай використовуються для представлення вкладень, створених моделями штучного інтелекту, де кожен вимір фіксує конкретні особливості або семантичні характеристики даних.

Вивчіть ключові характеристики

  • Оптимізований формат зберігання: Вектори зберігаються в оптимізованому двійковому форматі всередині, але виставлені у вигляді масивів JSON для зручності використання та сумісності.
  • Гнучка точність: Кожен елемент у векторі може бути збережений за допомогою значень з плаваючою комою одинарної точності (4 байти) або половинної точності (2 байти), що дозволяє збалансувати точність і ефективність зберігання.
  • Підтримка розмірів: SQL Server 2025 підтримує вектори з розмірами до 1998 для одинарної точності та 3 996 розмірами для половинної точності, вміщуючи широкий спектр моделей вбудовування.

Створення та зберігання векторів

Ви можете створювати вектори, приводячи масиви JSON до vector типу даних. Ось приклад:

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

Цей код демонструє два способи створення 3-вимірного вектора: шляхом прямого приведення рядкового літерала JSON або за допомогою JSON_ARRAY функції. Обидва методи дають однаковий результат, зберігаючи значення [1.0, -0.2, 30] у векторному типі даних.

Щоб зберегти вектори в таблиці:

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

Цей код створює таблицю для зберігання інформації про продукт разом із 1536-вимірним векторним вкладенням. Розмір розміру 1536 зазвичай використовується в моделях вбудовування тексту OpenAI, що робить цю таблицю готовою для зберігання вбудовань, створених на основі описів продуктів.

Конвертація векторів у JSON

Ви можете легко конвертувати вектори назад у масиви JSON для відображення або обробки:

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;

Цей код перетворює вектор назад у читабельні формати. Оператор to CASTNVARCHAR(MAX) повертає вектор у вигляді рядка, тоді як CAST to JSON повертає його у вигляді масиву JSON, що корисно для взаємодії з програмами та API.

Виконати пошук точного найближчого сусіда (k-NN)

Пошук за принципом точного найближчого сусіда (k-NN) передбачає обчислення відстані між вектором запиту та всіма векторами у вашому наборі даних, а потім повернення k найближчих збігів. Цей метод гарантує точні результати, але може бути інтенсивним з обчислювальної точки зору для великих наборів даних.

Скористайтесь VECTOR_DISTANCE функцією

Функція VECTOR_DISTANCE вимірює подібність між двома векторами за допомогою заданої метрики відстані:

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;

Цей запит генерує вкладення для тексту "Музичний стиль Pink Floyd" за допомогою моделі Ada2Embeddings, потім знаходить 10 товарів з вбудовами, найбільш схожими на запит. Функція VECTOR_DISTANCE обчислює косинусну відстань між вектором запиту та вкладенням кожного товару, причому менші відстані вказують на більшу схожість.

Виберіть показники відстані

SQL Server 2025 підтримує кілька метрик відстані:

  • подібність косинуса: Вимірює кут між векторами, ідеально підходить для вбудовування тексту
  • Евклідова відстань: Вимірює прямолінійну відстань у векторному просторі
  • Точковий добуток: Корисно для нормалізованих векторів

Точний пошук рекомендується, коли:

  • У вас менше 50 000 векторів для пошуку
  • Предикати ваших запитів фільтрують набір даних до керованого розміру
  • Вам потрібне ідеальне запам'ятовування (точність 100%)
  • Додаткові обчислювальні витрати є прийнятними

Реалізація приблизного пошуку найближчого сусідства (ШНМ)

Для великих наборів даних пошук за приблизним найближчим сусідом (ШНМ) забезпечує баланс між швидкістю та точністю. SQL Server 2025 реалізує ШНМ за допомогою алгоритму DiskANN, який створює індекс на основі графіка для ефективної векторної навігації.

Розуміти запам'ятовування

Recall вимірює частку справжніх найближчих сусідів, яку визначає алгоритм ANN, порівняно з точним пошуком. Відкликання 1.0 (100%) означає, що приблизний пошук дає ті ж результати, що й точний пошук. На практиці значення відкликання вище 0,95 часто забезпечують відмінні результати для додатків штучного інтелекту, пропонуючи при цьому значне підвищення продуктивності.

Створення векторних індексів

Щоб увімкнути пошук ШНМ, створіть векторний індекс у векторному стовпці:

CREATE VECTOR INDEX idx_product_embedding 
ON products(embedding);

Цей код створює векторний індекс на стовпці вбудовування за допомогою алгоритму DiskANN. Індекс покращує продуктивність пошуку наближених найближчих сусідів на великих наборах даних за рахунок створення структури графіка для ефективної векторної навігації.

Векторні індекси в SQL Server 2025:

  • Використовуйте алгоритм DiskANN для ефективного пошуку на основі графіка
  • Підтримка обмеженої пам'яті та ресурсів процесора
  • Баланс дискового вводу/виводу, використання пам'яті та продуктивності запитів
  • Автоматичне оновлення в разі зміни даних

Скористайтесь VECTOR_SEARCH функцією

Функція VECTOR_SEARCH виконує наближений пошук найближчого сусідства:

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;

Цей запит виконує наближений пошук найближчого сусіда за допомогою векторного індексу, створеного раніше. Функція VECTOR_SEARCH використовує алгоритм DiskANN для пошуку 10 найбільш схожих продуктів без сканування всіх векторів, забезпечуючи підвищення продуктивності для великих наборів даних при збереженні високої точності.

Враховуйте переваги продуктивності

Пошук ANN пропонує:

  • Швидше виконання запитів: Особливо для наборів даних з мільйонами векторів
  • Зниження споживання ресурсів: Зменшення використання процесора та пам'яті порівняно з точним пошуком
  • Масштабованість: Ефективна обробка великомасштабних векторних наборів даних
  • Висока пам'ять: Як правило, досягає показника запам'ятовування вище 95%, забезпечуючи якісні результати

Створюйте гібридні сценарії пошуку

SQL Server 2025 підтримує поєднання векторного пошуку з традиційними операціями SQL для сценаріїв гібридного пошуку.

Ви можете виконувати семантичний пошук за допомогою векторів, а також застосовувати традиційні фільтри:

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;

Цей гібридний пошук поєднує в собі пошук семантичної схожості з традиційною фільтрацією SQL. Спочатку він знаходить 20 найбільш семантично схожих продуктів на «зручні кросівки», а потім фільтрує ці результати, щоб включити лише товари взуття за ціною від 50 до 150 доларів США. Цей підхід дозволяє точно таргетувати, використовуючи семантичне розуміння.

Поєднуйте повнотекстовий пошук із векторним пошуком для отримання вичерпних результатів:

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

Цей запит поєднує векторний пошук з повнотекстовим пошуком. Він знаходить товари, семантично схожі на «екологічні матеріали», використовуючи векторні вбудовування, а потім приєднується до повнотекстових результатів пошуку за ключовими словами «стійкий» або «екологічно чистий» в описі. Підсумкове рейтинг поєднує обидві оцінки за допомогою зваженої формули (60% семантична схожість, 40% відповідність ключових слів).

Застосовуйте найкращі практики

При впровадженні векторного пошуку в SQL Server 2025:

  • Виберіть правильну точність: Використовуйте половинну точність для великих розмірів, коли зберігання є проблемою
  • Індекс стратегічно: Створення векторних індексів у стовпцях, які часто шукають
  • Відкликання монітора: Перевірте свої запити ANN, щоб переконатися в прийнятних показниках відкликання для вашого випадку використання
  • Оптимізуйте запити: Використовуйте відповідні фільтри, щоб зменшити простір пошуку перед векторними операціями
  • Пакетні операції: Створюйте та вставляйте вбудовування пакетами для кращої продуктивності

Використовуючи ці векторні можливості, ви можете створювати програми на основі штучного інтелекту, які розуміють семантичні зв'язки, надають інтелектуальні рекомендації та забезпечують пошук природною мовою – і все це на надійній платформі SQL Server.