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


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

A következőkre vonatkozik: Azure Database for PostgreSQL – Rugalmas kiszolgáló

Ez a gyakorlati oktatóanyag bemutatja, hogyan hozhat létre szemantikai keresőalkalmazást az Azure Database for PostgreSQL és az Azure OpenAI használatával.

A szemantikai keresés szemantikán alapuló kereséseket végez. A standard lexikális keresés a lekérdezésben megadott kulcsszavak alapján végez keresést. Előfordulhat például, hogy a receptadatkészlet nem tartalmaz olyan címkéket, mint a gluténmentes, a vegán, a tejmentes, a gyümölcsmentes vagy a desszert, de ezek a jellemzők az összetevőkből következtethetők. Az ötlet az ilyen szemantikai lekérdezések kiadása és a releváns keresési eredmények lekérése.

Ebben az útmutatóban Ön:

  • Azonosítsa a keresési forgatókönyveket és a keresésben részt vevő adatmezőket.
  • A keresésben részt vevő összes adatmezőhöz hozzon létre egy megfelelő vektormezőt az adatmezőben tárolt érték beágyazásának tárolásához.
  • Beágyazásokat hozhat létre a kijelölt adatmezőkben lévő adatokhoz, és tárolhatja a beágyazásokat a megfelelő vektormezőkben.
  • Hozza létre a beágyazást bármely bemeneti keresési lekérdezéshez.
  • Keresse meg a vektor adatmezőt, és listázze a legközelebbi szomszédokat.
  • Alkalmazza a megfelelő relevancia-, rangsorolási és személyre szabási modelleket a végső rangsor létrehozásához. Ilyen modellek hiányában rangsorolja az eredményeket a dot-product sorrend csökkentésében.
  • Monitorozza a modellt, az eredmények minőségét és az üzleti metrikákat, például az átkattintási arányt és a tartózkodási időt. Visszajelzési mechanizmusok beépítése a keresési verem hibakereséséhez és javításához, az adatok minőségétől, az adatok frissességétől és a személyre szabástól a felhasználói élményig.

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

Azelőtt, hogy a azure_ai és pgvector funkciókat engedélyezhetné a rugalmas Azure Database for PostgreSQL-kiszolgálón, fel kell vennie őket az engedélyezési listá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. A parancsot minden olyan adatbázis esetében külön kell megismételnie, 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
    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;

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

select recipeid, recipe_name, score from recipe_search('vegan recipes', 10);

És vizsgálja meg az eredményeket:

 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)