Sdílet prostřednictvím


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Platí na: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_EMBEDDINGS je integrovaná funkce, která vytváří vkládání (vektorová pole) pomocí předem vytvořené definice modelu AI uložené v databázi.

Syntaxe

Transact-SQL konvence syntaxe

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Argumenty

zdroj

Výraz libovolného typu znaku (například nvarchar, varchar, nchar nebo char).

model_identifier

Název externího modelu definovaného jako typ, EMBEDDINGS který se používá k vytvoření vektorového pole embeddingů.

Další informace naleznete v tématu VYTVOŘENÍ EXTERNÍHO MODELU.

optional_json_request_body_parameters

Platný seznam dalších parametrů ve formátu JSON. Tyto parametry jsou přidány k tělu REST žádosti před odesláním na místo koncového bodu externího modelu. Tyto parametry závisí na tom, co podporuje a přijímá koncový bod externího modelu.

Návratové typy

AI_GENERATE_EMBEDDINGS vrátí tabulku s jedním sloupcem, jejíž řádky jsou vygenerovanými vektorovými poli vložených vektorů vrácených jako JSON.

Návratový formát

Formát vráceného formátu JSON je následující:

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

Poznámky

Požadavky

Musíte splnit následující předpoklady pro použití AI_GENERATE_EMBEDDINGS:

  • Povolte sp_invoke_external_endpoint v databázi následujícím příkazem:

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • Vytvořte externí modelEMBEDDINGS tohoto typu, přístupný prostřednictvím správných grantů, rolí a/nebo oprávnění.

Volitelné parametry

optional_json_request_body_parameters Parametr in AI_GENERATE_EMBEDDINGS se používá, když je potřeba přidat parametr koncového bodu do textu zprávy žádosti o vložení. Přidání volitelného parametru přepíše hodnotu za běhu, pokud je tento parametr definovaný v definici modelu.

Například pokud externí model obsahuje parametr pro nastavený dimensions na 1536, předáním tohoto parametru v optional_json_request_body_parameters běhu s novou hodnotou, jak je vidět zde: json_object("dimensions":755), je dimensions parametr na modelu přepsán.

Předaná optional_json_request_body_parameters hodnota musí být platná ve formátu JSON.

Vytváření koncových bodů pro vkládání

Pro více informací o vytváření embedding endpointů si prostudujte proces Azure OpenAI v Azure AI Foundry Models, OpenAI nebo Ollama.

Rozšířené události (XEvent)

AI_GENERATE_EMBEDDINGS má rozšířenou událost (ai_generate_embeddings_summary), která se dá povolit pro řešení potíží. Obsahuje informace o REST požadavku a odpovědi, jako je stavový kód, případné chyby, na které narazil, a název použitého modelu. Rozšířená událost external_rest_endpoint_summary obsahuje další informace, které můžou být určené k řešení potíží a ladění požadavků REST.

Příklady

A. Vytvoření vkládání pomocí příkazu SELECT

Následující příklad ukazuje, jak použít AI_GENERATE_EMBEDDINGS funkci s příkazem select, který vrací výsledky do JSON pole.

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

B. Vytváření vkládání pomocí příkazu SELECT pomocí AI_GENERATE_CHUNKS

Následující příklad ukazuje, jak použít AI_GENERATE_EMBEDDINGS funkci s funkcí AI_GENERATE_CHUNKS k předání textu rozděleného do specifikovaných částí pomocí příkazu select, který vrací výsledky vektorového pole.

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. Vytváření vkládání pomocí aktualizace tabulky

Následující příklad ukazuje, jak použít AI_GENERATE_EMBEDDINGS funkci s příkazem update tabulky k vrácení výsledků vektorové matice do sloupce vektorového datového typu.

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

D. Vytváření vložených objektů pomocí příkazu SELECT a PARAMETRŮ

Následující příklad ukazuje, jak použít AI_GENERATE_EMBEDDINGS funkci s příkazem select a předání volitelných parametrů koncovému bodu, který vrací výsledky vektorové matice.

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

E. Generování opětovných vložených modulů s retry_count možností PARAMETERS

Pokud volání vkládání narazí na stavové kódy HTTP označující dočasné problémy, můžete požadavek nakonfigurovat tak, aby se automaticky zopakoval.

Pro určení počtu opakování přidejte do volby PARAMETERS následující JSON. Tato hodnota by měla být kladné celé číslo mezi nulou (0) a deseti (10) včetně a nemůže být NULL.

Poznámka:

Pokud je v dotazu AI_GENERATE_EMBEDDINGS zadána hodnotaretry_count, přepisuje (retry_countpokud je definována) v konfiguraci externího modelu.

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

F. Úplný příklad s vytvářením bloků dat, AI_GENERATE_EMBEDDINGS a vytvářením modelů

Následující příklad ukazuje komplexní proces, jak připravit vaše data na AI:

  1. Použijte CREATE EXTERNAL MODEL k registraci a zpřístupnění vašeho embedding modelu.

  2. Rozdělte datovou sadu na menší části pomocí AI_GENERATE_CHUNKS, aby data zapadla do kontextového okna modelu a zlepšila přesnost vyhledávání.

  3. Generujte embeddingy pomocí AI_GENERATE_EMBEDDINGS.

  4. Vložte výsledky do tabulky s vektorovým datovým typem.

Poznámka:

Nahraďte <password> platným heslem.

-- Enable the external REST endpoint invocation on the database server
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;