使用 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 OpenAI 和 Azure 认知服务)集成。
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_openai
的 azure_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 和说明,排名从少到少(更类似于更相似)。