Bagikan melalui


AI_GENERATE_EMBEDDINGS (Transact-SQL)

Berlaku untuk: SQL Server 2025 (17.x) Database SQL Azure SQL databasedi Microsoft Fabric

AI_GENERATE_EMBEDDINGS adalah fungsi bawaan yang membuat penyematan (array vektor) menggunakan definisi model AI yang 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 jenis karakter apa pun (misalnya, 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. Parameter ini ditambahkan ke isi pesan permintaan REST sebelum dikirim 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

Prasyarat

Anda harus memenuhi prasyarat berikut untuk menggunakan AI_GENERATE_EMBEDDINGS:

  • Aktifkan sp_invoke_external_endpoint pada database, dengan perintah berikut:

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • Buat model eksternal dari jenis tersebut EMBEDDINGS , yang dapat diakses melalui pemberian, peran, dan/atau izin yang benar.

Parameter opsional

Parameter optional_json_request_body_parameters di AI_GENERATE_EMBEDDINGS digunakan ketika parameter titik akhir perlu ditambahkan ke isi pesan permintaan penyematan. Menambahkan parameter opsional akan mengambil alih nilai pada runtime jika parameter tersebut ditentukan dalam definisi model.

Misalnya, jika model eksternal berisi parameter untuk dimensions diatur ke 1536, dengan meneruskan parameter tersebut di optional_json_request_body_parameters runtime dengan nilai baru seperti yang terlihat di sini: json_object("dimensions":755), dimensions parameter pada model ditimpa.

Nilai yang diteruskan ke optional_json_request_body_parameters harus JSON yang valid.

Membuat titik akhir penyematan

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

Acara yang Diperpanjang (XEvent)

AI_GENERATE_EMBEDDINGS memiliki peristiwa yang diperluas (ai_generate_embeddings_summary) yang dapat diaktifkan untuk pemecahan masalah. Ini berisi informasi tentang permintaan dan respons REST seperti kode status, kesalahan apa pun yang ditemui, dan nama model yang digunakan. Kejadian external_rest_endpoint_summary yang diperluas berisi informasi tambahan yang dapat untuk 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.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS TRY_CONVERT (JSON, N'{"dimensions":768}'))
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.

SELECT id,
       AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel PARAMETERS TRY_CONVERT (JSON, N'{"retry_count":10}'))
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 menggunakan Azure OpenAI API Key:

  1. Gunakan CREATE EXTERNAL MODEL untuk mendaftar dan membuat model penyematan Anda 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 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 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)
);

Masukkan teks yang dipotong dan penyematan vektor ke dalam tabel text_embeddings 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;