Ler em inglês

Partilhar via


Gerar incorporações vetoriais no Banco de Dados do Azure para PostgreSQL - Servidor flexível com LLM implantado localmente (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. Você pode habilitar a extensão vetorial , pois ela fornece funcionalidade para armazenar e indexar eficientemente incorporações de texto em seu banco de dados.

Ativar a extensão

Antes de habilitar azure_local_ai em sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisa permitir a azure_local_ai extensão conforme descrito em permitir uma extensão.

Importante

A hospedagem de modelos de linguagem no banco de dados requer um grande espaço de memória. Para dar suporte a esse requisito, azure_local_ai só há suporte em SKUs de VM do Azure otimizadas para memória com um mínimo de 4 vCores. Se você estiver usando uma VM que não atenda aos requisitos mínimos, a azure_local_ai extensão não aparecerá na lista de valores permitidos para o azure.extensions parâmetro server.

Uma vez que a extensão é permitida, você pode seguir as instruções fornecidas em criar extensões para instalar a extensão em cada banco de dados de onde você deseja usá-la.

Nota

Habilitar a IA Local do Azure 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.

A instalação da extensão azure_local_ai cria um esquema chamado azure_local_ai no qual a extensão armazena tabelas, funções e quaisquer outros objetos relacionados ao SQL necessários para implementar e expor sua funcionalidade.

Importante

Você pode habilitar a extensão vetorial, pois ela é necessária para armazenar incorporações de texto em seu banco de dados PostgreSQL.

Funções fornecidas pela extensão

A azure_local_ai extensão 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

Essas funções podem ser exibidas usando o seguinte meta-comando psql:

\df azure_local_ai.*

azure_local_ai.create_embeddings

A azure_local_ai extensão 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.

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 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 no momento. Consulte 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 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.

Exemplos

Criar incorporações a partir de textos existentes

A seguir está um exemplo que pode ser usado em seu próprio ambiente para testar a geração de incorporação 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 após a inserção de novo texto

A seguir está um exemplo que pode ser usado em seu próprio ambiente para testar a geração de incorporação 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;