適用於: SQL Server 2025 (17.x) 預覽
AI_GENERATE_EMBEDDINGS
是內建函式,會使用儲存在資料庫中的預先建立 AI 模型定義來建立內嵌專案(向量數位)。
語法
AI_GENERATE_EMBEDDINGS ( source USE MODEL model_identifier [ PARAMETERS optional_json_request_body_parameters ] )
論點
源
任何字元類型的 表達式 (例如 nvarchar、 varchar、 nchar 或 char)。
model_identifier
如需詳細資訊,請參閱 CREATE EXTERNAL MODEL。
optional_json_request_body_parameters
其他參數的有效 JSON 格式清單。 這些參數會附加至 REST 要求訊息本文,再傳送至 EXTERNAL MODEL
的端點位置。 這些參數在端點所支援和接受的內容 EXTERNAL MODEL
上具有可比性。
傳回類型
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
必須使用 sp_configure 在資料庫中啟用。類型的 EXTERNAL MODEL
EMBEDDINGS
,可透過正確的授與、角色和/或許可權來存取。
選擇性參數
中的 optional_json_request_body_parameters
參數AI_GENERATE_EMBEDDINGS
會在端點參數需要新增至內嵌要求訊息的本文時使用。 如果模型定義中定義了該參數,則新增選擇性參數會覆寫運行時間的值。
例如,如果 EXTERNAL MODEL 包含設定為 dimensions
1536 的參數,請在運行時間傳遞 optional_json_request_body_parameters
該參數,並將新的值傳遞如下: json_object('dimensions':755)
, dimensions
則會覆寫模型上的 參數。
傳入 optional_json_request_body_parameters
的值必須是有效的 JSON。
建立內嵌端點
如需建立內嵌端點的詳細資訊,請檢閱 Azure OpenAI、 OpenAI 或 Ollama 的程式。
擴充事件 (XEvent)
AI_GENERATE_EMBEDDINGS
具有可進行疑難解答的擴充事件 (ai_generate_embeddings_summary
)。 其中包含 REST 要求和回應的相關信息,例如狀態代碼、它遇到的任何錯誤、使用的模型名稱,以及內嵌端點所使用的令牌計數。 擴充事件 external_rest_endpoint_summary
包含可用於疑難解答和偵錯 REST 要求的其他資訊。
範例
A。 使用 SELECT 語句建立內嵌
下列範例示範如何使用 函 AI_GENERATE_EMBEDDINGS
式搭配會傳回向量陣列結果的 select 語句。
SELECT id,
AI_GENERATE_EMBEDDINGS(large_text USE MODEL MyAzureOpenAIModel)
FROM myTable;
B. 使用 AI_GENERATE_CHUNKS 建立 SELECT 語句的內嵌
下列範例示範如何使用 AI_GENERATE_EMBEDDINGS
函式搭配 AI_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 = N'FIXED' , chunk_size = 10) 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 '{"dimensions" : 768 }')
FROM myTable;
E. 具有區塊化、AI_GENERATE_EMBEDDINGS和模型建立的完整範例
此範例是使用 建立 CREATE EXTERNAL MODEL 的完整流程,並使用 AI_GENERATE_EMBEDDINGS
AI_GENERATE_CHUNKS 將結果插入具有向量數據類型的數據表。 請記得將 取代 <password>
為有效的密碼。
-- 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;