AI_GENERATE_EMBEDDINGS (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Azure SQL-Datenbank Azure SQL Managed InstanceSQL-Datenbank in Microsoft Fabric

Die AI_GENERATE_EMBEDDINGS Funktion erstellt Embeddings (Vektorarrays) durch Verwendung einer vorgefertigten KI-Modelldefinition, die in der Datenbank gespeichert ist.

Syntax

Transact-SQL-Syntaxkonventionen

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Argumente

Quelle

Ein Ausdruck beliebiger Zeichenart, wie nvarchar, varchar, nchar oder char.

model_identifier

Der Name eines externen Modells , definiert als ein EMBEDDINGS Typ, der zur Erstellung des Embeddings-Vektorarrays verwendet wird.

Weitere Informationen finden Sie unter CREATE EXTERNAL MODEL.

optional_json_request_body_parameters

Eine gültige JSON-formatierte Liste zusätzlicher Parameter. Die Funktion fügt diese Parameter dem REST-Anfrage-Nachrichtenkörper hinzu, bevor sie an den Endpunkt des externen Modells gesendet wird. Diese Parameter hängen davon ab, was der Endpunkt des externen Modells unterstützt und akzeptiert.

Rückgabetypen

AI_GENERATE_EMBEDDINGS gibt eine einspaltige Tabelle zurück, deren Zeilen die generierten einbettenden Vektorarrays sind, die als JSON zurückgegeben werden.

Rückgabeformat

Das Format der zurückgegebenen JSON lautet wie folgt:

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

Bemerkungen

AI_GENERATE_EMBEDDINGS ist in azure SQL Managed Instance mit der Always-up-to-Updaterichtlinie verfügbar.

Voraussetzungen

Stellen Sie sicher AI_GENERATE_EMBEDDINGS, dass Sie die folgenden Voraussetzungen erfüllen:

  • Aktivieren Sie in der Datenbank mit folgendem Befehl sp_invoke_external_endpoint :

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

    Hinweis

    In Azure SQL-Datenbank und SQL Database in Fabric ist die external rest endpoint enabled Systemkonfigurationsoption standardmäßig aktiviert.

Für weitere Informationen zur Erstellung von Embedding-Endpunkten lesen Sie den Prozess für Azure OpenAI in Azure AI Foundry Models, OpenAI oder Ollama.

  • Erstellen Sie ein externes Modell dieser EMBEDDINGS Art, das über die richtigen Zuschüsse, Rollen und Berechtigungen zugänglich ist.

Optionale Parameter

Verwenden Sie den optional_json_request_body_parameters Parameter in AI_GENERATE_EMBEDDINGS , wenn Sie einen Endpunktparameter zum Hauptteil der Embeddings-Anfrage hinzufügen müssen. Das Hinzufügen eines optionalen Parameters überschreibt den Wert zur Laufzeit, wenn die Modelldefinition diesen Parameter enthält.

Wenn zum Beispiel das externe Modell den Parameter für dimensions auf 1.536 setzt, kann man diesen Parameter zur Laufzeit mit einem neuen Wert übergeben optional_json_request_body_parameters .

Im folgenden Beispiel wird der dimensions Parameter für das Modell außer Kraft gesetzt:

json_object("dimensions":755)

Der Wert, in optional_json_request_body_parameters den du übergehst, muss gültiges JSON sein.

Erweiterte Ereignisse (XEvent)

AI_GENERATE_EMBEDDINGS hat ein erweitertes Ereignis (ai_generate_embeddings_summary), das du zur Fehlerbehebung aktivieren kannst. Es enthält Informationen über die REST-Anfrage und -Antwort, wie Statuscode, eventuelle aufgetretene Fehler und den verwendeten Modellnamen. Das erweiterte Event external_rest_endpoint_summary enthält zusätzliche Informationen, die bei der Fehlersuche und dem Debuggen von REST-Anfragen helfen können.

Beispiele

Ein. Erstellen von Einbettungen mit einer SELECT-Anweisung

Das folgende Beispiel zeigt, wie man die AI_GENERATE_EMBEDDINGS Funktion mit einer select-Anweisung verwendet, die Ergebnisse in einem JSON-Array zurückgibt.

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

B. Erstellen von Einbettungen mit einer SELECT-Anweisung mithilfe von AI_GENERATE_CHUNKS

Das folgende Beispiel zeigt, wie man die AI_GENERATE_EMBEDDINGS Funktion mit der AI_GENERATE_CHUNKS-Funktion verwendet, um Text in bestimmte Chunk-Größen mit einer select-Anweisung zu übergeben, die Vektorarray-Ergebnisse zurückgibt.

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. Erstellen von Einbettungen mit einer Tabellenaktualisierung

Das folgende Beispiel zeigt, wie Sie die AI_GENERATE_EMBEDDINGS Funktion mit einer Tabellenaktualisierungsanweisung verwenden, um die Ergebnisse des Vektorarrays in eine Vektordatentypspalte zurückzugeben.

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

D. Erstellen von Einbettungen mit einer SELECT-Anweisung und PARAMETERS

Im folgenden Beispiel wird gezeigt, wie Sie die AI_GENERATE_EMBEDDINGS Funktion mit einer Select-Anweisung verwenden und optionale Parameter an den Endpunkt übergeben, wodurch Vektorarrayergebnisse zurückgegeben werden.

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

E. Retry-Embeddings-Generierung mit retry_count PARAMETERS-Option

Wenn beim Einbettungsaufruf HTTP-Statuscodes auftreten, die temporäre Probleme angeben, können Sie die Anforderung so konfigurieren, dass die Anforderung automatisch erneut versucht wird.

Um die Anzahl der Wiederholungen anzugeben, fügen Sie die folgende JSON zur PARAMETERS Option hinzu. Dieser Wert sollte eine positive ganze Zahl zwischen null (0) und zehn (10) einschließlich sein, und kann nicht sein NULL.

Hinweis

Wenn ein retry_count Wert in der AI_GENERATE_EMBEDDINGS Abfrage angegeben ist, überschreibt er ( retry_count falls definiert) in der Konfiguration des externen Modells.

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. Ein vollständiges Beispiel mit Modellerstellung, Chunking und Embedding-Generierung

Das folgende Beispiel zeigt einen End-to-End-Prozess, um Ihre Daten KI-tauglich zu machen, indem Sie den Azure OpenAI API Key verwenden:

  1. Verwenden Sie CREATE EXTERNAL MODEL, um Ihr Embedding-Modell zu registrieren und zugänglich zu machen.

  2. Teile den Datensatz mit AI_GENERATE_CHUNKS in kleinere Abschnitte auf, damit die Daten im Kontextfenster des Modells passen und die Abrufgenauigkeit verbessert wird.

  3. Erzeugen Sie Einbettungen mit AI_GENERATE_EMBEDDINGS.

  4. Fügen Sie die Ergebnisse in eine Tabelle mit einem Vektordatentyp ein.

Hinweis

Ersetzen Sie <password> durch ein gültiges Kennwort.

Aktivieren Sie den externen REST-Endpunktaufruf auf dem Datenbankserver:

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

Erstellen Sie einen Datenbank-Masterschlüssel:

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

Erstellen Sie Zugriffszugangsdaten für Azure OpenAI mit einem Schlüssel:

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

Erstellen Sie ein externes Modell, um den Azure OpenAI Embeddings REST-Endpunkt aufzurufen:

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

Erstellen Sie eine Tabelle mit Text, um Daten zu chunken und einzufügen:

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

Erstelle eine neue Tabelle, um die gebrochenen Texte und Vektor-Einbettungen zu speichern:

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

Fügen Sie die gechunkten Text- und Vektoreinbettungen in die text_embeddings-Tabelle ein, indem Sie und AI_GENERATE_EMBEDDINGSverwendenAI_GENERATE_CHUNKS:

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;

Anzeigen der Ergebnisse

SELECT *
FROM text_embeddings;