Partilhar via


Gerar incorporações vetoriais com azure_local_ai no Banco de Dados do Azure para Servidor Flexível PostgreSQL (visualização)

Pré-requisitos

  1. Um Banco de Dados do Azure para instância do Servidor Flexível PostgreSQL em execução em uma SKU de VM otimizada para memória. Saiba mais sobre VMs otimizadas para memória do Azure aqui: Tamanhos de VM do Azure - Memória - Máquinas Virtuais do Azure

  2. Habilite as seguintes extensões,

    1. vetor

    2. azure_local_ai

Para obter mais informações sobre como habilitar extensões no Banco de Dados do Azure para PostgreSQL – Servidor Flexível, consulte Como habilitar extensões no Banco de Dados do Azure para PostgreSQL.

Nota

Habilitar a visualização do Azure Local AI implantará o modelo multilíngue-e5-small em seu Banco de Dados do Azure para a instância do Servidor Flexível PostgreSQL. A documentação vinculada fornece os termos de licenciamento da equipe do e5. Modelos de código aberto de terceiros adicionais podem ficar disponíveis para instalação contínua.

Funções fornecidas pela extensão azure_local_ai

A extensão azure_local_ai fornece um conjunto de funções. Essas funções permitem criar incorporações vetoriais a partir de dados de texto, facilitando o desenvolvimento de aplicativos de IA generativa. A extensão oferece funções para criar incorporações, obter configurações e muito mais. Usando essas funções, você pode simplificar o processo de desenvolvimento e reduzir a latência, eliminando a necessidade de chamadas de API remotas adicionais para modelos de incorporação de IA hospedados fora do limite do PostgreSQL.

Esquema Nome Tipo de dados de resultado Tipos de dados de argumento
azure_local_ai create_embeddings TABELA(incorporação real[]) model_uri texto, entradas text[], batch_size bigint DEFAULT 128, timeout_ms inteiro DEFAULT 3600000
azure_local_ai create_embeddings reais[] model_uri texto, texto de entrada timeout_ms inteiro DEFAULT 3600000
azure_local_ai get_setting jsonb chaves text[] DEFAULT ARRAY[]::text[], timeout_ms inteiro DEFAULT 3600000
azure_local_ai get_setting texto texto chave, timeout_ms inteiro DEFAULT 3600000
azure_local_ai model_metadata jsonb model_uri texto

Estes podem ser exibidos através do comando PSQL,

\df azure_local_ai.*

azure_local_ai.create_embeddings

A extensão azure_local_ai permite criar e atualizar incorporações em formato escalar e em lote, invocando o LLM implantado localmente.

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);

Argumentos

model_uri

text Nome do modelo de incorporação de texto invocado para criar a incorporação.

input

text ou text[] texto único ou matriz de textos, dependendo da sobrecarga da função usada, para a qual as incorporações são criadas.

batch_size

bigint DEFAULT 128 número de registos a processar de cada vez (apenas disponível para a sobrecarga da função para a qual o parâmetro input é do tipo text[]).

timeout_ms

integer DEFAULT 3600000 tempo limite em milissegundos após o qual a operação é interrompida.

Use o azure_local_ai e o modelo multilingue-e5-small implantado localmente para criar incorporações e armazená-las como vetores

Abaixo estão exemplos que podem ser usados em seu próprio ambiente para testar a geração de incorporação com o modelo multilingual-e5 implantado localmente.

--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.']);

Atualizar incorporações após a inserção

Abaixo estão exemplos que podem ser usados em seu próprio ambiente para testar a geração de incorporação com o modelo multilingual-e5 implantado localmente.

-- 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;

Configuração do ONNX Runtime

azure_local_ai.get_setting

Usado para obter valores atuais de opções de configuração.

SELECT azure_local_ai.get_setting(key TEXT)

A extensão azure_local_ai suporta a revisão dos parâmetros de configuração do pool de threads do ONNX Runtime dentro do ONNX Runtime Service. Alterações não são permitidas neste momento. Consulte Ajuste de desempenho do ONNX Runtime.

Argumentos

Chave

Os valores válidos para o key são:

  • intra_op_parallelism: Define o número total de threads usados para paralelizar um único operador pelo pool de threads do ONNX Runtime. Por padrão, maximizamos o número de threads intra ops tanto quanto possível, pois melhora muito a taxa de transferência geral (todas as cpus disponíveis por padrão).
  • inter_op_parallelism: Define o número total de threads usados para calcular vários operadores em paralelo pelo pool de threads do ONNX Runtime. Por padrão, definimos o thread mínimo possível, que é 1. Aumentá-lo muitas vezes prejudica o desempenho devido a frequentes alternâncias de contexto entre threads.
  • spin_control: Alterna a rotação do pool de threads do ONNX Runtime para solicitações. Quando desativado, ele usa menos cpu e, portanto, causa mais latência. Por padrão, ele é definido como true (habilitado).

Tipo de retorno

TEXT representando o valor atual da configuração selecionada.