Dela via


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Gäller för: Förhandsversion av SQL Server 2025 (17.x)

AI_GENERATE_EMBEDDINGS är en inbyggd funktion som skapar inbäddningar (vektormatriser) med hjälp av en fördefinierad AI-modelldefinition som lagras i databasen.

Syntax

Transact-SQL syntaxkonventioner

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Argumentpunkter

källa

Ett uttryck av valfri teckentyp (till exempel nvarchar, varchar, nchar eller char).

model_identifier

Namnet på en EXTERN MODELL definierad som en EMBEDDING typ som används för att skapa vektormatrisen embeddings.

Mer information finns i SKAPA EXTERN MODELL.

optional_json_request_body_parameters

En giltig JSON-formaterad lista med ytterligare parametrar. Dessa parametrar läggs till i MEDDELANDEtexten för REST-begäran innan de EXTERNAL MODELskickas till slutpunktens plats. Dessa parametrar är beroende av vad EXTERNAL MODELslutpunkten stöder och accepterar.

Returtyper

AI_GENERATE_EMBEDDINGS returnerar en tabell med en kolumn vars rader är de genererade inbäddningsvektormatriserna som returneras som JSON.

Returformat

Formatet för den returnerade JSON:en är följande:

[
    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
]

Anmärkningar

Förutsättningar

Det finns två krav som du måste uppfylla för att använda AI_GENERATE_EMBEDDINGS:

  • sp_invoke_external_endpoint måste aktiveras i databasen med hjälp av sp_configure.

  • en EXTERN MODELL av typen EMBEDDINGS , tillgänglig via rätt bidrag, roller och/eller behörigheter.

Valfria parametrar

Parametern optional_json_request_body_parameters i AI_GENERATE_EMBEDDINGS används när en slutpunktsparameter måste läggas till i brödtexten i meddelandet för inbäddningsbegäran. Om du lägger till en valfri parameter åsidosätts värdet vid körning om parametern definieras i modelldefinitionen.

Om till exempel DEN EXTERNA MODELLEN innehåller parametern för dimensions inställd på 1536 åsidosätts parametern i optional_json_request_body_parameters vid körning med ett nytt värde enligt följande: json_object('dimensions':755), dimensions åsidosätts parametern på modellen.

Värdet som skickas till optional_json_request_body_parameters måste vara giltigt JSON.

Skapa inbäddningsslutpunkter

Mer information om hur du skapar inbäddningsslutpunkter finns i processen för Azure OpenAI, OpenAI eller Ollama.

Utökade händelser (XEvent)

AI_GENERATE_EMBEDDINGS har en utökad händelse (ai_generate_embeddings_summary) som kan aktiveras för felsökning. Den innehåller information om REST-begäran och -svaret, till exempel statuskod, eventuella fel som påträffades, modellnamnet som används och antalet token som används av inbäddningsslutpunkten. Den utökade händelsen external_rest_endpoint_summary innehåller ytterligare information som kan vara till för felsökning och felsökning av REST-begäranden.

Exempel

A. Skapa inbäddningar med en SELECT-instruktion

I följande exempel visas hur du använder AI_GENERATE_EMBEDDINGS funktionen med en select-instruktion som returnerar vektormatrisresultat.

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

B. Skapa inbäddningar med en SELECT-instruktion med hjälp av AI_GENERATE_CHUNKS

I följande exempel visas hur du använder AI_GENERATE_EMBEDDINGS funktionen med AI_GENERATE_CHUNKS funktionen för att skicka text uppdelad i angivna segmentstorlekar med en select-instruktion som returnerar vektormatrisresultat.

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 = FIXED , chunk_size = 10) c;

C. Skapa inbäddningar med en tabelluppdatering

I följande exempel visas hur du använder AI_GENERATE_EMBEDDINGS funktionen med en tabelluppdateringsinstruktur för att returnera vektormatrisresultatet till en kolumn för vektordatatyp.

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

D. Skapa inbäddningar med en SELECT-instruktion och PARAMETRAR

I följande exempel visas hur du använder AI_GENERATE_EMBEDDINGS funktionen med en select-instruktion och skickar valfria parametrar till slutpunkten, som returnerar vektormatrisresultat.

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

E. Ett fullständigt exempel med segmentering, AI_GENERATE_EMBEDDINGS och modellskapande

Det här exemplet är ett fullständigt flöde från att skapa DEN EXTERNA MODELLEN SKAPA med hjälp av AI_GENERATE_EMBEDDINGSoch använda AI_GENERATE_CHUNKS för att infoga resultatet i en tabell med en vektordatatyp . Kom ihåg att ersätta <password> med ett giltigt lösenord.

-- 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 = FIXED, chunk_size = 100) c;

-- View the results
SELECT * FROM text_embeddings;