Apprentissage automatique Azure et OpenAI
Vous pouvez migrer votre application de commerce électronique d'un environnement sur place vers Microsoft Azure à l'aide d'Oracle AI Database@Azure pour stocker les données du catalogue de produits. Si vous êtes limité à la recherche Like dans l'environnement sur place, vous pouvez tirer parti des capacités d'Oracle AI Vector Search dans Oracle AI Database 26ai avec Azure OpenAI pour remplacer la recherche basée sur Like par la recherche sémantique.
Architecture de la solution

Dans cette architecture, l'application et Oracle AI Database@Azure s'exécutent dans un réseau virtuel (VNET). Le serveur d'applications s'exécute dans un sous-réseau dédié et communique avec Oracle AI Database@Azure au moyen d'un sous-réseau délégué qui est mappé au sous-réseau client. Pour les données de catalogue de produits existantes, Azure OpenAI génère des intégrations vectorielles. Le service de calcul de l'espace de travail Azure OpenAI sert de serveur par lots pour la génération unique d'intégration de vecteurs. Le serveur d'applications communique avec Azure OpenAI pour la génération d'intégration de vecteurs en temps réel.
Conditions requises
- Créer une base de données Exadata Oracle (26ai).
- Obtenez la chaîne de connexion pour la base de données enfichable Oracle Database.
Pour demander une augmentation du quota du service Azure OpenAI Foundry, voir Azure OpenAI dans les quotas et limites des modèles de fonderie Microsoft.
Cette solution comprend les étapes suivantes :
- Créez le schéma de base de données.
- Créez la table de base de données pour l'état actuel.
- Mettez à jour le schéma pour utiliser le vecteur d'IA pour l'état futur.
- Créez Azure OpenAI.
- Déployer un modèle d'intégration de texte.
- Créez Azure Machine Learning.
- Créez une instance de calcul.
- Utilisez l'instance de calcul pour exécuter le code de carnet.
- Créez un carnet Python.
- Charger les données-échantillons dans la table existante.
- Enrichissez les données avec Oracle AI Vector Search.
- Exécuter des interrogations de recherche sémantique (interrogation magique).
- Créez une instance de calcul.
Étapes suivantes : Passez à l'onglet Oracle AI Database et suivez les instructions étape par étape.
- Créez le schéma de base de données.
Créer une table Oracle AI Database (état courant)
- Se connecter à Oracle Exadata Database. Pour les instructions étape par étape, voir la section Connexion - Base de données Exadata.
- Créez un utilisateur dans la base de données et accordez à l'utilisateur le rôle
dbaqui lui permet de se connecter à la base de données.create user DEMO_USER identified by "demo****password"; grant connect, dba to DEMO_USER; - Créez une table de base de données nommée Produit dans Oracle AI Database.
CREATE TABLE product ( product_id INT GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), main_category VARCHAR2(255), title VARCHAR2(2000), average_rating FLOAT, rating_number INT, features CLOB, description CLOB, price VARCHAR2(256), images JSON, videos CLOB, store VARCHAR2(4000), categories CLOB, details CLOB, parent_asin VARCHAR2(255), bought_together CLOB ); -- Add indexes alter table "DEMO_USER"."PRODUCT" add constraint PK_PRODUCT_PRODUCTID primary key("PRODUCT_ID");
Moderniser le schéma avec Oracle AI Vector Search (Future State)
Mettez à jour la table existante d'Oracle AI Database afin d'utiliser les capacités d'IA disponibles dans Oracle AI Database 26ai ou une version ultérieure pour l'intégration au modèle d'intégration de texte Azure OpenAI.
- Exécutez l'énoncé SQL suivant dans Oracle AI Database pour modifier la table Produit et ajouter une colonne vectorielle :
ALTER TABLE product ADD (title_embedding VECTOR(3072, FLOAT32)); - Exécutez l'énoncé SQL suivant dans Oracle AI Database pour mettre à jour les rangées avec une valeur de titre nulle pour l'identification logique de l'intelligence artificielle :
UPDATE "DEMO_USER"."PRODUCT" SET title = 'Missing Title' WHERE title IS NULL;
Étapes suivantes : Passez à l'onglet Azure OpenAI et suivez les instructions étape par étape.
Voici les étapes pour créer une ressource Azure OpenAI.
- À partir du portail Azure, accédez à Azure OpenAI.

