Integrar os recursos de IA do Azure ao Banco de Dados do Azure para PostgreSQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

A extensão azure_ai adiciona a capacidade de usar os LLMs (grandes modelos de linguagem) e criar aplicativos de IA generativa em um banco de dados do servidor flexível do Banco de Dados do Azure para PostgreSQL integrando o poder dos serviços de IA do Azure. A IA generativa é uma forma de inteligência artificial na qual os LLMs são treinados para gerar conteúdo original com base na entrada de linguagem natural. O uso da extensão azure_ai permite que você use os recursos de processamento de consulta de linguagem natural da IA generativa diretamente do banco de dados.

Este tutorial mostra como adicionar recursos avançados de IA a uma instância do servidor flexível do Banco de Dados do Azure para PostgreSQL usando a extensão azure_ai. Ele aborda a integração do Serviço OpenAI do Azure e do serviço de Linguagem de IA do Azure em seu banco de dados usando a extensão.

Pré-requisitos

  • Uma assinatura do Azure – Crie uma gratuitamente.

  • Acesso permitido ao OpenAI do Azure na assinatura do Azure desejada. No momento, o acesso a esse serviço é permitido somente por aplicativo. Você pode solicitar acesso ao Serviço OpenAI do Azure preenchendo o formulário em https://aka.ms/oai/access.

  • Um recurso do OpenAI do Azure com o modelo (versão 2) text-embedding-ada-002 implantado. Este modelo está atualmente disponível apenas em determinadas regiões. Se você não tiver um recurso, o processo de criação de um está documentado no nosso Guia de implantação de recursos do OpenAI do Azure.

  • Um serviço da Linguagem de IA do Azure. Se você não tiver um recurso, poderá criar um recurso de linguagem no portal do Azure seguindo as instruções fornecidas na documentação início rápido para resumo. Use o tipo de preço gratuito (Free F0) para experimentar o serviço e atualizar mais tarde para um nível pago para produção.

  • Uma instância do servidor flexível do Banco de Dados do Azure para PostgreSQL em sua assinatura do Azure. Se você não tiver um recurso, use o portal do Azure ou o guia da CLI do Azure para criar um.

Conectar-se ao banco de dados usando psql no Azure Cloud Shell

Abra o Azure Cloud Shell em um navegador da Web. Selecione Bash como o ambiente e, se solicitado, selecione a assinatura usada para o banco de dados do servidor flexível do Banco de Dados do Azure para PostgreSQL e selecione Criar armazenamento.

Para recuperar os detalhes das conexões do banco de dados:

  1. Navegue até o seu recurso do servidor flexível do Banco de Dados do Azure para PostgreSQL no portal do Azure.

  2. No menu de navegação à esquerda, selecione Conectar em Configurações e copie o bloco Detalhes da conexão.

  3. Cole as linhas de declaração de variável de ambiente copiadas no terminal do Azure Cloud Shell que você abriu acima, substituindo o token {your-password} pela senha definida ao criar o banco de dados.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    

    Conecte-se ao banco de dados usando o utilitário de linha de comando psql inserindo o seguinte no prompt.

    psql
    

Instalar a extensão azure_ai

Extensão de IA do Azure e o OpenAI do Azure

A extensão azure_ai permite integrar o serviço de OpenAI do Azure e os Serviços Cognitivos do Azure ao banco de dados. Para habilitar a extensão em seu banco de dados, siga as etapas abaixo:

  1. Adicione a extensão à lista de permissões conforme descrito em Extensões – Banco de Dados do Azure para PostgreSQL – Servidor Flexível.

  2. Verifique se a extensão foi adicionada com êxito à lista de permissões executando o seguinte do prompt de comando psql:

    SHOW azure.extensions;
    
  3. No banco de dados no qual você planeja usar a extensão azure_ai, instale-a usando o comando CREATE EXTENSION.

    CREATE EXTENSION azure_ai;
    

Inspecionar os objetos contidos na extensão azure_ai

Examinar os objetos contidos na extensão azure_ai pode fornecer uma melhor compreensão dos recursos que ela oferece. Você pode usar o meta-comando \dx do prompt de comando psql para listar os objetos contidos na extensão.

\dx+ azure_ai

A saída do meta-comando mostra que a extensão azure_ai cria três esquemas, várias UDFs (funções definidas pelo usuário) e vários tipos de composição no banco de dados. A tabela a seguir lista os esquemas adicionados pela extensão e descreve cada um.

Esquema Descrição
azure_ai O esquema principal onde reside a tabela de configuração e as UDFs que interagem com ela.
azure_openai Contém as UDFs que habilitam a chamada de um ponto de extremidade do OpenAI do Azure.
azure_cognitive Fornece as UDFs e os tipos de composição relacionados à integração do banco de dados aos Serviços Cognitivos do Azure.

