Partilhar via


Integrar recursos de IA do Azure no Banco de Dados do Azure para PostgreSQL

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

A azure_ai extensão adiciona a capacidade de usar grandes modelos de linguagem (LLMs) e criar aplicativos de IA generativa em um banco de dados 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. Usando a azure_ai extensão, você pode usar os recursos da IA generativa para processar consultas de linguagem natural diretamente do banco de dados.

Este artigo mostra a adição de recursos avançados de IA a um servidor flexível do Banco de Dados do Azure para PostgreSQL usando a azure_ai extensão. Ele mostra como você pode integrar o Azure OpenAI e o serviço Azure AI Language em seu banco de dados usando a extensão.

Pré-requisitos

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. Se lhe for pedido, selecione a subscrição que utilizou para a Base de Dados do Azure para base de dados PostgreSQL e, em seguida, selecione Criar armazenamento.

Para recuperar os detalhes da conexão do banco de dados:

  1. No portal do Azure, vá para o seu banco de dados do Azure para servidor flexível PostgreSQL.

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

  3. Cole as linhas de declaração copiadas para variáveis de ambiente no terminal do Azure Cloud Shell. Substitua o {your-password} token pela senha definida quando você criou 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}"
    
  4. Conecte-se ao seu banco de dados usando a ferramenta de linha de comando psql. Digite o seguinte comando no prompt:

    psql
    

Instalar a extensão azure_ai

Você pode usar a extensão para integrar o Azure OpenAI e os azure_ai Serviços Cognitivos do Azure em seu banco de dados. Para obter mais informações, consulte Gerar incorporações vetoriais com o Azure OpenAI no Banco de Dados do Azure para PostgreSQL.

Para habilitar a extensão em seu banco de dados:

  1. Adicione a extensão à sua lista de permissões, conforme descrito em Permitir extensões.

  2. No banco de dados no qual você planeja usar a azure_ai extensão, instale a extensão conforme descrito em Criar extensões.

Inspecione os objetos na extensão azure_ai

Revisar os objetos que a azure_ai extensão contém pode fornecer uma melhor compreensão dos recursos que ela oferece. Você pode usar o \dx meta-comando na psql linha de comandos para listar os objetos na extensão:

\dx+ azure_ai

A saída do metacomando mostra que a azure_ai extensão cria três esquemas, várias funções definidas pelo usuário (UDFs) e vários tipos compostos no banco de dados. A tabela a seguir descreve os esquemas que a extensão adiciona:

Esquema Descrição
azure_ai Fornece o esquema principal onde a tabela de configuração e UDFs para interagir com ela residem.
azure_openai Contém as UDFs que permitem chamar um ponto de extremidade do Azure OpenAI.
azure_cognitive Fornece UDFs e tipos compostos relacionados à integração do banco de dados com os Serviços Cognitivos do Azure.

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

\x auto
\df+ azure_ai.*

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

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

Importante

Como as informações de conexão para serviços de IA do Azure, incluindo chaves de API, são armazenadas em uma tabela de configuração no banco de dados, a azure_ai extensão define uma função chamada azure_ai_settings_manager para ajudar a garantir que essas informações sejam protegidas e acessíveis apenas aos usuários que têm essa função. Essa função permite a leitura e gravação de configurações relacionadas à extensão.

Somente superusuários e membros da azure_ai_settings_manager função podem invocar as azure_ai.get_setting() funções e azure_ai.set_setting() . No Azure Database para PostgreSQL, todos os usuários administradores têm o papel azure_ai_settings_manager.

Gerar incorporações vetoriais com o Azure OpenAI

O azure_ai esquema da azure_openai extensão permite o uso do Azure OpenAI para criar incorporações vetoriais para valores de texto. Usando esse esquema, você pode gerar incorporações com o Azure OpenAI diretamente do banco de dados para criar representações vetoriais de texto de entrada. Essas representações podem ser usadas em pesquisas de semelhança vetorial e consumidas por modelos de aprendizado de máquina.

As incorporações são uma técnica de utilização de modelos de aprendizagem automática para avaliar a proximidade da informação. Esta técnica permite a identificação eficiente de relações e semelhanças entre dados, para que os algoritmos possam identificar padrões e fazer previsões precisas.

Definir o ponto de extremidade e a chave do Azure OpenAI

