Pesquisa Semântica com o Servidor Flexível do Banco de Dados do Azure para PostgreSQL e o Serviço OpenAI do Azure
APLICA-SE A: Banco de dados do Azure para PostgreSQL - Servidor Flexível
Esse tutorial prático mostra como criar um aplicativo de pesquisa semântica usando o banco de dados do Azure para o servidor flexível PostgreSQL e o serviço Azure OpenAI. A pesquisa semântica faz pesquisas com base nas semânticas; a pesquisa lexical padrão faz pesquisas com base em palavras-chave fornecidas em uma consulta. Por exemplo, seu conjunto de dados de receitas pode não conter rótulos como sem glúten, vegano, sem laticínios, sem frutas ou sobremesa, mas essas características podem ser deduzidas dos ingredientes. A ideia é emitir essas consultas semânticas e obter resultados relevantes da pesquisa.
A compilação da funcionalidade de pesquisa semântica em seus dados usando o GenAI e o Servidor Flexível envolve as seguintes etapas:
- Identifique os cenários de pesquisa. Identifique os campos de dados que estarão envolvidos na pesquisa.
- Para cada campo de dados envolvido na pesquisa, crie um campo de vetor correspondente para armazenar as inserções do valor armazenado no campo de dados.
- Gere inserções para os dados nos campos de dados selecionados e armazene as inserções nos campos de vetor correspondentes.
- Gere a inserção para qualquer consulta de pesquisa de entrada fornecida.
- Pesquise o campo de dados de vetor e liste os vizinhos mais próximos.
- Execute os resultados por meio de modelos apropriados de relevância, classificação e personalização para produzir a classificação final. Na ausência desses modelos, classifique os resultados na diminuição da ordem dot-product.
- Monitore o modelo, a qualidade dos resultados e as métricas de negócios, como CTR (taxa de seleção) e tempo de permanência. Incorpore mecanismos de comentários para depurar e melhorar a pilha de pesquisa, desde a qualidade dos dados, a atualização de dados e a personalização até a experiência do usuário.
Pré-requisitos
- Crie uma conta do OpenAI e solicite acesso ao Serviço OpenAI do Azure.
- Conceda acesso ao OpenAI do Azure na assinatura desejada.
- Conceda permissões para criar recursos do OpenAI do Azure e implantar modelos.
Crie e implante um recurso e um modelo do Azure OpenAI Service, implante o modelo de embeddings text-embedding-ada-002. Copie o nome da implantação conforme necessário para criar inserções.
Habilitar as extensões azure_ai e pgvector
Antes de habilitar as extensões azure_ai
e pgvector
na instância do servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisará adicioná-las à lista de permitidos, conforme descrito em como usar extensões do PostgreSQL e verificar se foram adicionadas corretamente executando SHOW azure.extensions;
.
Em seguida, instale a extensão conectando-se ao banco de dados de destino e executando o comando CREATE EXTENSION. Você precisará repetir o comando separadamente para cada banco de dados no qual deseja que a extensão esteja disponível.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Configurar o ponto de extremidade e a chave do OpenAI
Nos serviços de IA do Azure em Gerenciamento de Recursos>Chaves e Pontos de Extremidade, você poderá encontrar o ponto de extremidade e as chaves para o seu recurso de IA do Azure. Use o ponto de extremidade e uma das chaves para habilitar a extensão azure_ai
e invocar a implantação do modelo.
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Baixar e importar os dados
- Baixe os dados do Kaggle.
- Conecte-se ao seu servidor e crie um
test
banco de dados, e nele crie uma tabela na qual você importará os dados. - Importar os dados.
- Adicione uma coluna de inserção à tabela.
- Gerar os embeddings.
- Pesquisar.
Criar a tabela
CREATE TABLE public.recipes(
rid integer NOT NULL,
recipe_name text,
prep_time text,
cook_time text,
total_time text,
servings integer,
yield text,
ingredients text,
directions text,
rating real,
url text,
cuisine_path text,
nutrition text,
timing text,
img_src text,
PRIMARY KEY (rid)
);
Importar os dados
Defina a variável de ambiente a seguir na janela do cliente para definir a codificação como utf-8. Essa etapa é necessária porque esse conjunto de dados específico usa a codificação WIN1252.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importe os dados para a tabela criada; observe que este conjunto de dados contém uma linha de cabeçalho:
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Adicionar uma coluna para armazenar as inserções
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Gerar inserções
Gere inserções para seus dados usando a extensão azure_ai. A seguir, vetorizamos alguns campos diferentes, concatenados:
WITH ro AS (
SELECT ro.rid
FROM
recipes ro
WHERE
ro.embedding is null
LIMIT 500
)
UPDATE
recipes r
SET
embedding = azure_openai.create_embeddings('text-embedding-ada-002', r.recipe_name||' '||r.cuisine_path||' '||r.ingredients||' '||r.nutrition||' '||r.directions)
FROM
ro
WHERE
r.rid = ro.rid;
Repita o comando até que não haja mais linhas a serem processadas.
Dica
Brinque com o LIMIT
. Com um valor alto, a instrução pode falhar no meio do caminho devido à limitação imposta pelo OpenAI do Azure. Se falhar, aguarde pelo menos um minuto e execute o comando novamente.
Pesquisar
Crie uma função de pesquisa em seu banco de dados para fins de conveniência:
create function
recipe_search(searchQuery text, numResults int)
returns table(
recipeId int,
recipe_name text,
nutrition text,
score real)
as $$
declare
query_embedding vector(1536);
begin
query_embedding := (azure_openai.create_embeddings('text-embedding-ada-002', searchQuery));
return query
select
r.rid,
r.recipe_name,
r.nutrition,
(r.embedding <=> query_embedding)::real as score
from
recipes r
order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;
Agora basta invocar a função para pesquisar:
select recipeid, recipe_name, score from recipe_search('vegan recipes', 10);
E explore os resultados:
recipeid | recipe_name | score
----------+--------------------------------------------------------------+------------
829 | Avocado Toast (Vegan) | 0.15672222
836 | Vegetarian Tortilla Soup | 0.17583494
922 | Vegan Overnight Oats with Chia Seeds and Fruit | 0.17668104
600 | Spinach and Banana Power Smoothie | 0.1773768
519 | Smokey Butternut Squash Soup | 0.18031077
604 | Vegan Banana Muffins | 0.18287598
832 | Kale, Quinoa, and Avocado Salad with Lemon Dijon Vinaigrette | 0.18368931
617 | Hearty Breakfast Muffins | 0.18737361
946 | Chia Coconut Pudding with Coconut Milk | 0.1884186
468 | Spicy Oven-Roasted Plums | 0.18994217
(10 rows)
Conteúdo relacionado
- Integrar o Banco de Dados do Azure para PostgreSQL - Servidor Flexível com os Serviços Cognitivos do Azure.
- Gerar inserções de vetores com o Banco de Dados do Azure para PostgreSQL - Servidor Flexível com LLM implantado localmente (Versão prévia).
- Integrar o Banco de Dados do Azure para PostgreSQL aos Serviços do Azure Machine Learning.
- Gerar inserções de vetores com o OpenAI do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- Extensão de IA do Azure no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- IA generativa com o Banco de Dados do Azure para PostgreSQL - Servidor Flexível.
- Sistema de Recomendação com Banco de Dados do Azure para PostgreSQL - Servidor Flexível e OpenAI do Azure.
- Habilitar e usar o pgvector no Banco de Dados do Azure para PostgreSQL - Servidor Flexível.