探索 Azure OpenAI 架构

已完成

通过将 Azure OpenAI 合并到 PostgreSQL 数据库中,可以创建高度可缩放的 AI 驱动应用。 该集成让你可以使用熟悉的 SQL 语言和 PostgreSQL 的灵活性在数据库层内生成智能解决方案。 无论是自然语言处理、建议系统还是内容生成,Azure OpenAI 都可以为应用程序赋能。

azure_ai 扩展安装的 azure_openai 架构允许连接到 Azure OpenAI 服务实例并与之交互。 该架构支持与 Azure OpenAI 服务的无缝集成,让你可以直接从 PostgreSQL 数据库创建功能强大的生成式 AI 应用程序。

创建嵌入

使用 azure_openai 架构,可以调用 create_embeddings() 函数,该函数从数据库层内生成向量嵌入。 这些嵌入允许高效存储和查询高维向量以及为其编制索引。 该函数可以采用两种形式:

  • azure_openai.create_embeddings(text,text,integer,boolean,integer,integer)
  • azure_openai.create_embeddings(text,text[],integer,integer,boolean,integer,integer)

下表介绍了该函数所需的参数:

参数 类型 默认 说明
deployment_name text Azure OpenAI Studio 中嵌入模型部署的名称。 此名称通常是指 text-embeddings-ada-002 模型的部署。
input texttext[] 为其创建向量嵌入的输入文本(或输入文本数组)。
batch_size integer 100 仅在 input 参数是 text 值的数组时适用。 batch_size 指定数组中要同时处理的记录数。
timeout_ms integer NULL::integer 超时的毫秒数,超过该时间后操作将停止。
throw_on_error boolean true 指示函数是否应在出错时引发异常,从而导致包装事务回滚的标志。
max_attempts integer 1 在发生故障时重新调用 Azure OpenAI 服务的尝试次数。
retry_delay_ms integer 1000 尝试重新调用 Azure OpenAI 服务终结点之前等待的时间(以毫秒为单位)。

配置与 Azure OpenAI 的连接

在使用 azure_openai 函数之前,使用 Azure OpenAI 服务终结点和密钥配置扩展。 以下命令表示用于设置连接到 Azure OpenAI 实例所需的终结点和密钥的查询:

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

然后,可以使用 get_setting() 函数来验证在 azure_ai.settings 配置表中编写的设置:

SELECT azure_ai.get_setting('azure_openai.endpoint');
SELECT azure_ai.get_setting('azure_openai.subscription_key');

使用向量扩展启用向量支持

使用 azure_ai 扩展中的 azure_openai.create_embeddings() 函数可以生成输入文本嵌入。 若要使生成的向量与数据库中的其余数据一起存储,还必须按照在数据库中启用向量支持文档中的指南安装 vector 扩展。

可以使用 CREATE EXTENSION 命令安装 vector 扩展。

CREATE EXTENSION IF NOT EXISTS vector;

生成和存储矢量

在你为 Margie's Travel 开发的 AI 驱动的出租房推荐应用程序中,必须在向数据库添加向量支持后使用 vector 数据类型向目标表添加一个新列,以便将嵌入存储在该表中。 在 listings 表中启用向量,以便能够在执行搜索可用房屋的查询时使用语义搜索功能。 text-embedding-ada-002 模型生成具有 1536 个维度的向量,因此必须指定 1536 作为向量大小。

ALTER TABLE listings
ADD COLUMN description_vector vector(1536);

现在 listings 表已准备好存储嵌入。 使用 azure_openai.create_embeddings() 函数时,你会为 description 字段创建矢量,并将它们插入 listings 表中新创建的 description_vector 列。

UPDATE listings
SET description_vector = azure_openai.create_embeddings('{your-deployment-name}', description);

每个嵌入都是浮点数的向量,因此向量空间中两个嵌入之间的距离与原始格式的两个输入之间的语义相似度有关。