- Dans le menu de navigation de gauche, localisez la section Utiliser avec la fonderie, puis sélectionnez Azure OpenAI.

- Sélectionnez le bouton + Create (Créer).
- Vous pouvez sélectionner + Create (Créer) dans la barre d'outils supérieure, ou
- Select the + Create button in the center of the page under No Azure OpenAI to display.
- Dans la liste déroulante + Create (Créer), sélectionnez l'option Azure OpenAI pour démarrer le flux de travail Create Azure OpenAI.
- Dans l'onglet Informations de base du flux de travail Créer Azure OpenAI, entrez les informations suivantes :
- Dans la liste déroulante Abonnement, sélectionnez votre abonnement Azure.
- Sélectionnez un groupe de ressources existant ou sélectionnez Créer pour en créer un.
- Entrez un nom de ressource unique dans l'abonnement sélectionné. Seuls les caractères alphanumériques et les tirets sont autorisés. La valeur doit comporter entre 2 et 64 caractères et ne peut pas commencer ni se terminer par un tiret.
- Sélectionnez le niveau de tarification requis pour le dimensionnement et la capacité. Pour plus d'informations, voir Voir les détails complets des tarifs.
- Vérifiez les informations et les liens de la politique dans la section Politique de révision de contenu.
- Sélectionnez le bouton Suivant pour continuer.

- Dans l'onglet Réseau du flux de travail Créer Azure OpenAI, entrez les informations suivantes :
- Dans la section Type, sélectionnez l'option Réseaux sélectionnés, configurer la sécurité du réseau pour votre ressource des services d'intelligence artificielle Azure pour autoriser l'accès à partir d'un réseau virtuel et d'un sous-réseau spécifiques.
- Sélectionnez Réseau virtuel dans la liste des réseaux virtuels existants.
- Sélectionnez le sous-réseau que vous avez créé pour l'application dans la liste Sous-réseaux.
- Sous la section Pare-feu, vous pouvez laisser le champ Intervalle d'adresses vide, sauf si vous souhaitez mettre en liste blanche l'adresse IP/CIDR source.
- Sélectionnez le bouton Suivant pour continuer.

- Dans l'onglet Marqueurs du flux de travail Créer Azure OpenAI, entrez les informations suivantes :
- Ajoutez Nom et Valeur pour les marqueurs. Vous pouvez ajouter plusieurs marqueurs.
- Sélectionnez le bouton Suivant pour continuer.

- Dans l'onglet Vérifier + soumettre du flux de travail Créer Azure OpenAI, vérifiez vos informations. Sélectionnez le bouton Créer pour lancer la création de la ressource ou sélectionnez Précédent pour apporter les modifications requises.

- Naviguez jusqu'à la ressource Azure OpenAI nouvellement créée à partir de Microsoft Foundry > Utiliser avec Foundry > Azure OpenAI. Ensuite, dans Azure OpenAI > Aperçu, sélectionnez Explorer le portail Foundry pour déployer le modèle d'intégration de texte.

Déployer le modèle d'intégration de texte
- Dans le portail Azure AI Foundry, naviguez jusqu'à la section Playgrounds (Terrains de jeu), puis sélectionnez Chat (Clavarder).

- Sélectionnez le bouton + Create a deployment (Créer un déploiement).

- Sélectionnez le bouton + Déployer le modèle pour voir les options de déploiement. Sélectionnez l'option Déployer le modèle de base.
- Dans la liste des modèles, sélectionnez text-embedding-3-large.

- Dans la page Deploy text-embedding-3-large, entrez les informations suivantes :
- Entrez un nom de déploiement descriptif et unique pour le modèle.
- Sélectionnez le type de déploiement Standard pour autoriser d'autres configurations
- Les valeurs par défaut sont Version de modèle, Ressource IA et Filtre de contenu.
- Définissez la limite de débit de jetons par minute pour ce déploiement en fonction de vos besoins. Par exemple, il est réglé à 400K.
- Activer le quota dynamique.
- Sélectionnez Déployer pour créer le déploiement avec les paramètres sélectionnés.

