Partilhar via


Integrar recursos de IA do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível

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 generativos em um banco de dados de 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 azure_ai extensão permite que você use os recursos de processamento de consultas em linguagem natural da IA generativa diretamente do banco de dados.

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

Pré-requisitos

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

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

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

  1. Navegue até o recurso de 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 {your-password} token 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 seu banco de dados usando o utilitário de linha de comando psql digitando o seguinte no prompt.

    psql
    

Instalar a azure_ai extensão

Extensão Azure AI e OpenAI

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

  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 extensão, instale-a azure_ai conforme descrito em Criar extensões

Inspecione os objetos contidos na azure_ai extensão

Revisar os objetos contidos na azure_ai extensão pode fornecer uma melhor compreensão dos recursos que ela oferece. Você pode usar o \dx metacomando no psql prompt de comando para listar os objetos contidos 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 abaixo lista os esquemas adicionados pela extensão e descreve cada um.

Esquema Description
azure_ai O esquema principal onde residem a tabela de configuração e UDFs para interagir com ela.
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 azure_ai funções definidas no esquema, use o \df metacomando, especificando 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.*

A azure_ai.set_setting() função permite 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 definidos com a set_setting() função. Ele aceita a chave da configuração que você deseja visualizar. Para ambos os métodos, a chave deve ser uma das seguintes:

Chave Description
azure_openai.endpoint Um endpoint OpenAI suportado (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 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 garantir que essas informações sejam protegidas e acessíveis apenas 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 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 Banco de Dados do Azure para servidor flexível PostgreSQL, todos os usuários administradores recebem a azure_ai_settings_manager função.

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, que 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, permitindo que os algoritmos identifiquem padrões e façam previsões precisas.

Definir o ponto de extremidade e a chave do Azure OpenAI

Antes de usar as azure_openai funções:

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

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

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

No comando abaixo, substitua os {endpoint} tokens e {api-key} pelos valores recuperados do portal do Azure e, em seguida, execute os comandos a psql partir da linha de comandos para adicionar os 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 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 tutorial usa um pequeno subconjunto do conjunto de dados BillSum, que fornece uma lista de projetos de lei estaduais do Congresso dos Estados Unidos e da Califórnia, para fornecer dados de texto de exemplo para gerar vetores. O bill_sum_data.csv arquivo 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 PostgreSQL COPY no psql prompt de comando, carregue os dados de exemplo do CSV na bill_summaries tabela, 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'

Ativar suporte a vetores

A azure_ai extensão permite gerar incorporações para 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 pgvector extensão seguindo as orientações em habilitar suporte a vetores na documentação do banco de dados .

Com o vetor suportado adicionado ao seu 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 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 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 Type Predefinido Description
deployment_name text Nome da implantação no estúdio OpenAI do Azure 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 verdadeiro Sinalizador que indica se a função deve, em caso de erro, lançar uma exceção resultando em uma reversão das transações de encapsulamento.

O primeiro argumento é o , atribuído quando seu modelo de incorporação foi implantado deployment_nameem sua conta do Azure OpenAI. Para recuperar esse valor, vá para seu recurso do Azure OpenAI 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 Azure OpenAI Studio. No Azure OpenAI Studio, na guia 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, inserindo as incorporações vetoriais geradas para o bill_text campo na coluna usando a bill_vector azure_openai.create_embeddings() função. Substitua {your-deployment-name} pelo valor Nome da implantação copiado da guia Implantações do Azure OpenAI Studio 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 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 ponto flutuante, de tal forma que 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 usado para medir a semelhança de dois itens, representando-os como vetores, que são séries de números. Os vetores são frequentemente usados para realizar pesquisas usando LLMs. A semelhança vetorial é comumente calculada usando métricas de distância, como distância euclidiana ou semelhança de cosseno. A distância euclidiana mede a distância em linha reta entre dois vetores no espaço n-dimensional, enquanto a semelhança cosseno mede o cosseno do ângulo entre dois vetores.

Para permitir uma pesquisa mais eficiente no campo, criando um índice sobre bill_summaries o uso da vector distância cosseno e HNSW, que é a abreviação de Hierarchical Navigable Small World. 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 abaixo, as incorporações são geradas para uma pergunta de entrada e, em seguida, convertidas para uma matriz vetorial (::vector), o que permite compará-la 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 vetorial, que representa o operador "distância cosseno" usado para calcular a distância entre 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 azure_cognitive esquema da azure_ai extensão fornecem um conjunto avançado de recursos de linguagem de IA acessíveis 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 acessíveis através da extensão, consulte Integrar a Base de Dados do Azure para PostgreSQL - Servidor Flexível 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 de IA do Azure utilizando a azure_ai extensão, tem de fornecer o ponto de extremidade e uma chave para o seu serviço de Linguagem de IA do Azure. Recupere esses valores navegando até seu recurso de serviço de idioma no portal do Azure, no menu à esquerda/mão, em Gerenciamento de Recursos, selecione Chaves e item de ponto de extremidade . Copie seu endpoint e chave de acesso. Pode utilizar KEY1 ou KEY2.

No comando abaixo, substitua os {endpoint} tokens e {api-key} pelos valores recuperados do portal do Azure e, em seguida, execute os comandos a psql partir da linha de comandos para adicionar os 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 contas

Para demonstrar algumas das capacidades das azure_cognitive funções da azure_ai extensão, você gera um resumo de cada fatura. O azure_cognitive esquema fornece duas funções para resumir texto summarize_abstractive e summarize_extractive. A sumarização abstrata produz um resumo que captura os principais conceitos do texto de entrada, mas pode não usar palavras idênticas. 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. Use o \df meta-comando de psql novo, desta vez para olhar especificamente para a azure_cognitive.summarize_abstractive função.

\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 Type Predefinido Description
texto text O texto de entrada para resumir.
idioma 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 valores permitidos.
timeout_ms integer 3600000 Tempo limite em milissegundos após o qual a operação é interrompida.
throw_on_error boolean verdadeiro Sinalizador que indica se a função deve, em caso de erro, lançar uma exceção resultando em uma reversão das transações de encapsulamento.
sentence_count integer 3 O número máximo de frases a incluir no resumo gerado.
disable_service_logs boolean false 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 Notas de conformidade e privacidade dos serviços cognitivos em e Princípios de IA responsável da https://aka.ms/cs-compliance Microsoft em https://www.microsoft.com/ai/responsible-ai.

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

A consulta a bill_summaries seguir na tabela usa a summarize_abstractive função para gerar um novo resumo de uma frase para o texto de um projeto de lei, permitindo 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';

A função também pode ser usada 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 abaixo, o throw_on_error argumento 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 não foi possível gerar um resumo apropriado. Este aviso resulta da configuração throw_on_error para false na consulta acima. Se esse sinalizador fosse deixado para o padrão de , a consulta falharia e nenhum resumo teria sido gravado no banco de truedados. 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, você pode consultar a bill_summaries tabela para exibir os novos resumos de uma frase gerados pela azure_ai extensão 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 azure_ai extensão para integrar grandes modelos de linguagem e recursos de IA generativa em seu banco de dados.