Поделиться через


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Применимо к: Предварительная версия SQL Server 2025 (17.x)

AI_GENERATE_EMBEDDINGS — это встроенная функция, которая создает внедренные (векторные массивы) с помощью предварительно созданного определения модели искусственного интеллекта, хранящегося в базе данных.

Синтаксис

Соглашения о синтаксисе Transact-SQL

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Аргументы

источник

Выражение любого типа символа (например, nvarchar, varchar, nchar или char).

model_identifier

Имя ВНЕШНЕЙ МОДЕЛИ , определенное как EMBEDDING тип, используемый для создания массива векторов внедрения.

Дополнительные сведения см. в статье CREATE EXTERNAL MODEL.

optional_json_request_body_parameters

Допустимый список форматированных json дополнительных параметров. Эти параметры добавляются в текст сообщения запроса REST перед отправкой в расположение конечной EXTERNAL MODELточки. Эти параметры не зависят от того, что EXTERNAL MODELподдерживает и принимает конечная точка.

Типы возвращаемых данных

AI_GENERATE_EMBEDDINGS возвращает таблицу с одним столбцом, строки которой представляют собой созданные внедренные массивы векторов, возвращаемые в формате JSON.

Формат возврата

Формат возвращаемого JSON выглядит следующим образом:

[
    0.0023929428,
    0.00034713413,
    -0.0023142276,
    -0.025654867,
    -0.011492423,
    0.0010358924,
    -0.014836246,
    0.0035484824,
    0.000045630233,
    -0.027581815,
    0.023816079,
    0.005012586,
    -0.027732948,
    -0.010088143,
    ...
    -0.014571763
]

Замечания

Предпосылки

Для использования AI_GENERATE_EMBEDDINGSнеобходимо выполнить два предварительных требования:

  • sp_invoke_external_endpoint необходимо включить в базе данных с помощью sp_configure.

  • ВНЕШНЮЮ МОДЕЛЬEMBEDDINGS типа, доступную с помощью правильных грантов, ролей и /или разрешений.

Необязательные параметры

optional_json_request_body_parameters AI_GENERATE_EMBEDDINGS Параметр используется, когда параметр конечной точки необходимо добавить в текст сообщения запроса внедрения. Добавление необязательного параметра переопределяет значение во время выполнения, если этот параметр определен в определении модели.

Например, если EXTERNAL MODEL содержит параметр для dimensions набора 1536, передав этот параметр во optional_json_request_body_parameters время выполнения с новым значением, как показано здесь: json_object('dimensions':755)dimensions параметр модели переопределяется.

Передаваемое optional_json_request_body_parameters значение должно быть допустимым JSON.

Создание конечных точек внедрения

Дополнительные сведения о создании конечных точек внедрения см. в процессе для Azure OpenAI, OpenAI или Ollama.

Расширенные события (XEvent)

AI_GENERATE_EMBEDDINGS имеет расширенное событие (ai_generate_embeddings_summary), которое можно включить для устранения неполадок. Он содержит сведения о запросе REST и ответе, например коде состояния, возникших ошибках, используемом имени модели и счетчиках маркеров, используемых конечной точкой внедрения. Расширенное событие external_rest_endpoint_summary содержит дополнительные сведения, которые можно использовать для устранения неполадок и отладки запросов REST.

Примеры

А. Создание внедрения с помощью инструкции SELECT

В следующем примере показано, как использовать функцию AI_GENERATE_EMBEDDINGS с инструкцией select, которая возвращает результаты векторного массива.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel)
FROM myTable;

В. Создание внедрения с помощью инструкции SELECT с помощью AI_GENERATE_CHUNKS

В следующем примере показано, как использовать AI_GENERATE_EMBEDDINGS функцию с AI_GENERATE_CHUNKS функцией для передачи текста в указанных размерах блока с инструкцией select, которая возвращает результаты массива векторов.

SELECT
    id,
    title,
    large_text,
    AI_GENERATE_EMBEDDINGS(c.chunk_text USE MODEL MyAzureOpenAiModel)
