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
Uma assinatura do Azure - Crie uma gratuitamente.
Acesso concedido ao Azure OpenAI na subscrição pretendida do Azure. Atualmente, o acesso a este serviço é concedido pelo aplicativo. Você pode solicitar acesso ao Azure OpenAI preenchendo o formulário em https://aka.ms/oai/access.
Um recurso OpenAI do Azure com o
text-embedding-ada-002
modelo (Versão 2) implantado. Atualmente, este modelo só está disponível em determinadas regiões. Se você não tiver um recurso, o processo de criação de um está documentado no guia de implantação de recursos do Azure OpenAI.Um serviço de linguagem de IA do Azure. Se você não tiver um recurso, poderá criar um recurso de idioma no portal do Azure seguindo as instruções fornecidas no documento de início rápido para resumo . Você pode usar o nível de preço gratuito (
Free F0
) para experimentar o serviço e atualizar posteriormente para um nível pago para produção.Uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL em sua assinatura do Azure. Se você não tiver um recurso, consulte Criar uma instância do Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
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:
Navegue até o recurso de servidor flexível do Banco de Dados do Azure para PostgreSQL no portal do Azure.
No menu de navegação à esquerda, selecione Conectar em Configurações e copie o bloco Detalhes da conexão.
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
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:
Adicione a extensão à sua lista de permissões conforme descrito em Permitir extensões.
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:
Configure a extensão com seu ponto de extremidade e chave do serviço Azure OpenAI.
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.
Copie seu endpoint e chave de acesso. Pode utilizar
KEY1
ouKEY2
. 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_name
em 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.
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.
Executar uma pesquisa de semelhança vetorial
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 true
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, 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.
Conteúdos relacionados
- Como usar extensões PostgreSQL no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- Saiba como gerar incorporações com o Azure OpenAI.
- O Serviço OpenAI do Azure incorpora modelos.
- Entenda as incorporações no Serviço OpenAI do Azure.
- O que é a Linguagem de IA do Azure?.
- O que é o Serviço Azure OpenAI?.