Gerar incorporações de vetores no Banco de Dados do Azure para PostgreSQL com Servidor Flexível com LLMs implantados localmente (Versão Prévia)
Pré-requisitos
Uma instância do Banco de Dados do Azure para PostgreSQL – Servidor Flexível em execução em uma SKU de VM otimizada para memória. Saiba mais sobre as VMs do Azure otimizadas para memória aqui: Tamanhos de VM do Azure – Memória – Máquinas Virtuais do Azure
Talvez você queira habilitar a extensão de vetor, já que ela fornece a funcionalidade de armazenar e indexar as incorporações de texto no seu banco de dados com eficiência.
Habilitar a extensão
Antes de poder habilitar o azure_local_ai na sua instância do Banco de Dados do Azure para PostgreSQL com Servidor Flexível, você precisará incluir a extensão azure_local_ai
na lista de permissões, conforme descrito em permitir uma extensão.
Importante
A hospedagem de modelos de idioma no banco de dados requer um grande volume de memória. Para dar suporte a esse requisito, azure_local_ai
só tem suporte nos SKUs de VM do Azure com otimização de memória e um mínimo de 4 vCores.
Se você estiver usando uma VM que não atenda aos requisitos mínimos, a extensão azure_local_ai
aparecerá na lista de valores permitidos para o parâmetro azure.extensions
do servidor.
Após a extensão ser incluída na lista de permissões, você poderá seguir as instruções fornecidas em criar extensões para instalar a extensão em cada banco de dados a partir do qual você quiser usá-la.
Observação
Habilitar a IA do Azure Local implantará o modelo multilingual-e5-small na sua instância do Banco de Dados do Azure para PostgreSQL com Servidor Flexível. A documentação vinculada fornece os termos de licenciamento da equipe do e5. Outros modelos de código aberto de terceiros podem ficar disponíveis para instalação continuamente.
Instalar a extensão azure_local_ai
cria um esquema chamado azure_local_ai
, em que a extensão armazena tabelas, funções e quaisquer outros objetos relacionados ao SQL necessários para implementar e expor sua funcionalidade.
Importante
Você talvez queira habilitar a extensão de vetor, já que ela é necessária para armazenar incorporações de texto no seu banco de dados PostgreSQL.
Funções fornecidas pela extensão
A extensão azure_local_ai
fornece um conjunto de funções. Essas funções permitem que você crie inserções de vetores a partir de dados de texto, facilitando o desenvolvimento de aplicativos de IA generativa. A extensão oferece funções para criar inserções, obter configurações e muito mais. Ao usar essas funções, você pode simplificar o processo de desenvolvimento e reduzir a latência, eliminando a necessidade de chamada à API remotas adicionais para modelos de inserção de IA hospedados fora do limite do PostgreSQL.
Esquema | Nome | Tipos de dados de resultado | Tipos de dados do argumento |
---|---|---|---|
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 |
Essas funções podem ser exibidas usando o seguinte metacomando psql:
\df azure_local_ai.*
azure_local_ai.create_embeddings
A extensão azure_local_ai
permite que você crie e atualize incorporações no formato escalar quanto 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 inserção de texto invocado para criar a inserção.
input
text
ou text[]
único texto ou matriz de textos, dependendo da sobrecarga da função usada, para a qual as inserções são criadas.
batch_size
bigint DEFAULT 128
número de registros a serem processados por vez (disponível apenas 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.
azure_local_ai.get_setting
Usado para obter valores atuais de opções de configuração.
SELECT azure_local_ai.get_setting(key TEXT)
azure_local_ai
dá suporte à revisão dos parâmetros de configuração do pool de threads do ONNX Runtime dentro do Serviço ONNX Runtime. As alterações não são permitidas no momento. Consulte o Ajuste de desempenho do ONNX Runtime.
Argumentos
Chave
Os valores válidos 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 intraoperacionais o máximo possível, pois isso melhora muito a taxa de transferência geral (todos os CPUs disponíveis por padrão).inter_op_parallelism
: define o número total de threads usados para computar vários operadores em paralelo pelo pool de threads do ONNX Runtime. Por padrão, definimos como o thread mínimo possível, que é 1. Aumentar esse número geralmente prejudica o desempenho devido às frequentes trocas de contexto entre threads.spin_control
: alterna a rotação do pool de threads do ONNX Runtime para solicitações. Quando desabilitado, ele usa menos CPU e, portanto, causa mais latência. Por padrão, é definido como true (habilitado).
Tipo de retorno
TEXT
representando o valor atual da configuração selecionada.
Exemplos
Criar incorporações a partir de textos existentes
Veja abaixo alguns exemplos que podem ser usados no seu próprio ambiente para testar a geração de incorporações com o modelo multilingual-e5 implantado localmente.
-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now());
--Insert data into the docs table
INSERT INTO documents(doc_contents) 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 documents
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_contents)::vector) STORED; -- TEXT string sent to local model
--View floating point entries in the doc_vector column
SELECT doc_vector FROM documents;
-- Add a single record to the documents table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO documents(doc_contents) VALUES
('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');
--View all document entries, their contents, embeddings and last time the row was updated
SELECT doc_contents, doc_vector, last_update FROM documents;
-- The following command leverages the overload of azure_local_ai.create_embeddings function which accepts and array of TEXT
-- and produces a table for which each row contains the embedding of one element in the input array
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.']);
Gerar incorporações mediante a inserção de um novo texto
Veja abaixo alguns exemplos que podem ser usados no seu próprio ambiente para testar a geração de incorporações com o modelo multilingual-e5 implantado localmente.
-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now(), doc_vector vector(384) GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED);
-- Insert data into the documents table
INSERT INTO documents(doc_contents) 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_documents AS (
SELECT doc_id, doc_contents, doc_vector FROM documents
),
target_documents AS (
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') doc_vector
)
SELECT all_documents.doc_id, all_docs.doc_contents , 1 - (all_documents.doc_vector::vector <=> target_documents.doc_vector::vector) AS similarity
FROM target_documents, all_documents
ORDER BY similarity DESC
LIMIT 2;
Conteúdo relacionado
- Integrar o Banco de Dados do Azure para PostgreSQL - Servidor Flexível com os Serviços Cognitivos do Azure.
- Integrar o Banco de Dados do Azure para PostgreSQL aos Serviços do Azure Machine Learning.
- Gerar inserções de vetores com o OpenAI do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- Extensão de IA do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- IA generativa com o Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- Sistema de Recomendação com Banco de Dados do Azure para PostgreSQL - Servidor Flexível e OpenAI do Azure.
- Pesquisa Semântica com Banco de Dados do Azure para PostgreSQL - e OpenAI do Azure.
- Habilitar e usar o pgvector no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.