- Naviguez jusqu'à Ressources partagées, puis sélectionnez Déploiements. Sélectionnez le modèle d'intégration de texte récemment déployé pour obtenir les informations de configuration en vue d'une intégration ultérieure au carnet de notes.
- Les informations sur le point d'extrémité, notamment l'URI cible et la clé, sont requises pour une intégration ultérieure.

Étapes suivantes : Passez à l'onglet Apprentissage automatique Azure et suivez les instructions étape par étape.
- À partir du portail Azure, accédez à Azure OpenAI.
Créer un apprentissage automatique Azure
- À partir du portail Azure, accédez à Azure Machine Learning.

- Sélectionnez le bouton + Create (Créer), puis sélectionnez l'option New workspace (Nouvel espace de travail) dans la liste déroulante.

- Dans l'onglet Informations de base du flux de travail Azure Machine Learning, entrez les informations suivantes :
- Dans la liste déroulante Abonnement, sélectionnez votre abonnement Azure.
- Sélectionnez un groupe de ressources existant ou sélectionnez Créer pour en créer un.
- Entrez un nom pour l'espace de travail. Le nom doit comporter entre 3 et 33 caractères. Son premier caractère doit être alphanumérique et le reste peut contenir des traits d'union et des traits de soulignement. Aucun blanc n'est autorisé.
- Sélectionnez Région pour spécifier l'emplacement physique où l'espace de travail est déployé.
- Créez un compte de stockage ou sélectionnez un compte existant dans votre abonnement. Un compte de stockage est utilisé comme magasin de données par défaut pour l'espace de travail.
- Créez une nouvelle ressource Chambre forte de clés Azure ou sélectionnez une ressource existante dans votre abonnement. Une chambre forte de clés stocke les informations sensibles dont l'espace de travail a besoin.
- Créez une nouvelle ressource Informations clés sur l'application Azure ou sélectionnez une ressource existante dans votre abonnement. L'espace de travail utilise les informations clés sur l'application Azure pour stocker des informations de surveillance sur vos modèles déployés.
- Facultativement, créez la ressource Registre de conteneurs ou sélectionnez une ressource existante dans votre abonnement. Un registre de conteneurs stocke les images Docker que vous utilisez pour l'entraînement et les déploiements. Pour réduire les coûts, Azure crée une nouvelle ressource Azure Container Registry uniquement après avoir créé votre première image.
- Sélectionnez le bouton Suivant : Accès entrant pour continuer.

- Dans l'onglet Accès entrant du flux de travail Azure Machine Learning, entrez les informations suivantes :
- Sélectionnez les options Tous les réseaux comme Accès au réseau public.
- Sélectionnez le bouton Suivant : Accès sortant pour continuer.

- Dans l'onglet Accès sortant du flux de travail Azure Machine Learning, entrez les informations suivantes :
- Sélectionnez les options Public comme Isolement du réseau. Avec cette option, le service de calcul peut accéder aux ressources publiques et le déplacement des données sortantes n'est pas restreint.
- Sélectionnez le bouton Suivant : Chiffrement pour continuer.

- Dans l'onglet Chiffrement du flux de travail Azure Machine Learning, entrez les informations suivantes :
- Laissez la case Chiffrer les données à l'aide d'une clé gérée par le client désélectionnée.
- Sélectionnez le bouton Suivant : Identité pour continuer.

- Dans l'onglet Identité du flux de travail Apprentissage automatique Azure, entrez les informations suivantes :
- Faites défiler vers le bas jusqu'à la section Accès au compte de stockage, puis sélectionnez l'option Accès basé sur les données d'identification comme Type d'accès au compte de stockage.
- Laissez la case Espace de travail à incidence commerciale élevée désélectionnée.
- Sélectionnez le bouton Suivant : Marqueurs pour continuer.

- Dans l'onglet Marqueurs du flux de travail Azure Machine Learning, entrez les informations suivantes :
- Ajoutez Nom et Valeur pour les marqueurs. Vous pouvez ajouter plusieurs marqueurs.
- Sélectionnez le bouton Suivant : Vérifier + créer pour continuer.

