Sdílet prostřednictvím


Sémantické vyhledávání s využitím flexibilního serveru Azure Database for PostgreSQL a Azure OpenAI

PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL

V tomto praktickém kurzu se dozvíte, jak vytvořit sémantickou vyhledávací aplikaci pomocí flexibilního serveru Azure Database for PostgreSQL a služby 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 přísad. Cílem je vydat takové sémantické dotazy a získat relevantní výsledky hledání.

Vytvoření sémantického vyhledávání dat pomocí GenAI a flexibilního serveru zahrnuje následující kroky:

  • Identifikujte scénáře hledání. Identifikujte datová pole, která budou zahrnuta do vyhledávání.
  • Pro každé datové pole zahrnuté do vyhledávání vytvořte odpovídající vektorové pole pro uložení vkládání hodnoty uložené 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 spusťte pomocí vhodných modelů relevance, řazení a přizpůsobení, abyste vytvořili 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 CTR (výběrová rychlost) a doba uchovávání. Začlenit mechanismy zpětné vazby pro ladění a zlepšení zásobníku vyhledávání z kvality dat, aktuálnosti dat a přizpůsobení do uživatelského prostředí.

Požadavky

  1. Vytvořte účet OpenAI a požádejte o přístup ke službě 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ů.

Vytvořte a nasaďte prostředek služby Azure OpenAI a model a nasaďte model pro vložení textu-embedding-ada-002. Zkopírujte název nasazení, protože je potřeba k vytvoření vkládání.

Povolení rozšíření azure_ai a pgvectoru

Než budete moct povolit a používat azure_ai instanci flexibilního serveru Azure Database for PostgreSQL, musíte je přidat do seznamu povolených, jak je popsáno v tom, jak používat rozšíření PostgreSQL, a zkontrolovat, jestli je správně přidaný spuštěním SHOW azure.extensions;.pgvector

Rozšíření pak můžete nainstalovat tak, že se připojíte k cílové databázi a spustíte příkaz CREATE EXTENSION . Tento příkaz je potřeba opakovat zvlášť pro každou databázi, ve které má být rozšíření dostupné.

CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;

Konfigurace koncového bodu OpenAI a klíče

Ve službách Azure AI v části Klíče správy>prostředků a koncové body najdete koncový bod a klíče pro prostředek Azure AI. Pomocí koncového bodu a jednoho z klíčů povolte azure_ai rozšíření 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í a import dat

  1. Stáhněte si data z Kaggle.
  2. Připojte se k serveru a vytvořte test databázi a v ní vytvořte tabulku, ve které importujete data.
  3. Import dat
  4. Přidejte do tabulky vložený sloupec.
  5. Vygenerujte vložené možnosti.
  6. Vyhledat

Vytvoření tabulky

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í WIN1252.

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

Importujte data do vytvořené tabulky; 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ů

ALTER TABLE recipes ADD COLUMN embedding vector(1536);

Generování vložených objektů

Generování vkládání dat pomocí rozšíření azure_ai V následujícím příkladu vektorizujeme několik různých polí, zřetězených:

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í.

Tip

Pohrajte si s .LIMIT S vysokou hodnotou může příkaz selhat v polovině kvůli omezování, které azure OpenAI vynucuje. Pokud 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)