Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här praktiska självstudien visar hur du skapar ett rekommenderande program med hjälp av Azure Database for PostgreSQL och Azure OpenAI. Rekommendationer har tillämpningar i olika domäner. Tjänsteleverantörer brukar ge rekommendationer för produkter och tjänster som de erbjuder baserat på tidigare historik och kontextuell information som samlats in från kunden och miljön.
Det finns olika sätt att modellera rekommendationssystem. I den här handledningen utforskar vi den enklaste formen: en produktrekommendation som grundar sig på en produkt som motsvarar (till exempel) ett tidigare köp. I den här självstudien används den receptdatauppsättning som används i självstudien för semantisk sökning . Rekommendationen är för recept baserat på ett recept som en kund gillade eller sökte efter tidigare.
Förutsättningar
- Skapa ett OpenAI-konto och begär åtkomst till Azure OpenAI.
- Bevilja åtkomst till Azure OpenAI i önskad prenumeration.
- Bevilja behörigheter för att skapa Azure OpenAI-resurser och distribuera modeller.
- Skapa och distribuera en Azure OpenAI-resurs och en modell. Distribuera inbäddningsmodellen text-embedding-ada-002. Kopiera distributionsnamnet eftersom du behöver det för att skapa inbäddningar.
Aktivera tilläggen azure_ai och pgvector
Innan du kan aktivera azure_ai och pgvector på din flexibla Azure Database for PostgreSQL-serverinstans måste du lägga till dem i listan över tillåtna. Kontrollera att de har lagts till korrekt genom att köra SHOW azure.extensions;.
Sedan kan du installera tillägget genom att ansluta till måldatabasen och köra kommandot CREATE EXTENSION . Upprepa kommandot separat för varje databas där du vill att tillägget ska vara tillgängligt.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Konfigurera en OpenAI-slutpunkt och nyckel
Under Resurshanteringsnycklar>och slutpunkter i Azure AI-tjänster hittar du slutpunkten och nycklarna för din Azure AI-resurs. Använd slutpunkten och en av nycklarna för att aktivera azure_ai tillägget för att anropa modelldistributionen:
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Ladda ned data
Ladda ned data från Kaggle.
Skapa tabellen
Anslut till servern och skapa en test databas. I databasen använder du följande kommando för att skapa en tabell där du importerar data:
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)
);
Importera data
Ange följande miljövariabel i klientfönstret för att ange kodning till UTF-8. Det här steget är nödvändigt eftersom den här datauppsättningen använder Windows-1252-kodning.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importera data till den tabell som du skapade. Observera att den här datamängden innehåller en rubrikrad.
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Lägg till en kolumn för att lagra inbäddningarna
Lägg till en inbäddningskolumn i tabellen:
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Generera inbäddningar
Generera inbäddningar för dina data med hjälp av azure_ai-tillägget. I följande exempel vektoriseras några fält och sammanfogas.
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;
Upprepa kommandot tills det inte finns några fler rader att bearbeta.
Dricks
Leka med värdet LIMIT . Med ett högt värde kan instruktionen misslyckas halvvägs på grund av begränsningar som Azure OpenAI inför. Om instruktionen misslyckas väntar du i minst en minut och kör kommandot igen.
Sökning
Skapa en sökfunktion i databasen för enkelhetens skull:
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;
Anropa nu bara funktionen för att söka efter rekommendationen:
select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1
Och utforska resultaten:
            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)
Relaterat innehåll
- Integrera Azure Database for PostgreSQL med Azure Cognitive Services
- Integrera Azure Database for PostgreSQL med Azure Machine Learning-tjänster
- Generera vektorinbäddningar med Azure OpenAI i Azure Database for PostgreSQL
- Azure AI-tillägg i Azure Database for PostgreSQL
- Generativ AI med Azure Database for PostgreSQL
- Skapa en semantisk sökning med Azure Database for PostgreSQL och Azure OpenAI
- Aktivera och använda pgvector i Azure Database for PostgreSQL