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
- Vytvořte účet OpenAI a požádejte o přístup ke službě Azure OpenAI.
- Udělte přístup k Azure OpenAI v požadovaném předplatném.
- 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
- Stáhněte si data z Kaggle.
- Připojte se k serveru a vytvořte
test
databázi a v ní vytvořte tabulku, ve které importujete data. - Import dat
- Přidejte do tabulky vložený sloupec.
- Vygenerujte vložené možnosti.
- 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.
Hledání
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)
Související obsah
- Integrace flexibilního serveru Azure Database for PostgreSQL s Azure Cognitive Services
- Generování vektorových vkládání do flexibilního serveru Azure Database for PostgreSQL s místně nasazeným LLM (Preview)
- Integrace Azure Database for PostgreSQL se službami Azure Machine Learning Services
- Generování vektorových vkládání pomocí Azure OpenAI na flexibilním serveru Azure Database for PostgreSQL
- Rozšíření Azure AI na flexibilním serveru Azure Database for PostgreSQL
- Generování umělé inteligence s flexibilním serverem Azure Database for PostgreSQL
- Systém doporučení s flexibilním serverem Azure Database for PostgreSQL a Azure OpenAI
- Povolení a používání nástroje pgvector na flexibilním serveru Azure Database for PostgreSQL