Azure Machine Learning e OpenAI

È possibile eseguire la migrazione dell'applicazione e-commerce da un ambiente on-premise a Microsoft Azure utilizzando Oracle AI Database@Azure per memorizzare i dati del catalogo prodotti. se si è limitati alla ricerca Like nell'ambiente on-premise, è possibile utilizzare le funzionalità di Oracle AI Vector Search in Oracle AI Database 26ai con Azure OpenAI per sostituire la ricerca basata su Like con la ricerca semantica.

Architettura della soluzione

Questo screenshot mostra il diagramma dell'architettura.

In questa architettura, l'applicazione e Oracle AI Database@Azure vengono eseguiti in una rete virtuale (VNET). L'Application Server viene eseguito in una subnet dedicata e comunica con Oracle AI Database@Azure tramite una subnet delegata mappata alla subnet client. Per i dati del catalogo prodotti esistenti, Azure OpenAI genera incorporamenti vettoriali. La computazione dell'area di lavoro di Azure OpenAI funge da server batch per la generazione di incorporamenti vettoriali una tantum. L'Application Server comunica con Azure OpenAI per la generazione di incorporamenti vettoriali in tempo reale.

Requisiti indispensabili

Di seguito sono riportati i requisiti per l'implementazione di questa soluzione.
  1. Creare un Exadata Database Oracle (26ai).
  2. Ottenere la stringa di connessione per il pluggable database (PDB) di Oracle Database.
Nota

