Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione pratica illustra come creare un'applicazione consigliata usando Database di Azure per PostgreSQL e Azure OpenAI. Le raccomandazioni includono applicazioni in domini diversi. I provider di servizi tendono a fornire raccomandazioni per prodotti e servizi offerti in base alla cronologia precedente e alle informazioni contestuali raccolte dal cliente e dall'ambiente.
Esistono diversi modi per modellare i sistemi di raccomandazione. Questa esercitazione illustra il formato più semplice: una raccomandazione basata su un prodotto che corrisponde a (ad esempio) un acquisto precedente. Questa esercitazione usa il set di dati della ricetta usato dall'esercitazione per la ricerca semantica . La raccomandazione è per le ricette basate su una ricetta che un cliente ha apprezzato o cercato in passato.
Prerequisiti
- Creare un account OpenAI e richiedere l'accesso ad Azure OpenAI.
- Concedere l'accesso ad Azure OpenAI nella sottoscrizione desiderata.
- Concedere le autorizzazioni di accesso per creare risorse Azure OpenAI e distribuire modelli.
- Creare e distribuire una risorsa OpenAI di Azure e un modello. Distribuire il modello di incorporamento text-embedding-ada-002. ** Copia il nome della distribuzione, poiché è necessario per creare embedding.
Abilitare le estensioni azure_ai e pgvector
Prima di poter abilitare azure_ai e pgvector nell'istanza del server flessibile di Database di Azure per PostgreSQL, è necessario aggiungerli all'elenco elementi consentiti. Assicurarsi che siano stati aggiunti correttamente eseguendo SHOW azure.extensions;.
È quindi possibile installare l'estensione connettendosi al database di destinazione ed eseguendo il comando CREATE EXTENSION . Ripetere il comando separatamente per ogni database in cui si desidera che l'estensione sia disponibile.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Configurare un endpoint e una chiave OpenAI
Nei servizi AI di Azure, sotto Gestione Risorse>Chiavi ed Endpoint, è possibile trovare l'endpoint e le chiavi per la risorsa di Intelligenza Artificiale di Azure. Usare l'endpoint e una delle chiavi per abilitare l'estensione azure_ai per richiamare la distribuzione del modello:
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Scarica dati
Scaricare i dati da Kaggle.
Creare la tabella
Connettersi al server e creare un test database. In tale database usare il comando seguente per creare una tabella in cui verranno importati i dati:
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)
);
Importare i dati
Impostare la variabile di ambiente seguente nella finestra client per impostare la codifica su UTF-8. Questo passaggio è necessario perché questo particolare set di dati usa la codifica Windows-1252.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importare i dati nella tabella creata. Si noti che questo set di dati contiene una riga di intestazione.
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Aggiungere una colonna per archiviare gli incorporamenti
Aggiungere una colonna di incorporamento alla tabella:
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Generare incorporamenti
Generare embedding per i tuoi dati usando l'estensione azure_ai. L'esempio seguente vettorizza alcuni campi ed è concatenato.
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;
Ripetere il comando fino a quando non sono presenti altre righe da elaborare.
Suggerimento
Provare a usare il LIMIT valore . Se il valore è elevato, l'istruzione potrebbe interrompersi a metà a causa della limitazione imposta da Azure OpenAI. Se l'istruzione ha esito negativo, attendere almeno un minuto ed eseguire di nuovo il comando.
Ricerca
Creare una funzione di ricerca nel database per praticità:
create function
recommend_recipe(sampleRecipeId int, numResults int)
returns table(
out_recipeName text,
out_nutrition text,
out_similarityScore real)
as $$
declare
queryEmbedding vector(1536);
sampleRecipeText text;
begin
sampleRecipeText := (select
recipe_name||' '||cuisine_path||' '||ingredients||' '||nutrition||' '||directions
from
recipes where rid = sampleRecipeId);
queryEmbedding := (azure_openai.create_embeddings('text-embedding-ada-002',sampleRecipeText));
return query
select
distinct r.recipe_name,
r.nutrition,
(r.embedding <=> queryEmbedding)::real as score
from
recipes r
order by score asc limit numResults; -- cosine distance
end $$
language plpgsql;
Ora è sufficiente richiamare la funzione per cercare la raccomandazione:
select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1
Esplorare quindi i risultati:
out_recipename | out_similarityscore
---------------------------------------+---------------------
Apple Pie by Grandma Ople | 0
Easy Apple Pie | 0.05137232
Grandma's Iron Skillet Apple Pie | 0.054287136
Old Fashioned Apple Pie | 0.058492836
Apple Hand Pies | 0.06449003
Apple Crumb Pie | 0.07290977
Old-Fashioned Apple Dumplings | 0.078374185
Fried Apple Pies | 0.07918481
Apple Pie Filling | 0.084320426
Apple Turnovers | 0.08576391
Dutch Apple Pie with Oatmeal Streusel | 0.08779895
Apple Crisp - Perfect and Easy | 0.09170883
Delicious Cinnamon Baked Apples | 0.09384012
Easy Apple Crisp with Pie Filling | 0.09477234
Jump Rope Pie | 0.09503954
Easy Apple Strudel | 0.095167875
Apricot Pie | 0.09634114
Easy Apple Crisp with Oat Topping | 0.09708358
Baked Apples | 0.09826993
Pear Pie | 0.099974394
(20 rows)
Contenuti correlati
- Integrare Database di Azure per PostgreSQL con Servizi cognitivi di Azure
- Integrare Database di Azure per PostgreSQL con i servizi di Azure Machine Learning
- Generare incorporamenti vettoriali con OpenAI di Azure in Database di Azure per PostgreSQL
- Estensione di Azure AI nel database di Azure per PostgreSQL
- Intelligenza artificiale generativa con Database di Azure per PostgreSQL
- Creare una ricerca semantica con Database di Azure per PostgreSQL e Azure OpenAI
- Abilitare e usare pgvector in Database di Azure per PostgreSQL