As funções e os tipos estão todos associados a um dos esquemas. Para examinar as funções definidas no esquema azure_ai, use o meta-comando \df, especificando o esquema cujas funções devem ser exibidas. Os comandos \x auto antes do comando \df ativam e desativam automaticamente a exibição expandida para facilitar a exibição da saída do comando no Azure Cloud Shell.

\x auto
\df+ azure_ai.*

A função azure_ai.set_setting() permite definir o ponto de extremidade e os valores críticos para os serviços de IA do Azure. Ela aceita uma chave e o valor para atribuí-la. A função azure_ai.get_setting() fornece uma maneira de recuperar os valores definidos com a função set_setting(). Ela aceita a chave da configuração que você deseja exibir. Para ambos os métodos, a chave deve ser uma das seguintes:

Key Descrição
azure_openai.endpoint Um ponto de extremidade OpenAI com suporte (por exemplo, https://example.openai.azure.com).
azure_openai.subscription_key Uma chave de assinatura para um recurso OpenAI.
azure_cognitive.endpoint Um ponto de extremidade dos Serviços Cognitivos com suporte (por exemplo, https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Uma chave de assinatura para um recurso dos Serviços Cognitivos.

Importante

Como as informações de conexão dos serviços de IA do Azure, incluindo as chaves de API, são armazenadas em uma tabela de configuração no banco de dados, a extensão azure_ai define uma função chamada azure_ai_settings_manager para garantir que essas informações sejam protegidas e acessíveis somente aos usuários atribuídos a essa função. Essa função permite a leitura e gravação de configurações relacionadas à extensão. Somente os superusuários e membros da função azure_ai_settings_manager podem invocar as funções azure_ai.get_setting() e azure_ai.set_setting(). No servidor flexível do Banco de Dados do Azure para PostgreSQL, a função azure_ai_settings_manager é atribuída a todos os usuários administradores.

Gerar inserir de vetor com o OpenAI do Azure

O esquema azure_openai da extensão azure_ai permite o uso OpenAI do Azure para criar inserções de vetor para valores de texto. Usando esse esquema, você pode gerar inserções com o OpenAI do Azure diretamente do banco de dados para criar representações vetoriais de texto de entrada, que podem ser usadas em pesquisas de similaridade de vetor e consumidas por modelos de machine learning.

As inserções são uma técnica de uso de modelos de machine learning para avaliar o quão estreitamente as informações estão relacionadas entre si. Essa técnica permite a identificação eficiente de relações e semelhanças entre dados, permitindo que algoritmos identifiquem padrões e façam previsões precisas.

Definir o ponto de extremidade e a chave do OpenAI do Azure

Antes de usar as funções azure_openai:

  1. Configure a extensão com o ponto de extremidade e a chave de serviço do OpenAI do Azure.

  2. Navegue até o seu recurso do OpenAI do Azure no portal do Azure e selecione o item Chaves e Ponto de Extremidade no Gerenciamento de Recursos no menu esquerdo.

  3. Copie o ponto de extremidade e a chave de acesso. Você pode usar KEY1 ou KEY2. Ter sempre duas chaves permite girar e regenerar chaves com segurança, sem causar interrupção de serviço.

No comando abaixo, substitua os tokens {endpoint} e {api-key} pelos valores recuperados do portal do Azure e execute os comandos do prompt de comando psql para adicionar seus valores à tabela de configuração.

SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');

Verifique as configurações escritas na tabela de configuração:

SELECT azure_ai.get_setting('azure_openai.endpoint');
SELECT azure_ai.get_setting('azure_openai.subscription_key');

A extensão azure_ai agora está conectada à sua conta do OpenAI do Azure e pronta para gerar inserções de vetor.

Preencher o banco de dados com alguns dados de exemplo

Este tutorial usa um pequeno subconjunto do conjunto de dados BillSum, que fornece uma lista de projetos de lei do Congresso dos Estados Unidos e do Estado da Califórnia, para fornecer dados de texto de exemplo para a geração de vetores. O arquivo bill_sum_data.csv que contém esses dados pode ser baixado do repositório GitHub de Exemplos do Azure.

Para hospedar os dados de exemplo no banco de dados, crie uma tabela chamada bill_summaries.

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

Usando o comando COPY do PostgreSQL do prompt de comando psql, carregue os dados de exemplo do CSV na tabela bill_summaries, especificando que a primeira linha do arquivo CSV é uma linha de cabeçalho.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Habilitar o suporte ao vetor

A extensão azure_ai permite que você gere inserções para o texto de entrada. Para permitir que os vetores gerados sejam armazenados junto com o restante dos dados no banco de dados, você deve instalar a extensão pgvector seguindo as diretrizes na documentação habilitar suporte de vetor do banco de dados.

Com o vetor com suporte adicionado ao banco de dados, adicione uma nova coluna à tabela bill_summaries usando o tipo de dados vector para armazenar as inserções dentro da tabela. O modelo text-embedding-ada-002 produz vetores com 1536 dimensões, portanto, você deve especificar 1536 como o tamanho do vetor.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Gerar e armazenar vetores

A tabela bill_summaries agora está pronta para armazenar inserções. Usando a função azure_openai.create_embeddings(), você cria vetores para o campo bill_text e insere-os na coluna bill_vector recém-criada na tabela bill_summaries.

Antes de usar a função create_embeddings(), execute o seguinte comando para inspecioná-la e revisar os argumentos necessários:

\df+ azure_openai.*

A propriedade Argument data types na saída do comando \df+ azure_openai.* revela a lista de argumentos que a função espera.

Argumento Tipo Padrão Descrição
deployment_name text Nome da implantação no estúdio do Serviço OpenAI do Azure que contém o modelo text-embeddings-ada-002.
input text Texto de entrada usado para criar inserções.
timeout_ms integer 3600000 Tempo limite em milissegundos após o qual a operação é interrompida.
throw_on_error boolean true Sinalizador indicando se a função deve, por erro, gerar uma exceção resultando em uma reversão das transações de encapsulamento.

O primeiro argumento é o deployment_name, atribuído quando seu modelo de inserção foi implantado em sua conta do OpenAI do Azure. Para recuperar esse valor, vá para o recurso do OpenAI do Azure no portal do Azure. A partir daí, no menu de navegação à esquerda, em Gerenciamento de Recursos, selecione o item Implantações de modelo para abrir o Estúdio do OpenAI do Azure. No Estúdio do OpenAI do Azure, no guia Implantações, copie o valor do Nome da implantação associado à implantação do modelo text-embedding-ada-002.

Captura de tela da inserção de implantações para integrar a IA.

Usando essas informações, execute uma consulta para atualizar cada registro na tabela bill_summaries, inserindo as inserções de vetor geradas para o campo bill_text na coluna bill_vector usando a função azure_openai.create_embeddings(). Substitua {your-deployment-name} pelo valor do Nome da implantação copiado do guia Implantações do Estúdio do OpenAI do Azure e execute o seguinte comando:

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Execute a consulta a seguir para exibir a inserção gerada para o primeiro registro na tabela. Você pode executar \x primeiro se a saída for difícil de ler.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Cada inserção é um vetor de números de ponto flutuante, de modo que a distância entre duas inserções no espaço do vetor esteja correlacionada com a similaridade semântica entre duas entradas no formato original.

A similaridade de vetor é um método usado para medir o quão semelhantes são dois itens, representando-os como vetores, que são uma série de números. Os vetores geralmente são usados para executar pesquisas usando os LLMs. A similaridade de vetor é comumente calculada usando métricas de distância, como distância euclidiana ou a similaridade de cosseno. A distância euclidiana mede a distância em linha reta entre dois vetores no espaço ndimensional, enquanto a similaridade de cosseno mede o cosseno do ângulo entre dois vetores.

Para habilitar uma pesquisa mais eficiente sobre o campo vector, criando um índice sobre bill_summaries usando a distância de cosseno e o HNSW, que é abreviação de Hierarchical Navigable Small World. O HNSW permite que pgvector use os algoritmos mais recentes baseados em grafo para aproximar consultas de vizinho mais próximo.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Com tudo agora em vigor, agora você está pronto para executar uma consulta de pesquisa de similaridade de cosseno no banco de dados.

Na consulta abaixo, as inserções são geradas para uma pergunta de entrada e, em seguida, convertidas em uma matriz de vetor (::vector), o que permite que ela seja comparada com os vetores armazenados na tabela bill_summaries.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

A consulta usa o operador de vetor <=>, que representa o operador da “distância de cosseno” usado para calcular a distância entre os dois vetores em um espaço multidimensional.

Integrar os Serviços Cognitivos do Azure

As integrações de serviços de IA do Azure incluídas no esquema azure_cognitive da extensão azure_ai fornecem um conjunto avançado de recursos da Linguagem de IA do Azure acessíveis diretamente do banco de dados. As funcionalidades incluem análise de sentimento, detecção de idioma, extração de frases-chave, reconhecimento de entidade e sumarização de texto. O acesso a esses recursos é habilitado por meio do serviço de Linguagem de IA do Azure.

Para examinar os recursos completos de IA do Azure acessíveis por meio da extensão, exiba o artigo Integrar o Banco de Dados do Azure para PostgreSQL – Servidor Flexível aos Serviços Cognitivos do Azure.

Definir o ponto de extremidade e a chave do serviço de Linguagem de IA do Azure

Assim como acontece com as funções azure_openai, para fazer chamadas com êxito nos serviços de IA do Azure usando a extensão azure_ai, você deve fornecer o ponto de extremidade e uma chave para o serviço de Linguagem de IA do Azure. Recupere esses valores navegando até o recurso de serviço de linguagem no portal do Azure, no menu ao lado esquerdo, em Gerenciamento de recursos, selecione o item Chaves e ponto de extremidade. Copie o ponto de extremidade e a chave de acesso. Você pode usar KEY1 ou KEY2.

No comando abaixo, substitua os tokens {endpoint} e {api-key} pelos valores recuperados do portal do Azure e execute os comandos do prompt de comando psql para adicionar seus valores à tabela de configuração.

SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');

Resumir projetos de lei

Para demonstrar alguns dos recursos das funções azure_cognitive da extensão azure_ai, você gera um resumo de cada projeto de lei. O esquema azure_cognitive fornece duas funções para resumir texto, summarize_abstractive e summarize_extractive. A sumarização abstrativa produz um resumo que captura os principais conceitos do texto de entrada, mas pode não usar palavras idênticas. A sumarização extrativa monta um resumo extraindo frases críticas do texto de entrada.

Para usar a capacidade do serviço de Linguagem de IA do Azure de gerar conteúdo novo e original, use a função summarize_abstractive para criar um resumo da entrada de texto. Use o meta-comando \df a partir de psql novamente, desta vez para examinar especificamente a função azure_cognitive.summarize_abstractive.

\df azure_cognitive.summarize_abstractive

A propriedade Argument data types na saída do comando \df azure_cognitive.summarize_abstractive revela a lista de argumentos que a função espera.

Argumento Tipo Padrão Descrição
texto text O texto de entrada a ser resumido.
linguagem text Uma representação ISO 639-1 de duas letras do idioma no qual o texto de entrada é escrito. Verifique o suporte ao idioma para os valores permitidos.
timeout_ms integer 3600000 Tempo limite em milissegundos após o qual a operação é interrompida.
throw_on_error boolean true Sinalizador indicando se a função deve, por erro, gerar uma exceção resultando em uma reversão das transações de encapsulamento.
sentence_count integer 3 O número máximo de sentenças a serem incluídas no resumo gerado.
disable_service_logs boolean falso O serviço de Linguagem registra o texto de entrada por 48 horas apenas para permitir a solução de problemas. Definir essa propriedade para true desabilite o registro em log de entrada e pode limitar nossa capacidade de investigar problemas que ocorrem. Para obter mais informações, consulte as notas de Conformidade e Privacidade dos Serviços Cognitivos em https://aka.ms/cs-compliance e os princípios de IA Responsável da Microsoft em https://www.microsoft.com/ai/responsible-ai.

A função summarize_abstractive requer os seguintes argumentos: azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

A consulta a seguir na tabela bill_summaries usa a função summarize_abstractive para gerar um novo resumo de uma frase para o texto de um projeto de lei, permitindo que você incorpore o poder da IA gerativa diretamente em suas consultas.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

A função também pode ser usada para gravar dados em suas tabelas de banco de dados. Modifique a tabela bill_summaries para adicionar uma nova coluna para armazenar os resumos de uma frase no banco de dados.

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Em seguida, atualize a tabela com os resumos. A função summarize_abstractive retorna uma matriz de texto (text[]). A função array_to_string converte o valor retornado em sua representação de cadeia de caracteres. Na consulta abaixo, o argumento throw_on_error foi definido como false. Essa configuração permite que o processo de sumarização continue se ocorrer um erro.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

Na saída, você pode notar um aviso sobre um documento inválido para o qual uma saída apropriada não pôde ser gerado. Esse aviso é resultado da configuração throw_on_error para false na consulta acima. Se esse sinalizador tivesse sido deixado como o padrão true, consulta falharia e nenhum resumo teria sido gravado no banco de dados. Para exibir o registro que lançou o aviso, execute o seguinte:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Em seguida, consulte a tabela bill_summaries para exibir os novos resumos de uma frase gerados pela extensão azure_ai para os outros registros na tabela.

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusão

Parabéns, você acabou de aprender a usar a extensão azure_ai para integrar os grandes modelos de linguagem e as funcionalidades de IA generativa ao seu banco de dados.