Aracılığıyla paylaş


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2025 (17.x) Önizlemesi

AI_GENERATE_EMBEDDINGS , veritabanında depolanan önceden oluşturulmuş bir yapay zeka modeli tanımı kullanarak eklemeler (vektör dizileri) oluşturan yerleşik bir işlevdir.

Sözdizimi

Transact-SQL söz dizimi kuralları

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Tartışmalar

kaynak

Herhangi bir karakter türünün ifadesi (örneğin, nvarchar, varchar, nchar veya char).

model_identifier

Ekleme vektör dizisini oluşturmak için kullanılan bir tür olarak tanımlanan EMBEDDING adı.

Daha fazla bilgi için bkz. CREATE EXTERNAL MODEL.

optional_json_request_body_parameters

Ek parametrelerin geçerli bir JSON biçimli listesi. Bu parametreler, 'nin uç nokta konumuna gönderilmeden önce REST isteği ileti gövdesine EXTERNAL MODELeklenir. Bu parametreler, 'nin uç noktasının EXTERNAL MODELdesteklediği ve kabul ettiklerine bağlıdır.

Dönüş türleri

AI_GENERATE_EMBEDDINGS , satırları JSON olarak döndürülen, oluşturulan ekleme vektör dizileri olan tek sütunlu bir tablo döndürür.

Dönüş biçimi

Döndürülen JSON'un biçimi aşağıdaki gibidir:

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

Açıklamalar

Önkoşullar

Kullanmak AI_GENERATE_EMBEDDINGSiçin karşılamanız gereken iki önkoşul vardır:

  • sp_invoke_external_endpoint sp_configure kullanılarak veritabanında etkinleştirilmelidir.

  • türündeki bir EMBEDDINGS, doğru izinler, roller ve/veya izinler aracılığıyla erişilebilir.

İsteğe bağlı parametreler

parametresi optional_json_request_body_parametersAI_GENERATE_EMBEDDINGS , ekleme istekleri iletisinin gövdesine bir uç nokta parametresi eklenmesi gerektiğinde kullanılır. İsteğe bağlı bir parametre eklemek, model tanımında tanımlanmışsa çalışma zamanında değeri geçersiz kılar.

Örneğin, EXTERNAL MODEL 1536 olarak ayarlanmış parametresini dimensions içeriyorsa, bu parametre optional_json_request_body_parameters çalışma zamanında burada görüldüğü gibi yeni bir değerle geçirilir: json_object('dimensions':755), dimensions modeldeki parametre geçersiz kılınmış olur.

geçirilen optional_json_request_body_parameters değer geçerli bir JSON olmalıdır.

Ekleme uç noktaları oluşturma

Ekleme uç noktaları oluşturma hakkında daha fazla bilgi için Azure OpenAI, OpenAI veya Ollama işlemini gözden geçirin.

Genişletilmiş Olaylar (XEvent)

AI_GENERATE_EMBEDDINGS sorun giderme için etkinleştirilebilen genişletilmiş bir olayı (ai_generate_embeddings_summary) vardır. Durum kodu, karşılaştığı hatalar, kullanılan model adı ve ekleme uç noktası tarafından kullanılan belirteç sayısı gibi REST isteği ve yanıtı hakkında bilgi içerir. Genişletilmiş olay external_rest_endpoint_summary , REST isteklerinin sorunlarını gidermeye ve hata ayıklamaya yönelik ek bilgiler içerir.

Örnekler

A. SELECT deyimiyle ekleme oluşturma

Aşağıdaki örnekte, işlevin AI_GENERATE_EMBEDDINGS vektör dizisi sonuçlarını döndüren bir select deyimiyle nasıl kullanılacağı gösterilmektedir.

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

B. AI_GENERATE_CHUNKS kullanarak SELECT deyimiyle eklemeler oluşturma

Aşağıdaki örnekte, belirtilen öbek boyutlarına AI_GENERATE_EMBEDDINGS ayrılmış metinleri vektör dizisi sonuçlarını döndüren bir select deyimiyle geçirmek için işlevini AI_GENERATE_CHUNKS işlevle birlikte kullanma gösterilmektedir.

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 = N'FIXED' , chunk_size = 10) c;

C. Tablo güncelleştirmesi ile ekleme oluşturma

Aşağıdaki örnekte, vektör dizisi sonuçlarını bir vektör veri türü sütununa döndürmek için işlevin tablo güncelleştirme deyimiyle nasıl kullanılacağı AI_GENERATE_EMBEDDINGS gösterilmektedir.

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

D. SELECT deyimi ve PARAMETERS ile eklemeler oluşturma

Aşağıdaki örnekte işlevin AI_GENERATE_EMBEDDINGS select deyimiyle nasıl kullanılacağı ve isteğe bağlı parametrelerin uç noktaya nasıl geçirildiği gösterilmektedir ve bu da vektör dizisi sonuçlarını döndürür.

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

E. Öbekleme, AI_GENERATE_EMBEDDINGS ve model oluşturma ile ilgili tam bir örnek

Bu örnek, CREATE EXTERNAL MODEL oluşturma, kullanarak AI_GENERATE_EMBEDDINGSve AI_GENERATE_CHUNKS kullanarak sonuçları vektör veri türüne sahip bir tabloya ekleme işleminin tam akışıdır. yerine <password> geçerli bir parola kullanmayı unutmayın.

-- Turn external REST endpoint invocation ON in the database
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 = N'FIXED', chunk_size = 100) c;

-- View the results
SELECT * FROM text_embeddings;