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

论据

任何字符类型的表达式(例如 nvarchar、varcharncharchar)。

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 请求的其他信息。

例子

答: 使用 SELECT 语句创建嵌入内容

以下示例展示了如何使用带有 select 语句的 AI_GENERATE_EMBEDDINGS 函数,返回结果为 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. 使用 创建外部模型 注册并使嵌入模型可访问。

  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;