AI_GENERATE_EMBEDDINGS (Transact-SQL)

Berlaku untuk: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Fungsi ini AI_GENERATE_EMBEDDINGS membuat penyematan (array vektor) dengan menggunakan definisi model AI yang telah dibuat sebelumnya yang disimpan dalam database.

Sintaksis

Konvensi sintaks Transact-SQL

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

Argumen

sumber

Ekspresi dari jenis karakter apa pun, seperti nvarchar, varchar, nchar, atau char.

model_identifier

Nama model eksternal yang didefinisikan sebagai EMBEDDINGS jenis yang digunakan untuk membuat array vektor penyematan.

Untuk informasi selengkapnya, lihat MEMBUAT MODEL EKSTERNAL.

optional_json_request_body_parameters

Daftar parameter tambahan berformat JSON yang valid. Fungsi menambahkan parameter ini ke isi pesan permintaan REST sebelum mengirimkannya ke lokasi titik akhir model eksternal. Parameter ini bergantung pada apa yang didukung dan diterima oleh titik akhir model eksternal.

Tipe pengembalian

AI_GENERATE_EMBEDDINGS mengembalikan tabel kolom tunggal yang barisnya adalah array vektor penyematan yang dihasilkan yang dikembalikan sebagai JSON.

Mengembalikan format

Format JSON yang dikembalikan adalah sebagai berikut:

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

Komentar

AI_GENERATE_EMBEDDINGStersedia di Azure SQL Managed Instance dengan kebijakan pembaruanalways-up-to-date.

Prasyarat

Untuk menggunakan AI_GENERATE_EMBEDDINGS, pastikan Anda memenuhi prasyarat berikut:

  • Aktifkan sp_invoke_external_endpoint pada database, dengan perintah berikut:

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

    Nota

    Pada Azure SQL Database dan database SQL di Fabric, external rest endpoint enabled opsi konfigurasi sistem diaktifkan secara default.

Untuk informasi selengkapnya tentang membuat titik akhir penyematan, tinjau proses Azure OpenAI di Azure AI Foundry Models, OpenAI, atau Ollama.

  • Buat model eksternal dari jenis tersebut EMBEDDINGS , yang dapat diakses melalui pemberian, peran, dan izin yang benar.

Parameter opsional

Gunakan parameter saat optional_json_request_body_parametersAI_GENERATE_EMBEDDINGS Anda perlu menambahkan parameter titik akhir ke isi pesan permintaan penyematan. Menambahkan parameter opsional akan mengganti nilai saat runtime jika definisi model menyertakan parameter tersebut.

Misalnya, jika model eksternal berisi parameter untuk dimensions diatur ke 1.536, Anda dapat meneruskan parameter tersebut saat optional_json_request_body_parameters runtime dengan nilai baru.

Dalam contoh berikut, dimensions parameter pada model ditimpa:

json_object("dimensions":755)

Nilai yang Anda teruskan optional_json_request_body_parameters harus JSON yang valid.

Acara yang Diperpanjang (XEvent)

AI_GENERATE_EMBEDDINGS memiliki peristiwa yang diperpanjang (ai_generate_embeddings_summary) yang dapat Anda aktifkan untuk pemecahan masalah. Ini berisi informasi tentang permintaan dan respons REST, seperti kode status, kesalahan apa pun yang ditemui, dan nama model yang digunakan. Peristiwa external_rest_endpoint_summary yang diperpanjang berisi informasi tambahan yang dapat membantu pemecahan masalah dan penelusuran kesalahan permintaan REST.

Contoh

Sebuah. Membuat penyematan dengan pernyataan SELECT

Contoh berikut menunjukkan cara menggunakan AI_GENERATE_EMBEDDINGS fungsi dengan pernyataan select yang mengembalikan hasil dalam array JSON.

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

B. Membuat penyematan dengan pernyataan SELECT menggunakan AI_GENERATE_CHUNKS

Contoh berikut menunjukkan cara menggunakan AI_GENERATE_EMBEDDINGS fungsi dengan fungsi AI_GENERATE_CHUNKS untuk meneruskan teks yang dipecah dalam ukuran potongan tertentu dengan pernyataan select yang mengembalikan hasil array vektor.

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. Membuat penyematan dengan pembaruan tabel

Contoh berikut menunjukkan cara menggunakan AI_GENERATE_EMBEDDINGS fungsi dengan pernyataan pembaruan tabel untuk mengembalikan hasil array vektor ke dalam kolom tipe data vektor.

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

D. Membuat penyematan dengan pernyataan SELECT dan PARAMETERS

Contoh berikut menunjukkan cara menggunakan AI_GENERATE_EMBEDDINGS fungsi dengan pernyataan pilih dan meneruskan parameter opsional ke titik akhir, yang mengembalikan hasil array vektor.

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

E. Coba lagi menyematkan pembuatan dengan retry_count opsi PARAMETERS

Jika panggilan penyematan mengalami kode status HTTP yang menunjukkan masalah sementara, Anda dapat mengonfigurasi permintaan untuk mencoba kembali secara otomatis.

Untuk menentukan jumlah percobaan ulang, tambahkan JSON berikut ke PARAMETERS opsi. Nilai ini harus berupa bilangan bulat positif antara nol (0) dan sepuluh (10) inklusif, dan tidak boleh .NULL

Nota

Jika retry_count nilai ditentukan dalam AI_GENERATE_EMBEDDINGS kueri, nilai tersebut akan menggantikan ( retry_count jika ditentukan) dalam konfigurasi model eksternal.

DECLARE @params JSON = N'{"sql_rest_options":{"retry_count":10}} '
SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS @params)
FROM myTable;

F. Contoh lengkap dengan pembuatan model, pemotongan, dan pembuatan penyematan

Contoh berikut menunjukkan proses end-to-end untuk membuat data Anda siap AI dengan menggunakan Azure OpenAI API Key:

  1. Gunakan CREATE EXTERNAL MODEL untuk mendaftarkan model penyematan Anda dan membuatnya dapat diakses.

  2. Pisahkan himpunan data menjadi potongan-potongan yang lebih kecil dengan AI_GENERATE_CHUNKS, sehingga data sesuai dengan jendela konteks model dan meningkatkan akurasi pengambilan.

  3. Hasilkan penyematan dengan menggunakan AI_GENERATE_EMBEDDINGS.

  4. Sisipkan hasil ke dalam tabel dengan tipe data vektor.

Nota

Ganti <password> dengan kata sandi yang valid.

Aktifkan pemanggilan titik akhir REST eksternal di server database:

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

Buat kunci master database:

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

Buat kredensial akses ke Azure OpenAI dengan menggunakan kunci:

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

Buat model eksternal untuk memanggil titik akhir REST penyematan 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/]
);

Buat tabel dengan teks untuk dipotong dan sisipkan 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 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

Buat tabel baru untuk menyimpan teks yang dipotong dan penyematan vektor:

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

Sisipkan teks yang dipotong dan penyematan vektor ke dalam tabel text_embeddings dengan menggunakan AI_GENERATE_CHUNKS dan 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;

Lihat hasilnya

SELECT *
FROM text_embeddings;