- Dans l'onglet Vérifier + soumettre du flux de travail Azure Machine Learning, vérifiez vos informations. Sélectionnez le bouton Créer pour créer un espace de travail d'apprentissage automatique ou sélectionnez < Précédent pour apporter les modifications requises.

- Une fois l'espace de travail créé, sélectionnez le bouton Aller à la ressource.

- Dans Espace de travail d'apprentissage automatique Azure, sélectionnez Aperçu, puis le bouton Lancer le studio pour ouvrir Azure Machine Learning Studio.

Studio d'apprentissage automatique Azure
- Dans la page Machine Learning Studio, naviguez jusqu'à la section Manage (Gérer). Dans le menu de gauche, sélectionnez Calcul.

- Sélectionnez le bouton + Nouveau pour créer une instance de calcul.

- Dans la section Paramètres requis du flux de travail Créer une instance de calcul, entrez les informations suivantes :
- Entrez un nom unique dans le champ Nom du service de calcul pour votre instance de calcul.
- Il s'agit d'un champ obligatoire et le nom du service de calcul doit comporter entre 3 et 24 caractères.
- Les caractères valides sont les lettres majuscules et minuscules, les chiffres et les tirets.
- Le nom de calcul doit commencer par une lettre.
- Le nom de calcul doit être unique dans tous les calculs existants dans une région Azure.
- Si un tiret est utilisé, il doit être suivi d'au moins une lettre plus tard dans le nom.
- Sélectionnez UC comme type de machine virtuelle pour les opérations intensives en UC.
- Sélectionnez Standard_E4ds_v4 comme Taille de machine virtuelle ou choisissez une taille similaire qui convient à la manipulation de données et à l'entraînement sur des jeux de données de moyenne à grande taille.
- Sélectionnez le bouton Suivant pour continuer.

- Entrez un nom unique dans le champ Nom du service de calcul pour votre instance de calcul.
- Dans la section Programmation du flux de travail Créer une instance de calcul, entrez les informations suivantes :
- Activez l'option Arrêt automatique après la temporisation d'inactivité.
- Réglez Arrêter après à 60 Minutes.
- Sélectionnez le bouton Suivant pour continuer.

- Dans la section Sécurité du flux de travail Créer une instance de calcul, entrez les informations suivantes :
- Les options Affectation d'utilisateur, Identité affectée et SSH sont désactivées par défaut.
- Activez le commutateur Réseau virtuel, puis, dans la liste déroulante, sélectionnez votre réseau virtuel et votre sous-réseau pour configurer cette connexion d'instance de calcul où l'accès à Oracle Database est configuré.
- Activez l'accès racine et l'authentification unique.
- Sélectionnez le bouton Suivant pour continuer.

- Dans la section Applications du flux de travail Créer une instance de calcul, aucune modification n'est requise. Sélectionnez le bouton Suivant pour continuer.

- Dans la section Marqueurs du flux de travail Créer une instance de calcul, entrez des marqueurs en tant que chaînes de paire Clé et Valeur. Vous pouvez ajouter plusieurs marqueurs. Sélectionnez le bouton Suivant pour continuer.

- Dans la section Vérifier du flux de travail Créer une instance de calcul, vérifiez vos informations. Sélectionnez le bouton Créer pour créer une instance de calcul ou sélectionnez le bouton Précédent pour apporter les modifications requises.

- Une fois votre instance de calcul créée, naviguez jusqu'à Calcul dans la page Machine Learning Studio, puis sélectionnez le lien Nom pour voir les détails et les configurations.

- Étape suivante : Créez un calcul d'apprentissage automatique Azure - Carnet.
Azure Machine Learning Studio Compute - Ordinateur portable
- Dans la page Machine Learning Studio, naviguez jusqu'à la section Création. Sélectionnez Carnets dans le menu de gauche.

- Dans la page Carnets, sélectionnez l'onglet Fichiers, puis sélectionnez les trois points (...) à côté de votre nom sous Utilisateurs. Sélectionnez ensuite l'option Créer un fichier dans la liste déroulante.

