Sdílet prostřednictvím


Kurz: Vytvoření sémantického vyhledávání pomocí Azure Database for PostgreSQL a Azure OpenAI

V tomto praktickém kurzu se dozvíte, jak vytvořit sémantickou vyhledávací aplikaci pomocí Azure Database for PostgreSQL a Azure OpenAI.

Sémantické vyhledávání vyhledává na základě sémantiky. Standardní lexikální vyhledávání vyhledává na základě klíčových slov zadaných v dotazu. Vaše datová sada receptu například nemusí obsahovat štítky, jako je bezlepková, veganská, bez mléka, ovoce nebo dezert, ale tyto vlastnosti mohou být odvozeny z ingrediencí. Cílem je vydat takové sémantické dotazy a získat relevantní výsledky hledání.

V tomto kurzu se naučíte:

  • Identifikujte scénáře hledání a datová pole, která budou součástí hledání.
  • Pro každé datové pole zahrnuté do vyhledávání vytvořte odpovídající vektorové pole pro uložení vložených hodnot uložených v datovém poli.
  • Generování vkládání pro data ve vybraných datových polích a ukládání vložených dat do odpovídajících vektorových polí.
  • Vygenerujte vkládání pro libovolný vstupní vyhledávací dotaz.
  • Vyhledejte pole vektorových dat a uveďte nejbližší sousedy.
  • Výsledky můžete spustit pomocí odpovídajících modelů relevance, řazení a přizpůsobení, aby se vytvořilo konečné hodnocení. V případě absence takových modelů seřadí výsledky v poklesu pořadí dot-product.
  • Monitorujte model, kvalitu výsledků a obchodní metriky, jako je míra prokliku a doba strávení. Začleňte mechanismy zpětné vazby pro ladění a vylepšení zásobníku vyhledávání, od kvality dat, aktuálnosti dat a přizpůsobení až po uživatelské prostředí.

Požadavky

  1. Vytvořte účet OpenAI a požádejte o přístup k Azure OpenAI.
  2. Udělte přístup k Azure OpenAI v požadovaném předplatném.
  3. Udělte oprávnění k vytváření prostředků Azure OpenAI a nasazení modelů.
  4. Vytvoření a nasazení prostředku Azure OpenAI a modelu Nasaďte model vkládání text-embedding-ada-002. Zkopírujte název nasazení, protože ho potřebujete k vytvoření embeddingů.

Povolení rozšíření azure_ai a pgvectoru

Než budete moct na instanci flexibilního serveru Azure Database for PostgreSQL povolit azure_ai a pgvector, musíte je přidat do seznamu povolených. Spuštěním SHOW azure.extensions;příkazu se ujistěte, že jsou správně přidané.

Rozšíření pak můžete nainstalovat připojením k cílové databázi a spuštěním příkazu CREATE EXTENSION . Tento příkaz je potřeba opakovat zvlášť pro každou databázi, ve které chcete mít rozšíření k dispozici.

CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;

Konfigurace koncového bodu OpenAI a klíče

Ve službách Azure AI, v části Správa prostředků> a Klíče a koncové body, najdete koncový bod a klíče pro prostředek Azure AI. Pomocí koncového bodu a jednoho z klíčů povolte rozšíření azure_ai k vyvolání nasazení modelu.

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

Stažení dat

Stáhněte si data z Kaggle.

Vytvoření tabulky

Připojte se k serveru a vytvořte test databázi. V této databázi pomocí následujícího příkazu vytvořte tabulku, ve které importujete 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)
);

Import dat

Nastavte v okně klienta následující proměnnou prostředí, která nastaví kódování na UTF-8. Tento krok je nezbytný, protože tato konkrétní datová sada používá kódování Windows-1252.

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

Importujte data do tabulky, kterou jste vytvořili. Všimněte si, že tato datová sada obsahuje řádek záhlaví.

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

Přidání sloupce pro uložení vložených objektů

Přidejte do tabulky sloupec pro vkládání:

ALTER TABLE recipes ADD COLUMN embedding vector(1536);

Generování vložených objektů

Generujte embeddingy pro svá data pomocí rozšíření azure_ai. Následující příklad vektorizuje několik polí a je zřetězen.

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;

Opakujte příkaz, dokud nebudou k dispozici žádné další řádky ke zpracování.

Návod

Pohrajte si s LIMIT hodnotou. S vysokou hodnotou může příkaz selhat v polovině kvůli omezování, které Azure OpenAI ukládá. Pokud příkaz selže, počkejte aspoň jednu minutu a spusťte příkaz znovu.

Vytvořte ve své databázi funkci vyhledávání, která vám vyhovuje:

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;

Teď stačí vyvolat funkci pro vyhledávání:

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

A prozkoumejte výsledky:

 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)