共用方式為


AI_GENERATE_EMBEDDINGS (Transact-SQL)

適用於: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_EMBEDDINGS 是內建函式,會使用儲存在資料庫中的預先建立 AI 模型定義來建立內嵌專案(向量數位)。

語法

Transact-SQL 語法慣例

AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )

論點

任何字元類型的 表達式 (例如 nvarcharvarcharncharchar)。

model_identifier

一個外部 模型 的名稱,定義為 EMBEDDINGS 用來建立嵌入向量陣列的類型。

如需詳細資訊,請參閱 CREATE EXTERNAL MODEL

optional_json_request_body_parameters

其他參數的有效 JSON 格式清單。 這些參數會附加在 REST 請求訊息主體上,然後再傳送到外部模型的端點位置。 這些參數取決於外部模型端點所支持與接受的範圍。

傳回類型

AI_GENERATE_EMBEDDINGS 會傳回單一數據行數據表,其數據列是當做 JSON 傳回之產生的內嵌向量陣列。

傳回格式

傳回 JSON 格式如下所示:

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

備註

先決條件

您必須符合以下先決條件才能使用 AI_GENERATE_EMBEDDINGS

  • 在資料庫上啟用 sp_invoke_external_endpoint ,並使用以下指令:

    EXECUTE sp_configure 'external rest endpoint enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  • 建立該EMBEDDINGS類型的外部模型,透過正確的授權、角色和/或權限存取。

選擇性參數

中的 optional_json_request_body_parameters 參數AI_GENERATE_EMBEDDINGS會在端點參數需要新增至內嵌要求訊息的本文時使用。 如果模型定義中定義了該參數,則新增選擇性參數會覆寫運行時間的值。

例如,若 外部模型 包含設定為 1536 的參數 dimensions ,執行時將該參數 optional_json_request_body_parameters 以新值傳遞,如圖所示: json_object("dimensions":755)dimensions 該參數會被覆寫。

傳入 optional_json_request_body_parameters 的值必須是有效的 JSON。

建立內嵌端點

欲了解更多關於建立嵌入式端點的資訊,請參閱Azure OpenAI在Azure AI Foundry ModelsOpenAIOllama的流程。

擴充事件 (XEvent)

AI_GENERATE_EMBEDDINGS 具有可進行疑難解答的擴充事件 (ai_generate_embeddings_summary)。 它包含關於 REST 請求與回應的資訊,例如狀態碼、遇到的任何錯誤,以及所使用的型號名稱。 擴充事件 external_rest_endpoint_summary 包含可用於疑難解答和偵錯 REST 要求的其他資訊。

範例

A。 使用 SELECT 語句建立內嵌

以下範例展示了如何使用 AI_GENERATE_EMBEDDINGS 這個函式搭配 select 語句,回傳結果成 JSON 陣列。

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

B. 使用 AI_GENERATE_CHUNKS 建立 SELECT 語句的內嵌

以下範例展示了如何使用 AI_GENERATE_EMBEDDINGSAI_GENERATE_CHUNKS 函式,透過 select 語句傳送以指定區塊大小分割的文字,回傳向量陣列結果。

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. 使用數據表更新建立內嵌

下列範例示範如何使用 AI_GENERATE_EMBEDDINGS 函式搭配數據表 update 語句,將向量陣列結果傳回向量數據類型數據行。

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

D. 使用 SELECT 語句和 PARAMETERS 建立內嵌

下列範例示範如何使用 AI_GENERATE_EMBEDDINGS 函式搭配 select 語句,並將選擇性參數傳遞至端點,以傳回向量陣列結果。

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

E. 重試嵌入產生時使用 retry_count 參數選項

如果內嵌呼叫遇到指出暫時問題的 HTTP 狀態代碼,您可以設定要求來自動重試。

要指定重試次數,請在選項中 PARAMETERS 加入以下 JSON。 這個值應該是介於零(0)到十(10含)之間的正整數,且不 NULL可能是。

備註

若查詢中指定值retry_count,則會覆寫外部模型配置中的(若定義)值retry_countAI_GENERATE_EMBEDDINGS

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

F. 具有區塊化、AI_GENERATE_EMBEDDINGS和模型建立的完整範例

以下範例展示了一個端到端的流程,讓你的資料具備 AI 準備能力:

  1. 使用 CREATE EXTERNAL MODEL 註冊並讓你的嵌入模型可存取。

  2. 將資料集拆分成較小的區塊,並 AI_GENERATE_CHUNKS,讓資料能符合模型的上下文視窗,並提升檢索準確度。

  3. 使用 AI_GENERATE_EMBEDDINGS

  4. 將結果插入一個向 量資料型態的表格中。

備註

以有效的密碼取代 <password>

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