Freigeben über


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_EMBEDDINGS ist eine integrierte Funktion, die Einbettungen (Vektorarrays) mithilfe einer vordefinierten KI-Modelldefinition erstellt, 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 eines beliebigen Zeichentyps (z. B . 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 mit zusätzlichen Parametern. Diese Parameter werden dem REST-Anforderungsnachrichtenkörper hinzugefügt, bevor sie an den Endpunkt des externen Modells gesendet werden. 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

Voraussetzungen

Sie müssen die folgenden Voraussetzungen erfüllen, um die Nutzung zu nutzen AI_GENERATE_EMBEDDINGS:

  • Aktivieren Sie in der Datenbank mit folgendem Befehl sp_invoke_external_endpoint :

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • Erstellen Sie ein externes Modell dieser EMBEDDINGS Art, das über die richtigen Zuschüsse, Rollen und/oder Berechtigungen zugänglich ist.

Optionale Parameter

Der Parameter optional_json_request_body_parametersAI_GENERATE_EMBEDDINGS wird verwendet, wenn ein Endpunktparameter dem Textkörper der Anforderungsnachricht der Einbettungsanforderung hinzugefügt werden muss. Durch Hinzufügen eines optionalen Parameters wird der Wert zur Laufzeit außer Kraft gesetzt, wenn dieser Parameter in der Modelldefinition definiert ist.

Zum Beispiel, wenn das externe Modell den Parameter für dimensions auf 1536 setzt, wird durch Übergabe dieses Parameters zur optional_json_request_body_parameters Laufzeit mit einem neuen Wert, wie hier zu sehen, überschrieben. json_object("dimensions":755)dimensions

Der übergebene optional_json_request_body_parameters Wert muss gültiger JSON-Code sein.

Erstellen von Einbettungsendpunkten

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.

Erweiterte Ereignisse (XEvent)

AI_GENERATE_EMBEDDINGS verfügt über ein erweitertes Ereignis (ai_generate_embeddings_summary), das für die Problembehandlung aktiviert werden kann. Sie enthält Informationen über die REST-Anfrage und -Antwort, wie Statuscode, eventuelle aufgetretene Fehler und den verwendeten Modellnamen. Das erweiterte Ereignis external_rest_endpoint_summary enthält zusätzliche Informationen, die sich für die Problembehandlung und das Debuggen von REST-Anforderungen befinden 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.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS TRY_CONVERT (JSON, N'{"dimensions":768}'))
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.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS TRY_CONVERT (JSON, N'{"retry_count":10}'))
FROM myTable;

F. Ein vollständiges Beispiel mit Modellerstellung, Chunking und Embedding-Generierung

Das folgende Beispiel demonstriert einen End-to-End-Prozess, um Ihre Daten KI-bereit mit Azure OpenAI API Key zu machen:

  1. Verwenden Sie CREATE EXTERNAL MODEL, um sich zu registrieren und Ihr Embedding-Modell 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 Embeddings 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

Erstelle Zugriffszugangsdaten zu 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üge die gechunkten Text- und Vektoreinbettungen in die text_embeddings-Tabelle AI_GENERATE_CHUNKS mit und AI_GENERATE_EMBEDDINGSein:

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;