Udostępnij za pomocą


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Dotyczy do: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_EMBEDDINGS to wbudowana funkcja, która tworzy osadzanie (tablice wektorowe) przy użyciu wstępnie utworzonej definicji modelu sztucznej inteligencji przechowywanej w bazie danych.

Składnia

Transact-SQL konwencje składni

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Argumenty (w programowaniu)

źródło

Wyrażenie dowolnego typu znaku (na przykład nvarchar, varchar, nchar lub char).

model_identifier

Nazwa zewnętrznego modelu definiowanego jako EMBEDDINGS typ używany do tworzenia tablicy wektorowej osadzeń.

Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL MODEL (TWORZENIE MODELU ZEWNĘTRZNEgo).

optional_json_request_body_parameters

Prawidłowa lista dodatkowych parametrów sformatowanych w formacie JSON. Parametry te są dodawane do ciała wiadomości żądania REST przed wysłaniem do lokalizacji końcowego modelu zewnętrznego. Parametry te zależą od tego, co obsługuje i akceptuje końcowy model zewnętrzny.

Typy zwracane

AI_GENERATE_EMBEDDINGS Zwraca tabelę z jedną kolumną, której wiersze są wygenerowanymi tablicami wektorów osadzania zwróconymi jako dane JSON.

Format zwracany

Format zwróconego kodu JSON jest następujący:

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

Uwagi

Wymagania wstępne

Musisz spełnić następujące warunki, aby skorzystać AI_GENERATE_EMBEDDINGS:

  • Włącz sp_invoke_external_endpoint w bazie danych za pomocą następującego polecenia:

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • Stwórz zewnętrzny modelEMBEDDINGS tego typu, dostępny dzięki odpowiednim grantom, rolom i/lub uprawnieniam.

Parametry opcjonalne

Parametr optional_json_request_body_parameters w pliku AI_GENERATE_EMBEDDINGS jest używany, gdy parametr punktu końcowego musi zostać dodany do treści komunikatu żądania osadzania. Dodanie opcjonalnego parametru zastępuje wartość w czasie wykonywania, jeśli ten parametr jest zdefiniowany w definicji modelu.

Na przykład, jeśli zewnętrzny model zawiera parametr dla ustawiony dimensions na 1536, przekazując ten parametr w optional_json_request_body_parameters czasie działania nową wartością, jak widać tutaj: json_object("dimensions":755), dimensions parametr na modelu jest nadpisywany.

Przekazana wartość optional_json_request_body_parameters musi być prawidłowym kodem JSON.

Tworzenie osadzonych punktów końcowych

Aby uzyskać więcej informacji na temat tworzenia punktów końcowych osadzających, zapoznaj się z procesem Azure OpenAI w Azure AI Foundry Models, OpenAI lub Ollama.

Zdarzenia rozszerzone (XEvent)

AI_GENERATE_EMBEDDINGS ma zdarzenie rozszerzone (ai_generate_embeddings_summary), które można włączyć na potrzeby rozwiązywania problemów. Zawiera informacje o żądaniu i odpowiedzi REST, takie jak kod statusu, ewentualne napotkane błędy oraz używana nazwa modelu. Zdarzenie rozszerzone external_rest_endpoint_summary zawiera dodatkowe informacje, które mogą być przeznaczone do rozwiązywania problemów i debugowania żądań REST.

Przykłady

Odp. Tworzenie osadzania za pomocą instrukcji SELECT

Poniższy przykład pokazuje, jak użyć AI_GENERATE_EMBEDDINGS funkcji z poleceniem select, które zwraca wyniki w tablicy JSON.

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

B. Tworzenie osadzania za pomocą instrukcji SELECT przy użyciu AI_GENERATE_CHUNKS

Poniższy przykład pokazuje, jak użyć AI_GENERATE_EMBEDDINGS funkcji z funkcją AI_GENERATE_CHUNKS do przekazywania tekstu podzielonego na określone rozmiary bloków za pomocą instrukcji select, która zwraca wyniki tablicy wektorowej.

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. Tworzenie osadzania za pomocą aktualizacji tabeli

W poniższym przykładzie pokazano, jak używać AI_GENERATE_EMBEDDINGS funkcji z instrukcją update tabeli w celu zwrócenia wyników tablicy wektorowej do kolumny typu danych wektorów.

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

D. Tworzenie osadzonych za pomocą instrukcji SELECT i parametrów

W poniższym przykładzie pokazano, jak używać AI_GENERATE_EMBEDDINGS funkcji z instrukcją select i przekazywać opcjonalne parametry do punktu końcowego, co zwraca wyniki tablicy wektorowej.

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

E. Ponowne generowanie osadzeń z retry_count opcją PARAMETERS

Jeśli wywołanie osadzania napotka kody stanu HTTP wskazujące tymczasowe problemy, możesz skonfigurować żądanie, aby automatycznie ponowić próbę.

Aby określić liczbę prób, dodaj do opcji następujący JSON PARAMETERS . Ta wartość powinna być dodatnią liczbą całkowitą między zerem (0) a dziesięcioma (10) włącznie i nie może być .NULL

Uwaga / Notatka

Jeśli wartość retry_count jest podana w zapytaniu AI_GENERATE_EMBEDDINGS , nadpisuje ona ( retry_count jeśli jest zdefiniowana) w konfiguracji modelu zewnętrznego.

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

F. Pełny przykład z fragmentowaniem, AI_GENERATE_EMBEDDINGS i tworzeniem modelu

Poniższy przykład pokazuje kompleksowy proces przygotowania danych do AI:

  1. Użyj CREATE EXTERNAL MODEL, aby się zarejestrować i uczynić swój model osadzenia dostępnym.

  2. Podziel zbiór danych na mniejsze fragmenty AI_GENERATE_CHUNKS, aby dane mieściły się w oknie kontekstowym modelu i poprawiły dokładność wyszukiwania.

  3. Generuj osadzenia za pomocą AI_GENERATE_EMBEDDINGS.

  4. Wstaw wyniki do tabeli z typem danych wektorowych.

Uwaga / Notatka

Zastąp <password> prawidłowym hasłem.

-- 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;