Megosztás a következőn keresztül:


Oktatóanyag: Javaslati rendszer létrehozása az Azure Database for PostgreSQL és az Azure OpenAI használatával

Ez a gyakorlati oktatóanyag bemutatja, hogyan hozhat létre ajánlóalkalmazást az Azure Database for PostgreSQL és az Azure OpenAI használatával. A javaslatok különböző területeken alkalmazhatók. A szolgáltatók általában javaslatokat nyújtanak az általuk kínált termékekre és szolgáltatásokra az ügyfél és a környezet által gyűjtött korábbi előzmények és környezeti információk alapján.

A javaslati rendszerek modellezésének különböző módjai vannak. Ez az oktatóanyag a legegyszerűbb űrlapot mutatja be: egy olyan terméken alapuló javaslatot, amely (például) egy korábbi vásárlásnak felel meg. Ez az oktatóanyag a szemantikai kereséshez használt receptadatkészletet használja. A javaslat olyan receptekre épül, amelyeket egy ügyfél kedvelt vagy keresett a múltban.

Előfeltételek

  1. Hozzon létre egy OpenAI-fiókot, és kérjen hozzáférést az Azure OpenAI-hoz.
  2. Adjon hozzáférést az Azure OpenAI-hoz a kívánt előfizetésben.
  3. Engedélyek megadása Azure OpenAI-erőforrások létrehozásához és modellek üzembe helyezéséhez.
  4. Azure OpenAI-erőforrás és modell létrehozása és üzembe helyezése. A beágyazási modell text-embedding-ada-002 üzembe helyezése. Másolja ki az üzembehelyezési nevet, mert a beágyazások létrehozásához szüksége van rá.

A azure_ai és a pgvector bővítmények engedélyezése

"Az Azure Database for PostgreSQL rugalmas kiszolgálópéldányában csak akkor engedélyezheti a azure_ai és pgvector beállításokat, ha előbb felveszi őket az engedélylistára." Hajtsa végre az SHOW azure.extensions;, hogy megbizonyosodjon arról, hogy helyesen lettek hozzáadva.

Ezután telepítheti a bővítményt a céladatbázishoz való csatlakozással és a CREATE EXTENSION parancs futtatásával. Ismételje meg külön a parancsot minden olyan adatbázis esetében, ahol elérhetővé szeretné tenni a bővítményt.

CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;

OpenAI-végpont és -kulcs konfigurálása

Az Azure AI-szolgáltatások Erőforrás-kezelési>kulcsok és végpontok területén megtalálhatja az Azure AI-erőforrás végpontját és kulcsait. A végpont és az egyik kulcs használatával engedélyezze a bővítmény számára a azure_ai modell üzembe helyezésének meghívását:

select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');

Az adatok letöltése

Töltse le az adatokat a Kaggleből.

A tábla létrehozása

Csatlakozzon a kiszolgálóhoz, és hozzon létre egy adatbázist test . Ebben az adatbázisban az alábbi paranccsal hozzon létre egy táblát, amelyben adatokat fog importálni:

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)
);

Adatok importálása

Állítsa be a következő környezeti változót az ügyfélablakban az UTF-8 kódolásának beállításához. Erre a lépésre azért van szükség, mert ez az adatkészlet Windows-1252 kódolást használ.

Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8

Importálja az adatokat a létrehozott táblába. Vegye figyelembe, hogy ez az adatkészlet fejlécsort tartalmaz.

psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"

Oszlop hozzáadása a beágyazások tárolásához

Beágyazási oszlop hozzáadása a táblához:

ALTER TABLE recipes ADD COLUMN embedding vector(1536);

Beágyazások létrehozása

Beágyazásokat hozhat létre az adatokhoz a azure_ai bővítmény használatával. Az alábbi példa vektorizál néhány mezőt, és összefűz.

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;

Ismételje meg a parancsot, amíg nincs több feldolgozandó sor.

Tipp.

Játsszon az LIMIT értékkel. Magas érték esetén előfordulhat, hogy az utasítás az Azure OpenAI által előírt szabályozás miatt félúton meghiúsul. Ha az utasítás sikertelen, várjon legalább egy percet, és futtassa újra a parancsot.

Hozzon létre egy keresési függvényt az adatbázisban a kényelem érdekében:

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;

Most egyszerűen hívja meg a függvényt a javaslat kereséséhez:

select out_recipename, out_similarityscore from recommend_recipe(1, 20); -- search for 20 recipe recommendations that closest to recipeId 1

És vizsgálja meg az eredményeket:

            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)