Antes de usar as azure_openai funções, configure a extensão com o seu endpoint e chave do serviço Azure OpenAI.

  1. No portal do Azure, vá para seu recurso do Azure OpenAI. No menu à esquerda, em Gestão de Recursos, selecione Chaves e Endpoint.

  2. Copie seu endpoint e chave de acesso. Pode utilizar KEY1 ou KEY2. Ter sempre duas chaves permite-lhe rodar e regenerar chaves de forma segura sem causar interrupções no serviço.

  3. No comando a seguir, substitua os {endpoint} tokens e {api-key} por valores recuperados do portal do Azure. Em seguida, execute os comandos no psql prompt de comando 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}');
    
  4. Verifique as definiçõ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 azure_ai extensão agora está conectada à sua conta do Azure OpenAI e pronta para gerar incorporações vetoriais.

Preencher a base de dados com dados de exemplo

Este artigo usa um pequeno subconjunto do conjunto de dados BillSum para fornecer dados de texto de exemplo para gerar vetores. Este conjunto de dados fornece uma lista de projetos de lei do Congresso dos Estados Unidos e do estado da Califórnia. Você pode baixar o bill_sum_data.csv arquivo que contém esses dados do repositório GitHub para 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 PostgreSQL COPY no psql prompt de comando, carregue os dados de exemplo do arquivo CSV na bill_summaries tabela. Especifique 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'

Ativar suporte a vetores

Você pode usar a azure_ai extensão para gerar incorporações para texto de entrada. Para permitir que os vetores gerados sejam armazenados junto com o resto dos seus dados no banco de dados, você deve instalar a pgvector extensão. Siga as orientações na documentação sobre como habilitar o suporte a vetores em seu banco de dados.

Com o suporte a vetores adicionado ao banco de dados, adicione uma nova coluna à bill_summaries tabela usando o vector tipo de dados para armazenar incorporações na tabela. O text-embedding-ada-002 modelo produz vetores com 1.536 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 bill_summaries mesa está agora pronta para armazenar incorporações. Usando a azure_openai.create_embeddings() função, você cria vetores para o bill_text campo e os insere na coluna recém-criada bill_vector na bill_summaries tabela.

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

\df+ azure_openai.*

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

Argumento Tipo Predefinido Descrição
deployment_name text Nome da implantação no portal do Azure AI Foundry que contém o text-embeddings-ada-002 modelo.
input text Texto de entrada usado para criar incorporações.
timeout_ms integer 3600000 Tempo limite em milissegundos, após o qual a operação é interrompida.
throw_on_error boolean true Sinalizador que indica se a função deve, em caso de erro, lançar uma exceção que resulte em uma reversão das transações de encapsulamento.

O primeiro argumento é o deployment_name valor, que foi atribuído quando seu modelo de incorporação foi implantado em sua conta do Azure OpenAI. Para recuperar esse valor:

  1. Vá para o seu recurso do Azure OpenAI no portal do Azure.

  2. No menu à esquerda, em Gerenciamento de Recursos, selecione Implantações de modelo para abrir o portal do Azure AI Foundry.

  3. No portal do Azure AI Foundry, selecione Implantações. No painel Implantações , copie o valor Nome da implantação associado à implantação do text-embedding-ada-002 modelo.

Captura de tela da incorporação de implantações para integração de IA.

Usando essas informações, execute uma consulta para atualizar cada registro na bill_summaries tabela. Insira as incorporações vetoriais geradas para o bill_text campo na bill_vector coluna usando a azure_openai.create_embeddings() função. Substitua {your-deployment-name} pelo valor Nome da implantação copiado do painel Implantações do portal do Azure AI Foundry. Em seguida, 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 incorporaçã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 incorporação é um vetor de números de vírgula flutuante. A distância entre duas incorporações no espaço vetorial está correlacionada com a semelhança semântica entre duas entradas no formato original.

A semelhança vetorial é um método para medir a semelhança de dois itens, representando-os como vetores. Os vetores são uma série de números. Eles são frequentemente usados para realizar pesquisas via LLMs.

A semelhança vetorial é comumente calculada através de métricas de distância, tais como:

  • Distância euclidiana: Mede a distância em linha reta entre dois vetores no espaço n-dimensional.
  • Similaridade cosseno: Mede o cosseno do ângulo entre dois vetores.

