Gerar incorporações vetoriais com azure_local_ai no Banco de Dados do Azure para Servidor Flexível PostgreSQL (visualização)
Pré-requisitos
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
Habilite as seguintes extensões,
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.