Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem praktischen Lernprogramm erfahren Sie, wie Sie eine semantische Suchanwendung mithilfe von Azure Database für PostgreSQL und Azure OpenAI erstellen.
Die semantische Suche führt Suchvorgänge basierend auf der Semantik durch. Die lexikalische Standardsuche führt Suchvorgänge basierend auf schlüsselwörtern aus, die in einer Abfrage bereitgestellt werden. Ihr Rezeptdatensatz enthält beispielsweise keine Bezeichnungen wie glutenfrei, vegan, milchfrei, fruchtfrei oder Dessert, aber diese Eigenschaften können von den Zutaten abgeleitet werden. Die Idee ist, solche semantischen Abfragen zu stellen und relevante Suchergebnisse zu erhalten.
In diesem Tutorial erfahren Sie:
- Identifizieren Sie die Suchszenarien und die Datenfelder, die an einer Suche beteiligt sein werden.
- Erstellen Sie für jedes Datenfeld, das an einer Suche beteiligt ist, ein entsprechendes Vektorfeld, um die Einbettungen des im Datenfeld gespeicherten Werts zu speichern.
- Erstellung von Einbettungen für die Daten in den ausgewählten Datenfeldern und Speicherung der Einbettungen in den entsprechenden Vektorfeldern.
- Generieren Sie eine Einbettung für jede Eingabe-Suchabfrage.
- Das Vektordatenfeld suchen und die Pixelwiederholung auflisten.
- Führen Sie die Ergebnisse durch geeignete Relevanz-, Bewertungs- und Personalisierungsmodelle aus, um die endgültige Rangfolge zu erzielen. Falls es keine solchen Modelle gibt, werden die Ergebnisse in absteigender Reihenfolge des Punktprodukts geordnet.
- Überwachen Sie das Modell, die Ergebnisqualität und die Geschäftsmetriken, z. B. Klickrate und Verweilzeit. Integrieren Sie Feedbackmechanismen zum Debuggen und Verbessern des Suchstapels, von datenqualität, Datenfrischigkeit und Personalisierung bis hin zur Benutzererfahrung.
Voraussetzungen
- Erstellen Sie ein OpenAI-Konto, und fordern Sie den Zugriff auf Azure OpenAI an.
- Gewähren des Zugriffs auf Azure OpenAI im gewünschten Abonnement.
- Zuweisung der Zugriffsberechtigungen zum Erstellen von Azure OpenAI-Ressourcen und zum Bereitstellen von Modellen.
- Erstellen und Bereitstellen einer Azure OpenAI-Ressource und eines Modells. Stellen Sie das Einbettungsmodell "text-embedding-ada-002" bereit. Kopieren Sie den Bereitstellungsnamen, weil Sie ihn zum Erstellen von Einbettungen benötigen.
Aktivieren der azure_ai- und pgvector-Erweiterungen
Bevor Sie azure_ai und pgvector in Ihrer Azure-Datenbank für PostgreSQL-Flexibleserver-Instanz aktivieren können, müssen Sie sie zu Ihrer Freigabeliste hinzufügen. Stellen Sie sicher, dass sie ordnungsgemäß hinzugefügt werden, indem Sie SHOW azure.extensions; ausführen.
Anschließend können Sie die Erweiterung installieren, indem Sie eine Verbindung mit Ihrer Zieldatenbank herstellen und den Befehl CREATE EXTENSION ausführen. Sie müssen den Befehl für jede Datenbank separat wiederholen, in der die Erweiterung verfügbar sein soll.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Konfigurieren eines OpenAI-Endpunkts und eines Schlüssels
In Azure AI-Diensten finden Sie unter Ressourcenverwaltungsschlüssel>und Endpunkte den Endpunkt und die Schlüssel für Ihre Azure AI-Ressource. Verwenden Sie den Endpunkt und einen der Schlüssel, um die azure_ai Erweiterung zu aktivieren und die Modellbereitstellung aufzurufen.
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Herunterladen der Daten
Herunterladen der Daten aus Kaggle.
Erstellen der Tabelle
Stellen Sie eine Verbindung mit Ihrem Server her, und erstellen Sie eine test Datenbank. Verwenden Sie in dieser Datenbank den folgenden Befehl, um eine Tabelle zu erstellen, in der Sie Daten importieren:
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)
);
Importieren der Daten
Legen Sie die folgende Umgebungsvariable im Clientfenster fest, um die Codierung auf UTF-8 festzulegen. Dieser Schritt ist erforderlich, da dieses bestimmte Dataset die Windows-1252-Codierung verwendet.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importieren Sie die Daten in die von Ihnen erstellte Tabelle. Beachten Sie, dass dieses Dataset eine Kopfzeile enthält.
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Hinzufügen einer Spalte zum Speichern der Einbettungen
Fügen Sie der Tabelle eine Einbettungsspalte hinzu:
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Generieren von Einbettungen
Generieren Sie Einbettungen für Ihre Daten mithilfe der azure_ai Erweiterung. Im folgenden Beispiel werden einige Felder vektorisiert und verkettet.
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;
Wiederholen Sie den Befehl, bis keine weiteren Zu verarbeitenden Zeilen vorhanden sind.
Tipp
Spielen Sie mit dem LIMIT Wert um. Bei einem hohen Wert kann die Anweisung aufgrund der von Azure OpenAI auferlegten Drosselung möglicherweise vorzeitig fehlschlagen. Wenn die Anweisung fehlschlägt, warten Sie mindestens eine Minute, und führen Sie den Befehl erneut aus.
Suchen,
Erstellen Sie eine Suchfunktion in Ihrer Datenbank zur Vereinfachung:
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;
Rufen Sie nun einfach die Funktion auf, um die Suche auszuführen:
select recipeid, recipe_name, score from recipe_search('vegan recipes', 10);
Untersuchen Sie die Ergebnisse:
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)
Verwandte Inhalte
- Integrieren der Azure-Datenbank für PostgreSQL in Azure Cognitive Services
- Integrieren von Azure-Datenbank für PostgreSQL in Azure Machine Learning-Dienste
- Generieren von Vektoreinbettungen mit Azure OpenAI in Azure Database for PostgreSQL
- Azure AI-Erweiterung in Azure Database for PostgreSQL
- Generative KI mit Azure-Datenbank für PostgreSQL
- Erstellen eines Empfehlungssystems mit Azure Database für PostgreSQL und Azure OpenAI
- Aktivieren und Verwenden von pgvector in Azure-Datenbank für PostgreSQL