FROM
    myTable
CROSS APPLY
    AI_GENERATE_CHUNKS(source = large_text, chunk_type = N'FIXED' , chunk_size = 10) c;

С. Создание внедрения с помощью обновления таблицы

В следующем примере показано, как использовать AI_GENERATE_EMBEDDINGS функцию с оператором обновления таблицы для возврата результатов векторного массива в столбец типа векторных данных.

UPDATE t
    SET myEmbeddings = AI_GENERATE_EMBEDDINGS(t.text USE MODEL MyAzureOpenAiModel)
FROM myTable AS t;

Д. Создание внедрения с помощью инструкции SELECT и PARAMETERS

В следующем примере показано, как использовать AI_GENERATE_EMBEDDINGS функцию с инструкцией select и передавать необязательные параметры в конечную точку, которая возвращает результаты векторного массива.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS '{"dimensions" : 768 }')
FROM myTable;

Е. Полный пример создания блоков, AI_GENERATE_EMBEDDINGS и создания модели

Этот пример представляет собой полный поток создания МОДЕЛИ CREATE EXTERNAL, использования и использования AI_GENERATE_EMBEDDINGSAI_GENERATE_CHUNKS для вставки результатов в таблицу с типом векторных данных. Не забудьте заменить <password> допустимым паролем.

-- Turn external REST endpoint invocation ON in the database
EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO

-- Create a master key for the database
IF NOT EXISTS (SELECT *
               FROM sys.symmetric_keys
               WHERE [name] = '##MS_DatabaseMasterKey##')
    BEGIN
        CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<password>';
    END
GO

-- Create access credentials to Azure OpenAI using a key:
CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.openai.azure.com/]
    WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"api-key":"YOUR_AZURE_OPENAI_KEY"}';
GO

-- Create an external model to call the Azure OpenAI embeddings REST endpoint
CREATE EXTERNAL MODEL MyAzureOpenAiModel
WITH (
      LOCATION = 'https://my-azure-openai-endpoint.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2023-05-15',
      API_FORMAT = 'Azure OpenAI',
      MODEL_TYPE = EMBEDDINGS,
      MODEL = 'text-embedding-ada-002',
      CREDENTIAL = [https://my-azure-openai-endpoint.openai.azure.com/]
);

-- Create a table with text to chunk and insert data
CREATE TABLE textchunk
(
    text_id INT IDENTITY (1, 1) PRIMARY KEY,
    text_to_chunk NVARCHAR (MAX)
);
GO

INSERT INTO textchunk (text_to_chunk)
VALUES
('All day long we seemed to dawdle through a country which was full of beauty of every kind. Sometimes we saw little towns or castles on the top of steep hills such as we see in old missals; sometimes we ran by rivers and streams which seemed from the wide stony margin on each side of them to be subject to great floods.'),
('My Friend, Welcome to the Carpathians. I am anxiously expecting you. Sleep well to-night. At three to-morrow the diligence will start for Bukovina; a place on it is kept for you. At the Borgo Pass my carriage will await you and will bring you to me. I trust that your journey from London has been a happy one, and that you will enjoy your stay in my beautiful land. Your friend, DRACULA')
GO

-- Create a new table to hold the chunked text and vector embeddings
CREATE TABLE text_embeddings
(
    embeddings_id INT IDENTITY (1, 1) PRIMARY KEY,
    chunked_text NVARCHAR (MAX),
    vector_embeddings VECTOR (1536)
);

-- Insert the chunked text and vector embeddings into the text_embeddings table using AI_GENERATE_CHUNKS and AI_GENERATE_EMBEDDINGS
INSERT INTO text_embeddings (chunked_text, vector_embeddings)
SELECT c.chunk, AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyAzureOpenAiModel)
FROM textchunk t
CROSS APPLY
    AI_GENERATE_CHUNKS(source = t.text_to_chunk, chunk_type = N'FIXED', chunk_size = 100) c;

-- View the results
SELECT * FROM text_embeddings;