- Entrez
01_Load_Data.ipynbdans le champ Nom du fichier, puis sélectionnez Type de fichier comme carnet (*ipynb). Sélectionnez le bouton Créer.
- Modifiez le carnet Python, puis ajoutez les blocs Code suivants à votre carnet. De plus, vous pouvez ajouter des sections Markdown (Mise à zéro) pour le contenu et la documentation insérés.
- Mettez à jour la valeur Connexion pour la chaîne de connexion Oracle Database.
Exécutez le code suivant pour installer les bibliothèques Python requises :
%pip install -U oracledb %pip install datasets==3.6.0Exécutez le code suivant pour configurer l'environnement avec toutes les bibliothèques requises :
import json from datasets import load_dataset import getpass import oracledb
Exécutez le code suivant pour tester la connectivité de la base de données :
userpwd = getpass.getpass("Enter password: ") connection = oracledb.connect(user="DEMO_USER", password=demo****password, host="vm-*****-scan.ocidemoclients.ocidemovnet01.oraclevcn.com", port=1521, service_name="DEMOCDB1_DEMOPDB01.paas.oracle.com") print("Successfully connected to Oracle Database")Exécutez le code suivant pour charger les données
McAuley-Lab/Amazon-Reviews-2023 meta_Clothing_Shoes_and_Jewelrydans Oracle Database à l'aide de cette approche :dataset = load_dataset("McAuley-Lab/Amazon-Reviews-2023", "raw_meta_Amazon_Fashion", split="full", trust_remote_code=True) # print(dataset[0]) userpwd = getpass.getpass("Enter password: ") connection = oracledb.connect(user="DEMO_USER", password=demo****password, host="vm-****-scan.ocidemoclients.ocidemovnet01.oraclevcn.com", port=1521, service_name="DEMOCDB1_DEMOPDB01.paas.oracle.com") print("Successfully connected to Oracle Database") cursor = connection.cursor() insert_query = """ INSERT INTO product (main_category, title, average_rating, rating_number, features, description, price, images, videos, store, categories, details, parent_asin, bought_together) VALUES (:main_category, :title, :average_rating, :rating_number, :features, :description, :price, :images, :videos, :store, :categories, :details, :parent_asin, :bought_together) """ for record in dataset: cursor.execute(insert_query, main_category=record['main_category'], title=record['title'], average_rating=record['average_rating'], rating_number=record['rating_number'], features=json.dumps(record.get('features', [])), description=json.dumps(record.get('description', [])), price=record['price'], images=json.dumps(record.get('images', {})), videos=json.dumps(record.get('videos', {})), store=record['store'], categories=json.dumps(record.get('categories', [])), details=json.dumps(record.get('details', {})), parent_asin=record['parent_asin'], bought_together=record['bought_together'] ) connection.commit() cursor.close() connection.close() - Mettez à jour la valeur Connexion pour la chaîne de connexion Oracle Database.
- Le carnet doit ressembler à l'exemple suivant.

