Partager via


AI_GENERATE_EMBEDDINGS (Transact-SQL)

S’applique à : SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_EMBEDDINGS est une fonction intégrée qui crée des incorporations (tableaux de vecteurs) à l’aide d’une définition de modèle IA précréée stockée dans la base de données.

Syntaxe

Conventions de la syntaxe Transact-SQL

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Les arguments

source

Expression de n’importe quel type de caractère (par exemple, nvarchar, varchar, nchar ou char).

model_identifier

Le nom d’un modèle externe défini comme un EMBEDDINGS type utilisé pour créer le tableau vectoriel d’embeddings.

Pour plus d’informations, consultez CREATE EXTERNAL MODEL.

optional_json_request_body_parameters

Liste de paramètres supplémentaires au format JSON valide. Ces paramètres sont ajoutés au corps du message de requête REST avant d’être envoyés à l’emplacement de point final du modèle externe. Ces paramètres dépendent de ce que le point d’extrémité du modèle externe prend en charge et accepte.

Types de retour

AI_GENERATE_EMBEDDINGS retourne une table à colonne unique dont les lignes sont les tableaux de vecteurs incorporés générés retournés en tant que JSON.

Format de retour

Le format du JSON retourné est le suivant :

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

Remarques

Conditions préalables

Vous devez remplir les conditions suivantes pour utiliser AI_GENERATE_EMBEDDINGS:

  • Activez sp_invoke_external_endpoint sur la base de données, avec la commande suivante :

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • Créez un modèle externe du EMBEDDINGS type, accessible via les subventions, rôles et/ou autorisations appropriés.

Paramètres facultatifs

Le paramètre optional_json_request_body_parameters dans AI_GENERATE_EMBEDDINGS lequel il est utilisé lorsqu’un paramètre de point de terminaison doit être ajouté au corps du message de demande d’incorporations. L’ajout d’un paramètre facultatif remplace la valeur au moment de l’exécution si ce paramètre est défini dans la définition du modèle.

Par exemple, si le modèle externe contient le paramètre pour dimensions fixé à 1536, en passant ce paramètre à l’exécution optional_json_request_body_parameters avec une nouvelle valeur comme vu ici : json_object("dimensions":755), le dimensions paramètre sur le modèle est écrasé.

La valeur passée optional_json_request_body_parameters doit être JSON valide.

Créer des points de terminaison d’incorporation

Pour plus d’informations sur la création de terminaux d’embedding, consultez le processus pour Azure OpenAI dans Azure AI Foundry Models, OpenAI ou Ollama.

Événements étendus (XEvent)

AI_GENERATE_EMBEDDINGS a un événement étendu (ai_generate_embeddings_summary) qui peut être activé pour la résolution des problèmes. Il contient des informations sur la requête et la réponse REST, telles que le code d’état, les erreurs rencontrées et le nom du modèle utilisé. L’événement external_rest_endpoint_summary étendu contient des informations supplémentaires qui peuvent être destinées à la résolution des problèmes et au débogage des requêtes REST.

Exemples

Un. Créer des incorporations avec une instruction SELECT

L’exemple suivant montre comment utiliser la AI_GENERATE_EMBEDDINGS fonction avec une instruction select qui renvoie les résultats dans un tableau JSON.

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

B. Créer des incorporations avec une instruction SELECT à l’aide de AI_GENERATE_CHUNKS

L’exemple suivant montre comment utiliser la AI_GENERATE_EMBEDDINGS fonction avec la fonction AI_GENERATE_CHUNKS pour passer du texte divisé en tailles de morceaux spécifiées avec une instruction select qui renvoie les résultats du tableau vectoriel.

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;

Chapitre C. Créer des incorporations avec une mise à jour de table

L’exemple suivant montre comment utiliser la AI_GENERATE_EMBEDDINGS fonction avec une instruction de mise à jour de table pour retourner les résultats du tableau de vecteurs dans une colonne de type de données vectorielles.

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

D. Créer des incorporations avec une instruction SELECT et PARAMETERS

L’exemple suivant montre comment utiliser la AI_GENERATE_EMBEDDINGS fonction avec une instruction select et passer des paramètres facultatifs au point de terminaison, qui retourne les résultats du tableau de vecteurs.

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

E. Génération d’embeddings de réessayer avec retry_count option PARAMETERS

Si l’appel d’incorporation rencontre des codes d’état HTTP indiquant des problèmes temporaires, vous pouvez configurer la demande pour réessayer automatiquement.

Pour spécifier le nombre de tentatives, ajoutez le JSON suivant à l’option PARAMETERS . Cette valeur doit être un entier positif compris entre zéro (0) et dix (10) inclus, et ne peut pas être NULL.

Note

Si une retry_count valeur est spécifiée dans la AI_GENERATE_EMBEDDINGS requête, elle supprime ( retry_count si définie) dans la configuration du modèle externe.

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

F. Un exemple complet avec la création de modèles, le chunking et la génération d’embedding

L’exemple suivant démontre un processus de bout en bout pour rendre vos données prêtes à l’IA en utilisant Azure OpenAI API Key :

  1. Utilisez CRÉER UN MODÈLE EXTERNE pour enregistrer et rendre votre modèle d’intégration accessible.

  2. Divisez l’ensemble de données en plus petits segments avec AI_GENERATE_CHUNKS, afin que les données s’intègrent dans la fenêtre contextuelle du modèle et améliorent la précision de la récupération.

  3. Générer des embeddings en utilisant AI_GENERATE_EMBEDDINGS.

  4. Insérez les résultats dans une table avec un type de données vectoriel.

Note

Remplacez <password> par un mot de passe valide.

Activez l’invocation externe du point de terminaison REST sur le serveur de base de données :

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

Créez une clé maîtresse de base de données :

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

Créez des identifiants d’accès à Azure OpenAI à l’aide d’une clé :

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

Créez un modèle externe pour appeler le point de terminaison REST des embeddings d’Azure OpenAI :

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

Créez une table avec du texte à fragmenter et insérer des données :

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

Créez une nouvelle table pour contenir le texte en blocs et les inclusions vectorielles :

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

Insérez le texte en blocs et les insertions vectorielles dans la table text_embeddings en utilisant AI_GENERATE_CHUNKS et 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;

Afficher les résultats

SELECT *
FROM text_embeddings;