你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Database for PostgreSQL 灵活服务器上使用 azure_local_ai 生成矢量嵌入项(预览版)

先决条件

  1. 在内存优化的 VM SKU 上运行的 Azure Database for PostgreSQL 灵活服务器实例。 在此处详细了解 Azure 内存优化 VM:Azure VM 大小 - 内存 - Azure 虚拟机

  2. 启用以下扩展,

    1. vector

    2. azure_local_ai

有关在 Azure Database for PostgreSQL 灵活服务器中启用扩展的详细信息,请参阅如何在 Azure Database for PostgreSQL 中启用扩展

注意

启用 Azure 本地 AI 预览版会将 multilingual-e5-small 模型部署到 Azure Database for PostgreSQL 灵活服务器实例。 链接的文档提供了来自 e5 团队的许可条款。 其他第三方开放源代码模型可能会持续地可供安装。

azure_local_ai 扩展提供的函数

azure_local_ai 扩展提供了一组函数。 使用这些函数,你可以从文本数据创建矢量嵌入,从而更轻松地开发生成式 AI 应用程序。 该扩展提供了用于创建嵌入的函数、用于获取设置的函数,以及其他函数。 使用这些函数,你无需对托管在 PostgreSQL 边界之外的 AI 嵌入模型进行额外的远程 API 调用,因此可以简化开发过程并降低延迟。

架构 名称 结果数据类型 参数数据类型
azure_local_ai create_embeddings TABLE(embedding real[]) model_uri text, inputs text[], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000
azure_local_ai create_embeddings real[] model_uri text, input text, timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting jsonb keys text[] DEFAULT ARRAY[]::text[], timeout_ms integer DEFAULT 3600000
azure_local_ai get_setting text key text, timeout_ms integer DEFAULT 3600000
azure_local_ai model_metadata jsonb model_uri text

这些项可以通过 PSQL 命令显示,

\df azure_local_ai.*

azure_local_ai.create_embeddings

azure_local_ai 扩展允许你以标量和批处理格式创建和更新嵌入,调用本地部署的 LLM。

azure_local_ai.create_embeddings(model_uri text, input text, batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);
azure_local_ai.create_embeddings(model_uri text, array[inputs [text]], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);

参数

model_uri

调用后可以创建嵌入项的文本嵌入模型的 text 名称。

input

texttext[] 单个文本或文本数组,具体取决于为其创建嵌入的所用函数的重载。

batch_size

bigint DEFAULT 128 一次要处理的记录数(仅适用于参数 inputtext[] 类型的函数的重载)。

timeout_ms

操作停止之前的 integer DEFAULT 3600000 超时(以毫秒为单位)。

使用 azure_local_ai 和本地部署的 multilingual-e5-small 模型来创建嵌入项并将其存储为矢量

下面是你可以在自己的环境中使用的示例,它们用于测试使用本地部署的 multilingual-e5 模型进行的嵌入项生成。

--Create docs table
CREATE TABLE docs(doc_id int generated always as identity primary key, doc text not null, embedding float4[], last_update timestamptz default now());

--Insert data into the docs table
INSERT INTO docs(doc) VALUES ('Create in-database embeddings with azure_local_ai extension.'),
                             ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
                             ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
                             ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
                             ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');


-- Add a vector column and generate vector embeddings from locally deployed model
ALTER TABLE docs
ADD COLUMN doc_vector vector(384) -- multilingual-e5 embeddings are 384 dimensions
GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
select doc_vector from docs;

-- Add a single record to the docs table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO docs(doc) VALUES ('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');

--View all doc entries and their doc_vector column
select doc, doc_vector, last_update from docs;

-- Simple array embedding
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', array['Recommendation System with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI.', 'Generative AI with Azure Database for PostgreSQL - Flexible Server.']);

在插入时更新嵌入项

下面是你可以在自己的环境中使用的示例,它们用于测试使用本地部署的 multilingual-e5 模型进行的嵌入项生成。

-- Update embeddings upon insertion

-- create table
create table docs(doc_id int generated always as identity primary key, doc text not null, last_update timestamptz default now(), embedding float4[] 
	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc)) STORED);

--Insert data into the docs table
INSERT INTO docs(doc) VALUES ('Create in-database embeddings with azure_local_ai extension.'),
                             ('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
                             ('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
                             ('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
                             ('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');


--Query embedding text, list results by descending similarity score
with all_docs as (
 select doc_id, doc, embedding
  from docs
), target_doc as (
 select azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') embedding
)
select all_docs.doc_id, all_docs.doc , 1 - (all_docs.embedding::vector <=> target_doc.embedding::vector) as similarity
 from target_doc, all_docs
 order by similarity desc
 limit 2;

ONNX 运行时配置

azure_local_ai.get_setting

用于获取配置选项的当前值。

SELECT azure_local_ai.get_setting(key TEXT)

azure_local_ai 扩展支持在 ONNX 运行时服务中查看 ONNX 运行时线程池的配置参数。 目前不允许进行更改。 请参阅 ONNX 运行时性能优化

参数

密钥

key 的有效值为:

  • intra_op_parallelism:设置由 ONNX 运行时线程池用来并行化单个运算符的线程的总数。 默认情况下,我们会尽可能最大化操作内线程的数量,因为它可以大大提高整体吞吐量(默认情况下所有可用的CPU)。
  • inter_op_parallelism:设置由 ONNX 运行时线程池用来并行计算多个运算符的线程的总数。 默认情况下,我们将其设置为最小可能线程数,即 1。 由于线程之间存在频繁的上下文切换,增加它通常会损害性能。
  • spin_control:切换 ONNX 运行时线程池的请求旋转。 禁用时,它使用较少的 CPU,因此会导致更高的延迟。 它默认设置为 true(启用)。

返回类型

TEXT 表示所选设置的当前值。