Criar inserções com a extensão de IA do Azure
Para executar uma pesquisa semântica, você deve comparar a inserção de consulta com as inserções dos itens pesquisados. A azure_ai extensão do Banco de Dados do Azure para PostgreSQL – Servidor Flexível integra-se ao Azure OpenAI para gerar vetores de inserção.
Introdução ao azure_ai e ao OpenAI do Azure
A extensão flexível do Banco de Dados do Azure para PostgreSQL para IA do Azure fornece funções definidas pelo usuário para integrar ao Microsoft Foundry, incluindo o Azure OpenAI e o Azure AI Search.
A API do Azure OpenAI Embeddings gera um vetor de inserção do texto de entrada. Use essa API para definir as inserções para todos os itens que estão sendo pesquisados. O esquema azure_ai da extensão azure_openai facilita chamar a API do SQL para gerar inserções, seja para inicializar inserções de itens ou criar uma inserção de consulta em tempo real. Essas inserções podem ser usadas para executar a pesquisa de similaridade de vetor ou, em outras palavras, pesquisa semântica.
Usando a extensão azure_ai com Azure OpenAI
Para chamar a API do Azure OpenAI Embeddings do PostgreSQL, você precisa habilitar e configurar a azure_ai extensão, conceder acesso ao Azure OpenAI e implantar um modelo do Azure OpenAI. Para obter mais informações, consulte a Documentação do Servidor Flexível do Banco de Dados do Azure para PostgreSQL no OpenAI do Azure.
Depois que o ambiente estiver pronto e a extensão estiver na lista de permitidos, execute este SQL:
/* Enable the extension. */
CREATE EXTENSION azure_ai;
Você também precisa configurar o ponto de extremidade e a chave de acesso do recurso do serviço de OpenAI:
SELECT azure_ai.set_setting('azure_openai.endpoint', '{your-endpoint-url}');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '{your-api-key}}');
Uma vez que o azure_ai e o OpenAI do Azure estiverem configurados, buscar e armazenar inserções é apenas questão de chamar uma função na consulta SQL. Supondo que uma tabela listings tenha uma coluna description e uma coluna listing_vector, é possível gerar e armazenar a incorporação para todas as listagens com a consulta a seguir. Substitua {your-deployment-name} pelo nome da implantação do Azure OpenAI Studio para o modelo que você criou.
UPDATE listings
SET listing_vector = azure_openai.create_embeddings('{your-deployment-name}', description, max_attempts => 5, retry_delay_ms => 500)
WHERE listing_vector IS NULL;
A listing_vector coluna de vetor deve ter o mesmo número de dimensões que o modelo de linguagem produz.
Para ver uma inserção de documento, execute a seguinte consulta:
SELECT listing_vector FROM listings LIMIT 1;
O resultado é um vetor de números de ponto flutuante. Você pode executar \x primeiro para tornar a saída mais legível.
Gerar uma inserção de consulta dinamicamente
Depois de ter inserções para os documentos que deseja pesquisar, você pode executar uma consulta de pesquisa semântica. Para fazer isso, você também precisa gerar uma inserção para o texto da consulta.
O esquema azure_openai da extensão azure_ai permite que você gere inserções no SQL. Por exemplo, para encontrar as três principais listagens cujo texto é mais semanticamente semelhante à consulta "Encontre-me lugares em um bairro caminhável", basta executar o seguinte SQL:
SELECT id, description FROM listings
ORDER BY listing_vector <=> azure_openai.create_embeddings('{your-deployment-name}', 'Find me places in a walkable neighborhood.')::vector
LIMIT 3;
O <=> operador calcula a distância de cosseno entre os dois vetores, a métrica de similaridade semântica. Quanto mais próximos os vetores, mais semanticamente semelhante; quanto mais os vetores, mais semanticamente diferente.
O ::vector operador converte as inserções geradas em matrizes de vetor PostgreSQL.
A consulta retorna as três principais IDs e descrições de listagem, classificadas de menos para mais diferentes (mais para menos semelhantes).