使用 Azure AI 扩展创建嵌入内容

已完成

若要运行语义搜索,必须将嵌入的查询与搜索项的嵌入进行比较。 azure_ai Azure Database for PostgreSQL 灵活服务器的扩展与 Azure OpenAI 集成,以生成嵌入矢量。

显示“lorem ipsum”输入文本被发送到 Azure OpenAI 嵌入 API 后生成一个数字矢量数组的图示。

azure_ai简介和 Azure OpenAI

适用于 Azure AI 的 Azure Database for PostgreSQL 灵活扩展提供用户定义的函数,用于与 Azure AI 服务(包括 Azure OpenAIAzure 认知服务)集成。

Azure OpenAI 嵌入 API 生成输入文本的嵌入向量。 使用此 API 设置所搜索的所有项的嵌入。 通过 azure_ai 扩展的 azure_openai 架构,可以轻松地从 SQL 调用 API 以生成嵌入内容,无论是初始化项嵌入,还是创建动态嵌入的查询。 然后,这些嵌入可用于执行矢量相似性搜索,或者换句话说,执行语义搜索。

azure_ai 扩展与 Azure OpenAI 配合使用

若要从 PostgreSQL 调用 Azure OpenAI 嵌入 API,需要启用和配置 azure_ai 扩展、授予对 Azure OpenAI 的访问权限以及部署 Azure OpenAI 模型。 有关详细信息,请参阅 Azure Database for PostgreSQL 灵活服务器文档中的 Azure OpenAI

环境准备就绪并列出扩展后,请运行以下 SQL:

/* Enable the extension. */
CREATE EXTENSION azure_ai;

还需要配置 OpenAI 服务资源的 终结点和访问密钥

SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');

配置 Azure OpenAI 后 azure_ai ,提取和存储嵌入是在 SQL 查询中调用函数的简单事项。 假设具有description列和listing_vector列的表listings,可以使用以下查询为所有列表生成并存储嵌入内容。 替换为 {your-deployment-name} 所创建的模型的 Azure OpenAI Studio 中的 部署名称

UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;

listing_vector矢量列的维度数必须与语言模型生成的维度数相同。

若要查看文档嵌入,请运行以下查询:

SELECT listing_vector FROM listings LIMIT 1;

结果是浮点数的向量。 可以首先运行 \x ,以使输出更易于阅读。

动态生成查询嵌入

为要搜索的文档嵌入内容后,可以运行语义搜索查询。 为此,还需要为查询文本生成嵌入内容。

扩展 azure_openaiazure_ai 架构允许在 SQL 中生成嵌入内容。 例如,若要查找其文本与查询“在可步行邻里查找我的位置”最语义上相似的前三个列表,请运行以下 SQL:

SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;

运算符 <=> 计算两个向量之间的 余弦距离 ,即语义相似性指标。 向量越接近,语义上越相似:向量越远,语义上就越不同。

运算符 ::vector 将生成的嵌入转换为 PostgreSQL 矢量数组。

查询返回前三个列表 ID 和说明,排名从少到少(更类似于更相似)。