Recherche sémantique avec le serveur flexible Azure Database pour PostgreSQL et Azure OpenAI
S’APPLIQUE À : Azure Database pour PostgreSQL - Serveur flexible
Ce tutoriel pratique vous montre comment créer une application de recherche sémantique en utilisant le serveur flexible Azure Database pour PostgreSQL et Azure OpenAI Service. La recherche sémantique effectue des recherches basées sur la sémantique. La recherche lexicale standard effectue des recherches basées sur des mots clés fournis dans une requête. Par exemple, votre jeu de données de recettes peut ne pas contenir d’étiquettes telles que sans gluten, végétarien, sans lait, sans fruits ou dessert, mais ces caractéristiques peuvent être déduites des ingrédients. L’idée est d’émettre de telles requêtes sémantiques et d’obtenir des résultats de recherche pertinents.
La création d’une fonctionnalité de recherche sémantique sur vos données à l’aide de GenAI et de Serveur flexible implique les étapes suivantes :
- Identifiez les scénarios de recherche. Identifiez les champs de données qui seront impliqués dans la recherche.
- Pour chaque champ de données impliqué dans la recherche, créez un champ vectoriel correspondant pour stocker les incorporations de la valeur stockée dans le champ de données.
- Générez des incorporations pour les données dans les champs de données sélectionnés, puis stockez les incorporations dans leurs champs vectoriels correspondants.
- Générez l’incorporation pour une requête de recherche d’entrée donnée.
- Recherchez le champ de données vectorielles et listez les plus proches voisins.
- Exécutez les résultats par le biais des modèles de pertinence, de classement et de personnalisation appropriés pour produire le classement final. En l’absence de ces modèles, classez les résultats dans l’ordre décroissant du produit scalaire.
- Surveillez le modèle, la qualité des résultats et les métriques métier telles que le CTR (taux de sélection) et la durée de maintien. Incorporez des mécanismes de commentaires pour déboguer et améliorer la pile de recherche quant à la qualité des données, leur fraîcheur et la personnalisation de l’expérience utilisateur.
Prérequis
- Créez un compte OpenAI et demandez l’accès à Azure OpenAI Service.
- Permettez d’accéder à Azure OpenAI dans l’abonnement souhaité.
- Octroyez des autorisations pour créer des ressources Azure OpenAI et déployer des modèles.
Créez et déployez une ressource Azure OpenAI Service et un modèle, déployez le modèle d’incorporations text-embedding-ada-002. Copiez le nom du déploiement, car il est nécessaire pour créer des incorporations.
Activer les extensions azure_ai et pgvector
Avant de pouvoir activer azure_ai
et pgvector
sur votre instance de serveur flexible Azure Database pour PostgreSQL, vous devez les ajouter à votre liste d’autorisation comme décrit dans comment utiliser les extensions PostgreSQL, puis vérifier s’ils sont correctement ajoutés en exécutant SHOW azure.extensions;
.
Vous pouvez ensuite installer l’extension en vous connectant à votre base de données cible et en exécutant la commande CREATE EXTENSION. Vous devez répéter la commande séparément pour chaque base de données dans laquelle vous souhaitez que l’extension soit disponible.
CREATE EXTENSION azure_ai;
CREATE EXTENSION vector;
Configurer le point de terminaison OpenAI et la clé
Dans les services Azure AI, sous Gestion des ressources>Clés et points de terminaison, vous trouverez les points de terminaison et clés de votre ressource Azure AI. Utilisez le point de terminaison et l’une des clés pour activer l’extension azure_ai
afin d’appeler le modèle de déploiement.
select azure_ai.set_setting('azure_openai.endpoint','https://<endpoint>.openai.azure.com');
select azure_ai.set_setting('azure_openai.subscription_key', '<API Key>');
Télécharger, puis importer les données
- Téléchargez les données à partir de Kaggle.
- Connectez-vous à votre serveur, créez une base de données
test
, puis créez dedans un tableau dans lequel vous importerez les données. - Importer les données.
- Ajoutez une colonne d’incorporation au tableau.
- Générez les incorporations.
- Rechercher.
Créer la table
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)
);
Importer les données
Définissez la variable d’environnement suivante dans la fenêtre cliente pour définir l’encodage sur utf-8. Cette étape est nécessaire, car ce jeu de données particulier utilise l’encodage WIN1252.
Rem on Windows
Set PGCLIENTENCODING=utf-8;
# on Unix based operating systems
export PGCLIENTENCODING=utf-8
Importez les données dans la table créée et notez que ce jeu de données contient une ligne d’en-tête :
psql -d <database> -h <host> -U <user> -c "\copy recipes FROM <local recipe data file> DELIMITER ',' CSV HEADER"
Ajouter une colonne pour stocker les incorporations
ALTER TABLE recipes ADD COLUMN embedding vector(1536);
Générer des incorporations
Générez des incorporations pour vos données à l’aide de l’extension azure_ai. Dans ce qui suit, nous vectorisons plusieurs champs, concaténés :
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;
Répétez la commande jusqu’à ce qu’il n’y ait plus de lignes à traiter.
Conseil
Expérimentez avec le LIMIT
. Avec une valeur élevée, l’instruction risque d’échouer à mi-chemin en raison de la limitation imposée par Azure OpenAI. En cas d’échec, attendez au moins une minute, puis réexécutez la commande.
Recherche
Créez une fonction de recherche dans votre base de données pour des raisons pratiques :
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;
Maintenant, appelez tout simplement la fonction pour effectuer une recherche :
select recipeid, recipe_name, score from recipe_search('vegan recipes', 10);
Puis explorez les résultats :
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)
Contenu connexe
- Intégrer Azure Database pour PostgreSQL – Serveur flexible à Azure Cognitive Services
- Générer des incorporations vectorielles dans Azure Database pour PostgreSQL – Serveur flexible avec un LLM déployé localement (préversion)
- Intégrer Azure Database pour PostgreSQL à Azure Machine Learning Services
- Générer des incorporations vectorielles avec Azure OpenAI dans Azure Database pour PostgreSQL – Serveur flexible
- Extension Azure AI dans Azure Database pour PostgreSQL – Serveur flexible
- IA générative avec Azure Database pour PostgreSQL – Serveur flexible
- Système de recommandation avec Azure Database pour PostgreSQL – Serveur flexible et Azure OpenAI
- Activer et utiliser pgvector dans Azure Database pour PostgreSQL – Serveur flexible