探索 Azure OpenAI 架构

已完成

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

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

创建嵌入

可以调用create_embeddings()函数来生成矢量嵌入,该生成是在数据库层中的azure_openai架构下进行的。 这些嵌入允许高效存储、索引和查询高维向量。 该函数可以采用两种形式:

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

下表描述了函数预期的参数:

论点 类型 违约 DESCRIPTION
部署名称 text Azure OpenAI 工作室中嵌入模型部署的名称。 此名称通常指 text-embeddings-ada-002 模型的部署。
输入 texttext[] 为其创建矢量嵌入的输入文本(或输入文本数组)。
批处理大小 integer 100 仅适用于input参数为text值的数组时。 batch_size 指定要同时处理的数组中的记录数。
timeout_ms integer NULL::integer 超时的毫秒数,超过该时间后操作将停止。
throw_on_error boolean true 指示函数是否应在出错时引发异常,从而导致包装事务回滚的标志。
最大尝试次数 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_openai.create_embeddings() 中的 azure_ai 函数允许为输入文本生成嵌入内容。 若要使生成的向量与数据库中的其余数据一起存储,还必须按照数据库文档中启用向量支持的指南安装vector扩展。

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

CREATE EXTENSION IF NOT EXISTS vector;

生成和存储矢量

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

ALTER TABLE listings
ADD COLUMN description_vector vector(1536);

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

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

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