- Suivez les étapes précédentes pour créer un autre carnet nommé 02_Generate_Vector_Embedding.ipynb, puis ajoutez les extraits de code suivants.
- Mettez à jour les valeurs api_key et azure_endpoint avec les valeurs réelles des détails du modèle d'intégration de texte.
- Mettez à jour la valeur Connexion pour la chaîne de connexion Oracle Database.
Note
La génération de l'intégration vectorielle entraîne des coûts de calcul basés sur le volume de données. Limitez le nombre d'enregistrements dans la table Produit afin de réduire les coûts de calcul.Exécutez le code suivant pour installer les bibliothèques requises :%pip install openai --upgrade %pip install oracledb --upgradeExécutez le code suivant pour configurer Azure OpenAI et générer l'intégration :import pandas as pd import json import os import getpass import oracledb import openai import array import time # Set your OpenAI API Key api_type = "azure" api_key = "Adw3Y1QIG5ueN6TPUD7**************************w3AAABACOGiX0G" azure_endpoint = "https://demo-azure-openai-service.openai.azure.com/" api_version = "2024-02-01" client = openai.AzureOpenAI( azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version ) # Function to Generate the Embeddings deployment = "text-embedding-3-large" def generate_embeddings(text): response = client.embeddings.create( input=text, model=deployment ) return response.data[0].embedding # Batch Size batch_size = 100 record_count = 826108 start_id = 824101 end_id = 0 # Load your dataset userpwd = getpass.getpass("Enter password: ") connection = oracledb.connect(user="DEMO_USER", password=demo****password, host="vm-*****-scan.ocidemoclients.ocidemovnet01.oraclevcn.com", port=1521, service_name="DEMOCDB1_DEMOPDB01.paas.oracle.com") print("Successfully connected to Oracle Database") cursor = connection.cursor() select_query = """select product_id, title from product where product_id between :startid and :endid""" for i in range(start_id, record_count, batch_size): start_id = i end_id = i + batch_size # Generate embeddings for each row in the "title" column binds = [] for product_id, title in cursor.execute(select_query, startid=start_id, endid=end_id): response = generate_embeddings(title) vec = array.array("f", response) binds.append([vec, product_id]) print("Embedding completed for " + str(end_id)) connection.autocommit = True # Update the database with Vector Embeddings cursor.executemany( """update product set title_embedding = :1 where product_id = :2""", binds, ) time.sleep(2) # Close the connection connection.commit() cursor.close() connection.close()
- Suivez les étapes précédentes pour ajouter le fichier de carnet Python final, 03_Semantic_Search.ipynb, puis ajoutez les sections de code suivantes.
- Mettez à jour les valeurs api_key et azure_endpoint avec les valeurs réelles des détails du modèle d'intégration de texte.
- Mettez à jour la valeur Connexion pour la chaîne de connexion Oracle Database.
Exécutez le code suivant pour installer les bibliothèques requises :
%pip install openai --upgrade %pip install oracledb --upgradeExécutez le code suivant pour générer l'intégration sur l'entrée et effectuer la recherche dans la base de données :
import os import sys import getpass import array import oracledb import openai from skimage import io import matplotlib.pyplot as plt import requests # Set your OpenAI API Key api_type = "azure" api_key = "Adw3Y1QIG5ueN6TPUD7**************************w3AAABACOGiX0G" azure_endpoint = "https://demo-azure-openai-service.openai.azure.com/" api_version = "2024-02-01" client = openai.AzureOpenAI( azure_endpoint=azure_endpoint, api_key=api_key, api_version=api_version ) # Function to Generate the Embeddings deployment = "text-embedding-3-large" def generate_embeddings(text): response = client.embeddings.create( input=text, model=deployment ) return response.data[0].embedding # Create a connection to the database userpwd = getpass.getpass("Enter password: ") connection = oracledb.connect(user="DEMO_USER", password=demo****password, host="vm-*****-scan.ocidemoclients.ocidemovnet01.oraclevcn.com", port=1521, service_name="DEMOCDB1_DEMOPDB01.paas.oracle.com") print("Successfully connected to Oracle Database") cursor = connection.cursor() search_query = """select product_id, json_value(images, '$.hi_res[0]') as image_url, title from product where json_value(images, '$.hi_res[0]') is not null order by vector_distance(title_embedding, :1, EUCLIDEAN) fetch first 5 rows only""" while True: # Get the input text to vectorize text = input("\Enter a phrase. Type quit to exit : ") if (text == "quit") or (text == "exit"): break if text == "": continue sentence = [text] response = generate_embeddings(sentence) vec = array.array("f", response) print("vector embedding generated") cursor.execute(search_query, [vec]) result = cursor.fetchall() image_urls = [] plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True for record in result: image_url = record[1] urldata = requests.get(image_url).content print("Product Id: " + str(record[0])) a = io.imread(image_url) plt.imshow(a) plt.axis('off') plt.show() # Close the connection connection.commit() cursor.close() connection.close()
- Exécutez le code de chaque carnet dans l'ordre suivant.
01_Load_Data: Extrayez des données-échantillons de catalogue de magasin de détail à partir d'un jeu de données public et insérez-les dans Oracle Database.02_Generate_Vector_Embeeding: Générer des données vectorielles pour le titre du produit et les mettre à jour dans la colonne de vecteur de produit.03_Semantic_Search: Générer l'intégration vectorielle pour le texte de recherche d'utilisateur et sélectionner des enregistrements dans la table Produit avec un algorithme de distance et les afficher en sortie pour le résultat correspondant.
- À partir du portail Azure, accédez à Azure Machine Learning.