Per richiedere un aumento della quota del servizio Foundry di Azure OpenAI, vedere Azure OpenAI nelle quote e nei limiti di Microsoft Foundry Models.
  • Questa soluzione prevede i passi riportati di seguito.

    1. Creare lo schema di database.
      1. Creare la tabella di database per lo stato corrente.
      2. Aggiornare lo schema per utilizzare AI Vector per lo stato futuro.
    2. Creare Azure OpenAI.
      1. Distribuire un modello di incorporamento del testo.
    3. Creare Azure Machine Learning.
      1. Creare un'istanza di computazione.
        1. Utilizzare l'istanza di computazione per eseguire il codice notebook.
      2. Creare un notebook Python.
        1. Caricare i dati campione nella tabella esistente.
        2. Arricchisci i dati con Oracle AI Vector Search.
        3. Eseguire query di ricerca semantica (Magic Query).

    Passi successivi: passare alla scheda Oracle AI Database e seguire le istruzioni dettagliate.

  • Crea tabella Oracle AI Database (stato corrente)

    1. Connettersi a Oracle Exadata Database. Per istruzioni dettagliate, vedere la sezione Connetti - Database Exadata.
    2. Creare un nuovo utente nel database e concedere all'utente il ruolo dba che consente all'utente di connettersi al database.
      
      create user DEMO_USER identified by "demo****password";
      grant connect, dba to DEMO_USER;
    3. Creare una nuova tabella di database denominata Product in 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"); 

    Modernizza lo schema con Oracle AI Vector Search (stato futuro)

    Aggiorna la tabella Oracle AI Database esistente per utilizzare le funzionalità AI disponibili in Oracle AI Database 26ai o versioni successive per l'integrazione con il modello di incorporamento del testo OpenAI di Azure.

    1. Eseguire la seguente istruzione SQL in Oracle AI Database per modificare la tabella Product e aggiungere una colonna vettoriale:
      ALTER TABLE product  ADD (title_embedding VECTOR(3072, FLOAT32));
    2. Eseguire la seguente istruzione SQL in Oracle AI Database per aggiornare le righe con un valore di titolo nullo per l'identificazione logica AI:
      
      UPDATE "DEMO_USER"."PRODUCT"
      SET title = 'Missing Title'
      WHERE title IS NULL;

    Passi successivi: passare alla scheda Azure OpenAI e seguire le istruzioni dettagliate.

  • Questi sono i passi per creare una risorsa OpenAI di Azure.

    1. Dal portale di Azure, passare a Azure OpenAI.Questo screenshot mostra come passare a Azure OpenAI.
    2. Nel menu di navigazione a sinistra, individuare la sezione Usa con Foundry, quindi selezionare Azure OpenAI.Questo screenshot mostra come passare a Azure OpenAI.
    3. Selezionare il pulsante + Crea.
      • È possibile selezionare + Crea nella barra degli strumenti superiore oppure
      • Selezionare il pulsante + Crea al centro della pagina in Nessun Azure OpenAI da visualizzare.
    4. Nell'elenco a discesa + Crea selezionare l'opzione Azure OpenAI per avviare il workflow Crea Azure OpenAI.
    5. Nella scheda Informazioni di base del workflow Crea Azure OpenAI, immettere le informazioni riportate di seguito.
      1. Nell'elenco a discesa Sottoscrizione selezionare la sottoscrizione di Azure.
      2. Selezionare un gruppo di risorse esistente oppure selezionare Crea nuovo per crearne uno.
      3. Immettere un nome risorsa univoco all'interno della sottoscrizione selezionata. Sono consentiti solo caratteri alfanumerici e trattini. Il valore deve avere una lunghezza compresa tra 2 e 64 caratteri e non può iniziare o terminare con un trattino.
      4. Selezionare il livello di determinazione prezzi necessario per il dimensionamento e la capacità. Per ulteriori informazioni, vedere Visualizza i dettagli completi dei prezzi.
      5. Rivedere le informazioni sui criteri e i collegamenti disponibili nella sezione Criterio di revisione del contenuto.
      6. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare Azure OpenAI.
    6. Nella scheda Rete del workflow Crea Azure OpenAI, immettere le informazioni riportate di seguito.
      1. Nella sezione Tipo, scegliere l'opzione Reti selezionate, configurare la sicurezza di rete per la risorsa dei servizi AI di Azure per consentire l'accesso da una rete virtuale e una subnet specifiche.
      2. Selezionare Rete virtuale dall'elenco delle reti virtuali esistenti.
      3. Selezionare la subnet creata per l'applicazione dall'elenco Subnet.
      4. Nella sezione Firewall è possibile lasciare vuoto il campo Intervallo di indirizzi a meno che non si desideri inserire nella lista di inclusione l'IP/CIDR di origine.
      5. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare Azure OpenAI.
    7. Nella scheda Tag del workflow Crea Azure OpenAI, immettere le informazioni riportate di seguito.
      1. Aggiungere i valori Nome e Valore per le tag. È possibile aggiungere più tag.
      2. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare Azure OpenAI.
    8. Nella scheda Rivedi + sottometti del workflow Crea Azure OpenAI, rivedere le informazioni. Selezionare il pulsante Crea per avviare la creazione della risorsa oppure selezionare Precedente per apportare le modifiche necessarie.Questo screenshot mostra come creare Azure OpenAI.
    9. Passare alla risorsa Azure OpenAI appena creata da Microsoft Foundry > Usa con Foundry > Azure OpenAI. Quindi, in Azure OpenAI > Panoramica, selezionare Esplora portale Foundry per distribuire il modello di incorporamento del testo.Questo screenshot mostra come andare al portale Esplora Fonderia.

    Distribuisci modello di incorporamento testo

    1. Nel portale Azure AI Foundry, andare alla sezione Playground, quindi selezionare Chat.Questo screenshot mostra come creare una distribuzione.
    2. Selezionare il pulsante + Crea una distribuzione.Questo screenshot mostra come creare una distribuzione.
    3. Selezionare il pulsante + Distribuisci modello per visualizzare le opzioni di distribuzione. Selezionare l'opzione Distribuisci modello base.
    4. Dall'elenco dei modelli, selezionare text-embedding-3-large.Questo screenshot mostra come creare una distribuzione.
    5. Nella pagina Distribuisci incorporamento testo-3-grande immettere le informazioni riportate di seguito.
      1. Immettere un nome distribuzione descrittivo e univoco per il modello.
      2. Selezionare Tipo di distribuzione come Standard per consentire altre configurazioni
      3. Versione modello, risorsa AI e Filtro contenuto sono impostati come predefiniti.
      4. Impostare il limite di frequenza dei token al minuto per questa distribuzione in base alle proprie esigenze. Ad esempio, è impostato 400K.
      5. Abilita quota dinamica.
      6. Selezionare Distribuisci per creare la distribuzione con le impostazioni selezionate.
      Questo screenshot mostra come creare una distribuzione.
    6. Passare a Risorse condivise, quindi selezionare Distribuzioni. Selezionare il modello di incorporamento del testo distribuito di recente per ottenere le informazioni di configurazione per l'integrazione successiva con il notebook.
      1. Per un'ulteriore integrazione, sono necessarie informazioni sugli endpoint, tra cui l'URI di destinazione e la chiave.
      Questo screenshot mostra come creare una distribuzione.

    Passi successivi: passare alla scheda Azure Machine Learning e seguire le istruzioni dettagliate.

  • Crea Azure Machine Learning

    1. Dal portale di Azure, passare a Azure Machine Learning.Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    2. Selezionare il pulsante + Crea, quindi selezionare l'opzione Nuova area di lavoro dall'elenco a discesa.Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    3. Nella scheda Informazioni di base del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Nell'elenco a discesa Sottoscrizione selezionare la sottoscrizione di Azure.
      2. Selezionare un gruppo di risorse esistente oppure selezionare Crea nuovo per crearne uno.
      3. Immettere un nome per l'area di lavoro. La lunghezza del nome deve essere compresa tra 3 e 33 caratteri. Il primo carattere deve essere alfanumerico e il resto può contenere trattini e caratteri di sottolineatura. Non sono consentiti spazi vuoti.
      4. Selezionare Area per specificare la posizione fisica in cui viene distribuita l'area di lavoro.
      5. Creare un nuovo account di storage o selezionarne uno esistente nella sottoscrizione. Come data store predefinito per l'area di lavoro viene utilizzato un account di memorizzazione.
      6. Creare una nuova risorsa Vault di chiavi di Azure o selezionarne una esistente nella sottoscrizione. In un vault di chiavi sono memorizzate le informazioni riservate necessarie per l'area di lavoro.
      7. Creare una nuova risorsa Application Insights di Azure o selezionarne una esistente nella sottoscrizione. L'area di lavoro utilizza Applicazioni approfondite di Azure per memorizzare le informazioni di monitoraggio sui modelli distribuiti.
      8. Facoltativamente, creare la risorsa Registro container o selezionarne una esistente nella sottoscrizione. Un registro container memorizza le immagini Docker utilizzate per la formazione e le distribuzioni. Per ridurre al minimo i costi, Azure crea una nuova risorsa Azure Container Registry solo dopo aver creato la prima immagine.
      9. Selezionare il pulsante Successivo: Accesso in entrata per continuare.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    4. Nella scheda Accesso in entrata del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Scegliere le opzioni Tutte le reti come Accesso alla rete pubblica.
      2. Selezionare il pulsante Successivo: Accesso in uscita per continuare.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    5. Nella scheda Accesso in uscita del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Scegliere le opzioni Pubblico come Isolamento di rete. Con questa opzione, la computazione può accedere alle risorse pubbliche e lo spostamento dei dati in uscita è illimitato.
      2. Per continuare, selezionare il pulsante Successivo: cifratura.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    6. Nella scheda Cifratura del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Lasciare deselezionata la casella di controllo Cifra dati utilizzando una chiave gestita dal cliente.
      2. Selezionare il pulsante Successivo: Identità per continuare.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    7. Nella scheda Identità del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Scorrere fino alla sezione Accesso account di storage, quindi selezionare l'opzione Accesso basato su credenziali come Tipo di accesso account di storage.
      2. Lasciare deselezionata la casella di controllo Area di lavoro ad alto impatto aziendale.
      3. Selezionare il pulsante Successivo: Tag per continuare.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    8. Nella scheda Tag del workflow Azure Machine Learning, immettere le informazioni riportate di seguito.
      1. Aggiungere i valori Nome e Valore per le tag. È possibile aggiungere più tag.
      2. Per continuare, selezionare il pulsante Successivo: Rivedi + crea.
      Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    9. Esaminare le informazioni nella scheda Rivedi + sottometti del flusso di lavoro Azure Machine Learning. Selezionare il pulsante Crea per creare un'area di lavoro di apprendimento automatico oppure selezionare < Precedente per apportare le modifiche necessarie.Questo screenshot mostra come utilizzare un'area di lavoro di apprendimento automatico.
    10. Dopo aver creato l'area di lavoro, selezionare il pulsante Vai alla risorsa.Questo screenshot mostra come passare alla risorsa.
    11. Nell'area di lavoro di Azure Machine Learning, selezionare Panoramica, quindi selezionare il pulsante Avvia studio per aprire Azure Machine Learning Studio.Questo screenshot mostra come avviare Studio.

    Azure Machine Learning Studio

    1. Nella pagina Machine Learning Studio andare alla sezione Gestisci. Dal menu a sinistra selezionare Computazione.Questo screenshot mostra come creare un'istanza di computazione.
    2. Selezionare il pulsante + Nuovo per creare un'istanza di computazione.Questo screenshot mostra come creare un'istanza di computazione.
    3. Nella sezione Impostazioni obbligatorie del workflow Crea istanza di computazione, immettere le informazioni riportate di seguito.
      1. Immettere un nome univoco nel campo Nome computazione per l'istanza di computazione.
        1. È un campo obbligatorio e il nome computazione deve avere una lunghezza compresa tra 3 e 24 caratteri.
        2. I caratteri validi sono lettere maiuscole e minuscole, cifre e trattini.
        3. Il campo Nome computazione deve iniziare con una lettera.
        4. Il nome di computazione deve essere univoco in tutte le computazioni esistenti all'interno di un'area Azure.
        5. Se si utilizza un trattino, il nome deve essere seguito da almeno una lettera successiva.
      2. Scegliere CPU come tipo di Virtual Machine per le operazioni a uso intensivo di CPU.
      3. Scegliere Standard_E4ds_v4 come Dimensione Virtual Machine oppure scegliere una dimensione simile adatta per la manipolazione e l'addestramento dei dati in set di dati di medie e grandi dimensioni.
      4. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare un'istanza di computazione.
    4. Nella sezione Pianificazione del workflow Crea istanza di computazione, immettere le informazioni riportate di seguito.
      1. Abilitare l'opzione Arresto automatico dopo il timeout di inattività.
      2. Impostare Chiudi dopo su 60 Minuti.
      3. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare un'istanza di computazione.
    5. Nella sezione Sicurezza del workflow Crea istanza di computazione, immettere le informazioni riportate di seguito.
      1. Per impostazione predefinita, le opzioni Assegnazione utente, Identità assegnata e SSH sono disabilitate.
      2. Abilitare il pulsante di attivazione/disattivazione Rete virtuale e quindi, dall'elenco a discesa, selezionare la rete virtuale e la subnet per configurare questa connessione all'istanza di computazione in cui è configurato l'accesso a Oracle Database.
      3. Abilitare l'accesso root e l'SSO.
      4. Per continuare, selezionare il pulsante Avanti.
      Questo screenshot mostra come creare un'istanza di computazione.
    6. Nella sezione Applicazioni del workflow Crea istanza di computazione, non è necessaria alcuna modifica. Per continuare, selezionare il pulsante Avanti.Questo screenshot mostra come creare un'istanza di computazione.
    7. Nella sezione Tag del workflow Crea istanza di computazione immettere le tag come stringhe di coppia Chiave e Valore. È possibile aggiungere più tag. Per continuare, selezionare il pulsante Avanti.Questo screenshot mostra come creare un'istanza di computazione.
    8. Rivedere le informazioni personali nella sezione Rivedi del workflow Crea istanza di computazione. Selezionare il pulsante Crea per creare un'istanza di computazione o selezionare il pulsante Indietro per apportare le modifiche necessarie.Questo screenshot mostra come creare un'istanza di computazione.
    9. Dopo aver creato l'istanza di computazione, andare alla pagina Computazione di Machine Learning Studio, quindi selezionare il collegamento Nome per visualizzare i dettagli e le configurazioni.Questo screenshot mostra come creare un'istanza di computazione.
    10. Passo successivo: creare una computazione di Azure Machine Learning - Notebook.

    Computazione di Azure Machine Learning Studio - Notebook

    1. Nella pagina Machine Learning Studio andare alla sezione Creazione. Selezionare Notebook dal menu a sinistra.Questo screenshot mostra come creare un notebook in Azure Machine Learning.
    2. Nella pagina Notebook selezionare la scheda File, quindi selezionare i tre punti (...) accanto al nome dell'utente in Utenti. Selezionare quindi l'opzione Crea nuovo file dall'elenco a discesa.Questo screenshot mostra come creare un notebook in Azure Machine Learning.
    3. Immettere 01_Load_Data.ipynb nel campo Nome file, quindi selezionare Tipo di file come Notebook (*ipynb). Selezionare il pulsante Crea. Questo screenshot mostra come creare un notebook in Azure Machine Learning.
    4. Modificare il notebook Python, quindi aggiungere i blocchi codice seguenti al notebook. È inoltre possibile aggiungere sezioni Markdown per il contenuto e la documentazione in linea.
      1. Aggiornare il valore Connessione per la stringa di connessione Oracle Database.

        Eseguire il codice seguente per installare le librerie Python necessarie:

        %pip install -U oracledb %pip install datasets==3.6.0

        Eseguire il codice seguente per impostare l'ambiente con tutte le librerie necessarie:

        
        import json from datasets 
        import load_dataset
        import getpass
        import oracledb

      Eseguire il codice seguente per eseguire il test della connettività del 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")

      Eseguire il codice seguente per caricare i dati McAuley-Lab/Amazon-Reviews-2023 meta_Clothing_Shoes_and_Jewelry in Oracle Database utilizzando questo approccio:

      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()
    5. Il notebook dovrebbe essere simile all'esempio seguente.Questo screenshot mostra come creare un notebook in Azure Machine Learning.
    6. Attenersi alla procedura precedente per creare un altro blocco appunti denominato 02_Generate_Vector_Embedding.ipynb, quindi aggiungere gli snippet di codice seguenti.
      1. Aggiornare i valori api_key e azure_endpoint con i valori effettivi dai dettagli del modello di incorporamento testo.
      2. Aggiornare il valore Connessione per la stringa di connessione di Oracle Database.
        Nota

        La generazione dell'incorporamento vettoriale comporta costi di computazione basati sul volume di dati. Limitare il numero di record nella tabella Prodotto per ridurre i costi di calcolo.
        Eseguire il codice seguente per installare le librerie richieste.
        
        %pip install openai --upgrade
        %pip install oracledb --upgrade
        Eseguire il codice seguente per impostare Azure OpenAI e generare l'incorporamento:
        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()
    7. Seguire i passi precedenti per aggiungere il file notebook Python finale, 03_Semantic_Search.ipynb, quindi aggiungere le sezioni di codice seguenti.
      1. Aggiornare i valori api_key e azure_endpoint con i valori effettivi dai dettagli del modello di incorporamento testo.
      2. Aggiornare il valore Connessione per la stringa di connessione di Oracle Database.

        Eseguire il codice seguente per installare le librerie richieste.

        %pip install openai --upgrade %pip install oracledb --upgrade

        Eseguire il codice seguente per generare l'incorporamento nell'input ed eseguire la ricerca del database:

        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()
    8. Eseguire il codice in ogni blocco appunti nella sequenza seguente.
      1. 01_Load_Data: estrarre i dati di esempio del catalogo del negozio retail dal data set pubblico e inserirli in Oracle Database.
      2. 02_Generate_Vector_Embeeding: genera i dati vettoriali per il titolo del prodotto e li aggiorna nella colonna vettoriale del prodotto.
      3. 03_Semantic_Search: genera l'incorporamento vettoriale per il testo di ricerca dell'utente e seleziona i record dalla tabella Product con algoritmo di distanza e visualizza l'output per il risultato corrispondente.