Compartilhar via


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

  1. 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

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