AI_GENERATE_EMBEDDINGS (Transact-SQL)

Gäller för: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL Database i Microsoft Fabric

Funktionen AI_GENERATE_EMBEDDINGS skapar inbäddningar (vektorarrayer) genom att använda en förskapad AI-modelldefinition lagrad 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 vilken karaktärstyp som helst, såsom nvarchar, varchar, nchar eller char.

model_identifier

Namnet på en extern modell definierad som en EMBEDDINGS typ som används för att skapa inbäddningsvektormatrisen.

Mer information finns i SKAPA EXTERN MODELL.

optional_json_request_body_parameters

En giltig JSON-formaterad lista med ytterligare parametrar. Funktionen lägger till dessa parametrar i REST-förfrågningsmeddelandets kropp innan den skickas till den externa modellens slutpunktsplats. Dessa parametrar beror på vad den externa modellens slutpunkt 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

AI_GENERATE_EMBEDDINGSär tillgängligt i Azure SQL Managed Instance med uppdateringsprincipenAlways-up-to-date.

Förutsättningar

För att använda AI_GENERATE_EMBEDDINGSdetta, se till att du uppfyller följande förutsättningar:

  • Aktivera sp_invoke_external_endpoint i databasen med följande kommando:

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    

    Anmärkning

    På Azure SQL Database och SQL Database i Fabric external rest endpoint enabled är systemkonfigurationsalternativet aktiverat som standard.

För mer information om hur man skapar embeddingsendpoints, se processen för Azure OpenAI i Azure AI Foundry Models, OpenAI eller Ollama.

  • Skapa en extern modell av den EMBEDDINGS typen, tillgänglig via rätt bidrag, roller och behörigheter.

Valfria parametrar

Använd parametern optional_json_request_body_parameters i AI_GENERATE_EMBEDDINGS när du behöver lägga till en endpoint-parameter i själva meddelandet om inbäddning. Att lägga till en valfri parameter åsidosätter värdet vid körning om modelldefinitionen inkluderar den parametern.

Till exempel, om den externa modellen innehåller parametern för dimensions satt till 1 536, kan du skicka in den parametern optional_json_request_body_parameters vid körning med ett nytt värde.

I följande exempel dimensions åsidosätts parametern för modellen:

json_object("dimensions":755)

Värdet du går in i optional_json_request_body_parameters måste vara giltigt JSON.

Utökade händelser (XEvent)

AI_GENERATE_EMBEDDINGS har en utökad händelse (ai_generate_embeddings_summary) som du kan aktivera för felsökning. Den innehåller information om REST-förfrågan och svaret, såsom statuskod, eventuella fel den stött på och modellnamnet som används. Den utökade händelsen external_rest_endpoint_summary innehåller ytterligare information som kan hjälpa till med felsökning och felsökning av REST-förfrågningar.

Exempel

A. Skapa inbäddningar med en SELECT-instruktion

Följande exempel visar hur man använder AI_GENERATE_EMBEDDINGS funktionen med en select-sats som returnerar resultat i en JSON-array.

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

Följande exempel visar hur man använder AI_GENERATE_EMBEDDINGS funktionen med AI_GENERATE_CHUNKS-funktionen för att skicka text uppdelad i specificerade chunk-storlekar med en select-sats som returnerar vektorarrayresultat.

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
) AS 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.

DECLARE @params JSON = N'{"dimensions":768}'
SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS @params)
FROM myTable;

E. Generering av omförsöksbäddningar med retry_count PARAMETERS-alternativet

Om inbäddningsanropet stöter på HTTP-statuskoder som anger tillfälliga problem kan du konfigurera begäran så att den försöker igen automatiskt.

För att ange antalet omförsök, lägg till följande JSON i alternativet PARAMETERS . Detta värde bör vara ett positivt heltal mellan noll (0) och tio (10) inklusive, och kan inte vara NULL.

Anmärkning

Om ett retry_count värde anges i frågan AI_GENERATE_EMBEDDINGS , överskrider retry_count det (om definierat) i den externa modellens konfiguration.

DECLARE @params JSON = N'{"sql_rest_options":{"retry_count":10}} '
SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS @params)
FROM myTable;

F. Ett fullständigt exempel med modellskapande, chunking och inbäddningsgenerering

Följande exempel visar en helhetsprocess för att göra din data AI-redo med hjälp av Azure OpenAI API-nyckel:

  1. Använd CREATE EXTERNAL MODEL för att registrera din inbäddningsmodell och göra den tillgänglig.

  2. Dela upp datamängden i mindre delar med AI_GENERATE_CHUNKS, så att datan passar inom modellens kontextfönster och förbättrar återhämtningsnoggrannheten.

  3. Generera inbäddningar genom att använda AI_GENERATE_EMBEDDINGS.

  4. Infoga resultaten i en tabell med en vektordatatyp.

Anmärkning

Ersätt <password> med ett giltigt lösenord.

Aktivera den externa REST-endpoint-anropningen på databasservern:

EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO

Skapa en databashuvudnyckel:

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

Skapa åtkomstuppgifter till Azure OpenAI genom att använda en nyckel:

CREATE DATABASE SCOPED CREDENTIAL [https://my-azure-openai-endpoint.cognitiveservices.azure.com/]
    WITH IDENTITY = 'HTTPEndpointHeaders', secret = '{"api-key":"YOUR_AZURE_OPENAI_KEY"}';
GO

Skapa en extern modell för att anropa Azure OpenAI-embeddings REST-endpoint:

CREATE EXTERNAL MODEL MyAzureOpenAIModel
WITH (
      LOCATION = 'https://my-azure-openai-endpoint.cognitiveservices.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.cognitiveservices.azure.com/]
);

Skapa en tabell med text att dela och infoga 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 land 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

Skapa en ny tabell för att hålla de chunkade text- och vektorinbäddningarna:

CREATE TABLE text_embeddings
(
    embeddings_id INT IDENTITY (1, 1) PRIMARY KEY,
    chunked_text NVARCHAR (MAX),
    vector_embeddings VECTOR(1536)
);

Infoga de chunkade text- och vektorinbäddningarna i text_embeddings tabellen genom att använda AI_GENERATE_CHUNKS och AI_GENERATE_EMBEDDINGS:

INSERT INTO text_embeddings (chunked_text, vector_embeddings)
SELECT c.chunk,
       AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyAzureOpenAIModel)
FROM textchunk AS t
CROSS APPLY AI_GENERATE_CHUNKS (
    SOURCE = t.text_to_chunk,
    CHUNK_TYPE = FIXED,
    CHUNK_SIZE = 100
) AS c;

Visa resultatet

SELECT *
FROM text_embeddings;