Permita uma pesquisa mais eficiente sobre o campo vector criando um índice sobre bill_summaries através da distância do cosseno e *Hierarchical Navigable Small World (HNSW)*. O HNSW permite pgvector usar os mais recentes algoritmos baseados em gráficos para aproximar as consultas do vizinho mais próximo.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Com tudo pronto, você está pronto para executar uma consulta de pesquisa de semelhança cosseno no banco de dados.

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

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. Este operador representa o operador de distância do cosseno utilizado para calcular a distância entre dois vetores num espaço multidimensional.

Integrar os Serviços Cognitivos do Azure

As integrações de serviços de IA do Azure incluídas no azure_cognitive esquema da azure_ai extensão fornecem um conjunto avançado de recursos de linguagem de IA que você pode acessar diretamente do banco de dados. As funcionalidades incluem análise de sentimento, deteção de linguagem, extração de frases-chave, reconhecimento de entidades e resumo de texto. O acesso a esses recursos é habilitado por meio do serviço Azure AI Language.

Para rever as capacidades completas de IA do Azure a que pode aceder através da extensão, consulte Integrar a Base de Dados do Azure para PostgreSQL com os Serviços Cognitivos do Azure.

Definir o ponto de extremidade e a chave do serviço Azure AI Language

Tal como acontece com as azure_openai funções, para efetuar chamadas com êxito nos serviços Azure AI utilizando a extensão azure_ai, tem de fornecer o endereço e uma chave para o seu recurso de serviço de Linguagem do Azure AI.

  1. No portal do Azure, vá para seu recurso de serviço de idioma.

  2. No menu à esquerda, em Gestão de Recursos, selecione Chaves e Endpoint.

  3. Copie seu endpoint e chave de acesso. Pode utilizar KEY1 ou KEY2.

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

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

Resumir contas

Para demonstrar algumas das capacidades das azure_cognitive funções da azure_ai extensão, você pode gerar um resumo de cada fatura. O azure_cognitive esquema fornece duas funções para resumir texto:

  • summarize_abstractive: A sumarização abstrata produz um resumo que captura os principais conceitos do texto de entrada, mas pode não usar palavras idênticas.
  • summarize_extractive: O resumo extrativo monta um resumo extraindo frases críticas do texto de entrada.

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

\df azure_cognitive.summarize_abstractive

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

Argumento Tipo Predefinido Descrição
text text Texto de entrada para resumir.
language text Representação ISO 639-1 de duas letras da língua em que o texto de entrada é escrito. Para valores permitidos, consulte Suporte de idioma para funcionalidades linguísticas.
timeout_ms integer 3600000 Tempo limite em milissegundos, após o qual a operação é interrompida.
throw_on_error boolean true Sinalizador que indica se a função deve, em caso de erro, lançar uma exceção que resulte em uma reversão das transações de encapsulamento.
sentence_count integer 3 Número máximo de frases a incluir no resumo gerado.
disable_service_logs boolean false Configuração que desabilita os logs do serviço de idioma. O serviço de idiomas registra o texto de entrada por 48 horas apenas para permitir a solução de problemas. Definir essa propriedade para true desativar o 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 e os princípios de IA Responsável da Microsoft.

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

A seguinte consulta na tabela bill_summaries utiliza a função summarize_abstractive para gerar um novo resumo de uma frase para o texto de uma proposta de lei. Ele permite que você incorpore o poder da IA generativa 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';

Você também pode usar a função para gravar dados em suas tabelas de banco de dados. Modifique a bill_summaries tabela 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 summarize_abstractive função retorna uma matriz de texto (text[]). A array_to_string função converte o valor de retorno em sua representação de cadeia de caracteres. Na consulta a seguir, o throw_on_error argumento é 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 não foi possível gerar um resumo apropriado. Este aviso resulta da definição throw_on_error para false na consulta anterior. Se deixar esse sinalizador como padrão de true, a consulta falhará e nenhum resumo será gravado no banco de dados. Para exibir o registro que lançou o aviso, execute este comando:

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Em seguida, você pode consultar a bill_summaries tabela para exibir os novos resumos de uma frase que a azure_ai extensão gera 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 como usar a azure_ai extensão para integrar grandes modelos de linguagem e recursos de IA generativa em seu banco de dados.