Azure Machine Learning e OpenAI

Você pode migrar seu aplicativo de eCommerce de um ambiente on-premises para o Microsoft Azure usando o Oracle AI Database@Azure para armazenar os dados do catálogo de produtos. Se você estiver limitado à pesquisa Like no ambiente on-premises, poderá aproveitar os recursos do Oracle AI Vector Search no Oracle AI Database 26ai com o Azure OpenAI para substituir a pesquisa baseada em Like pela pesquisa semântica.

Arquitetura de Solução

Esta captura de tela mostra o diagrama da arquitetura.

Nesta arquitetura, o aplicativo e o Oracle AI Database@Azure são executados em uma rede virtual (VNET). O servidor de aplicativos é executado em uma sub-rede dedicada e se comunica com o Oracle AI Database@Azure por meio de uma sub-rede delegada que é mapeada para a sub-rede do cliente. Para dados existentes do catálogo de produtos, o Azure OpenAI gera incorporações vetoriais. A computação do espaço de trabalho do Azure OpenAI serve como um servidor batch para geração única de incorporação de vetores. O servidor de aplicativos se comunica com o Azure OpenAI para geração de incorporação de vetores em tempo real.

Pré-requisitos

Estes são os requisitos para implementar esta solução:
  1. Crie um Oracle Exadata Database (26ai).
  2. Obtenha a string de conexão do PDB (Oracle Database Pluggable Database).
Observação

Para solicitar um aumento da cota do serviço Azure OpenAI Foundry, consulte Azure OpenAI em cotas e limites do Microsoft Foundry Models.
  • Esta solução tem as seguintes etapas:

    1. Crie o esquema do banco de dados.
      1. Crie a tabela do banco de dados para o estado atual.
      2. Atualize o esquema para usar o AI Vector para o estado futuro.
    2. Crie o Azure OpenAI.
      1. Implante um modelo de incorporação de texto.
    3. Crie o Azure Machine Learning.
      1. Crie uma instância de computação.
        1. Use a instância de computação para executar o código de notebook.
      2. Criar um notebook Python.
        1. Carregar dados de amostra na tabela existente.
        2. Enriqueça os dados com o Oracle AI Vector Search.
        3. Executar consultas de pesquisa semântica (Consulta Mágica).

    Próximas Etapas: Alterne para a guia Oracle AI Database e siga as instruções passo a passo.

  • Criar Tabela do Oracle AI Database (Estado Atual)

    1. Conecte-se ao Oracle Exadata Database. Para obter instruções passo a passo, consulte a seção Conectar - Banco de Dados Exadata.
    2. Crie um novo usuário no banco de dados e conceda ao usuário a atribuição dba que permite ao usuário estabelecer conexão com o banco de dados.
      
      create user DEMO_USER identified by "demo****password";
      grant connect, dba to DEMO_USER;
    3. Crie uma nova tabela de banco de dados chamada Produto no 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"); 

    Modernize o Esquema com o Oracle AI Vector Search (Estado Futuro)

    Atualize a tabela existente do Oracle AI Database para usar os recursos de IA disponíveis no Oracle AI Database 26ai ou posterior para integração com o modelo de incorporação de texto OpenAI do Azure.

    1. Execute a seguinte instrução SQL no Oracle AI Database para alterar a tabela Produto e adicionar uma coluna de vetor:
      ALTER TABLE product  ADD (title_embedding VECTOR(3072, FLOAT32));
    2. Execute a seguinte instrução SQL no Oracle AI Database para atualizar linhas com um valor de título nulo para identificação lógica do AI:
      
      UPDATE "DEMO_USER"."PRODUCT"
      SET title = 'Missing Title'
      WHERE title IS NULL;

    Próximas Etapas: Alterne para a guia Azure OpenAI e siga as instruções passo a passo.

  • Estas são as etapas para criar um recurso OpenAI do Azure.

    1. No portal do Azure, navegue até o Azure OpenAI.Esta captura de tela mostra como navegar até o Azure OpenAI.
    2. No menu de navegação esquerdo, localize a seção Usar com o Foundry e selecione Azure OpenAI.Esta captura de tela mostra como navegar até o Azure OpenAI.
    3. Selecione o botão + Criar.
      • Você pode selecionar + Criar na barra de ferramentas superior ou
      • Selecione o botão + Criar no centro da página em Nenhum Azure OpenAI a ser exibido.
    4. Na lista drop-down + Criar, selecione a opção Azure OpenAI para iniciar o workflow Criar Azure OpenAI.
    5. Na guia Básicos do workflow Criar OpenAI do Azure, especifique as seguintes informações:
      1. Na lista drop-down Assinatura, selecione sua assinatura do Azure.
      2. Selecione um Grupo de recursos existente ou selecione Criar novo para criar um.
      3. Informe um Nome de recurso exclusivo na assinatura selecionada. Somente caracteres alfanuméricos e hifens são permitidos. O valor deve ter de 2 a 64 caracteres e não pode começar ou terminar com um hífen.
      4. Selecione a Camada de preços necessária para dimensionamento e capacidade. Para obter mais informações, consulte Exibir detalhes completos de preços.
      5. Verifique as informações e os links da política na seção Política de revisão de conteúdo.
      6. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar o Azure OpenAI.
    6. Na guia Rede do workflow Criar Azure OpenAI, especifique as seguintes informações:
      1. Na seção Tipo, escolha a opção Redes selecionadas, configure a segurança de rede para seu recurso de serviços de IA do Azure para permitir acesso de Rede Virtual e Sub-rede específicas.
      2. Selecione Rede Virtual na lista de redes virtuais existentes.
      3. Selecione a sub-rede que você criou para o aplicativo na lista de Sub-redes.
      4. Na seção Firewall, você pode deixar o campo Intervalo de endereços em branco, a menos que queira colocar o IP/CIDR de origem na lista de permissões.
      5. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar o Azure OpenAI.
    7. Na guia Tags do workflow Criar Azure OpenAI, especifique as seguintes informações:
      1. Adicione Nome e Valor para tags. Você pode adicionar várias tags.
      2. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar o Azure OpenAI.
    8. Na guia Revisar + submeter do workflow Criar Azure OpenAI, revise suas informações. Selecione o botão Criar para iniciar a criação do recurso ou selecione o Anterior para fazer as alterações necessárias.Esta captura de tela mostra como criar o Azure OpenAI.
    9. Navegue até o recurso Azure OpenAI recém-criado em Microsoft Foundry > Usar com Foundry > Azure OpenAI. Em seguida, em Azure OpenAI > Visão Geral, selecione Explorar portal do Foundry para implantar o modelo de incorporação de texto.Esta captura de tela mostra como navegar até o portal Explorar Fundição.

    Implantar Modelo de Incorporação de Texto

    1. No portal Azure AI Foundry, navegue até a seção Playgrounds e selecione Chat.Esta captura de tela mostra como criar uma implantação.
    2. Selecione o botão + Criar uma implantação.Esta captura de tela mostra como criar uma implantação.
    3. Selecione o botão + Implantar modelo para exibir as opções de implantação. Selecione a opção Implantar modelo base.
    4. Na lista de modelos, selecione text-embedding-3-large.Esta captura de tela mostra como criar uma implantação.
    5. Na página Deploy text-embedding-3-large, especifique as seguintes informações:
      1. Informe um Nome da implantação descritivo e exclusivo para o modelo.
      2. Selecione o Tipo de implantação como Padrão para permitir outras configurações
      3. Versão do modelo, Recurso de IA e Filtro de conteúdo são definidos como padrão.
      4. Defina o Limite de Taxa de Tokens por Minuto para essa implantação com base em seus requisitos. Por exemplo, ele é definido como 400K.
      5. Ative a cota dinâmica.
      6. Selecione Implantar para criar a implantação com as definições selecionadas.
      Esta captura de tela mostra como criar uma implantação.
    6. Navegue até Recursos compartilhados e selecione Implantações. Selecione o modelo de incorporação de texto implantado recentemente para obter as informações de configuração para integração posterior com o notebook.
      1. As informações do ponto final, incluindo o URI de Destino e a Chave, são necessárias para maior integração.
      Esta captura de tela mostra como criar uma implantação.

    Próximas Etapas: Alterne para a guia Azure Machine Learning e siga as instruções passo a passo.

  • Criar Machine Learning do Azure

    1. No portal do Azure, navegue até o Azure Machine Learning.Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    2. Selecione o botão + Criar e selecione a opção Novo espaço de trabalho na lista drop-down.Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    3. Na guia Básicos do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Na lista drop-down Assinatura, selecione sua assinatura do Azure.
      2. Selecione um Grupo de recursos existente ou selecione Criar novo para criar um.
      3. Informe um Nome para o espaço de trabalho. O Nome deve ter entre 3 e 33 caracteres de extensão. Seu primeiro caractere deve ser alfanumérico, e o restante pode conter hifens e sublinhados. Nenhum espaço em branco é permitido.
      4. Selecione Região para especificar o local físico em que o espaço de trabalho está implantado.
      5. Crie uma nova Conta de armazenamento ou selecione uma existente em sua assinatura. Uma Conta de armazenamento é usada como o armazenamento de dados padrão para o espaço de trabalho.
      6. Crie um novo recurso do vault de chaves do Azure ou selecione um existente em sua assinatura. Um vault de chaves armazena informações confidenciais de que o espaço de trabalho precisa.
      7. Crie um novo recurso de insights de aplicativos do Azure ou selecione um existente em sua assinatura. O espaço de trabalho usa Insights de aplicativos do Azure para armazenar informações de monitoramento sobre seus modelos implantados.
      8. Opcionalmente, crie o recurso de Registro de contêiner ou selecione um existente em sua assinatura. Um registro de contêiner armazena imagens do Docker que você usa para treinamento e implantações. Para minimizar custos, o Azure cria um novo recurso do Azure Container Registry somente depois que você cria sua primeira imagem.
      9. Selecione o botão Próximo : Acesso de Entrada para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    4. Na guia Acesso de Entrada do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Escolha as opções Todas as redes como Acesso público à rede.
      2. Selecione o botão Próximo : Acesso de Saída para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    5. Na guia Acesso de Saída do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Escolha as opções Público como Isolamento de rede. Com essa opção, o serviço Compute pode acessar recursos públicos e a movimentação de dados de saída é irrestrita.
      2. Selecione o botão Próximo : Criptografia para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    6. Na guia Criptografia do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Deixe a caixa de seleção Criptografar dados usando uma chave gerenciada pelo cliente desmarcada.
      2. Selecione o botão Próximo : Identidade para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    7. Na guia Identidade do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Role para baixo até a seção Acesso à conta de armazenamento e, em seguida, selecione a opção Acesso baseado em credencial como Tipo de acesso à conta de armazenamento.
      2. Deixe a caixa de seleção Espaço de trabalho de alto impacto nos negócios desmarcada.
      3. Selecione o botão Próximo : Tags para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    8. Na guia Tags do workflow do Azure Machine Learning, especifique as seguintes informações:
      1. Adicione Nome e Valor para tags. Você pode adicionar várias tags.
      2. Selecione o botão Próximo: Verificar + criar para continuar.
      Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    9. Na guia Revisar + enviar do workflow Azure Machine Learning, verifique suas informações. Selecione o botão Criar para criar um espaço de trabalho de aprendizado de máquina ou selecione o < Anterior para fazer as alterações necessárias.Esta captura de tela mostra como um espaço de trabalho de aprendizado de máquina.
    10. Depois que o espaço de trabalho for criado, selecione o botão Ir para recurso.Esta captura de tela mostra como navegar até o recurso.
    11. No espaço de trabalho do Azure Machine Learning, selecione Visão Geral e selecione o botão Iniciar estúdio para abrir o Azure Machine Learning Studio.Esta captura de tela mostra como lançar o estúdio.

    Estúdio de Machine Learning do Azure

    1. Na página Estúdio de Machine Learning, navegue até a seção Gerenciar. Formule o menu esquerdo, selecione Compute.Esta captura de tela mostra como criar uma instância de computação.
    2. Selecione o botão + Novo para criar uma instância de computação.Esta captura de tela mostra como criar uma instância de computação.
    3. Na seção Definições obrigatórias do workflow Criar instância de computação, especifique as seguintes informações:
      1. Digite um nome exclusivo no campo Nome do serviço Compute da sua instância de computação.
        1. É um campo obrigatório e o nome do Compute deve ter entre 3 e 24 caracteres.
        2. Os caracteres válidos são letras maiúsculas e minúsculas, dígitos e hifens.
        3. O nome de computação deve começar com uma letra.
        4. O nome do Compute deve ser exclusivo em todos os cálculos existentes em uma região do Azure.
        5. Se um hífen for usado, ele deverá ser seguido por pelo menos uma letra no final do nome.
      2. Escolha CPU como Tipo de máquina virtual para operações que consomem muita CPU.
      3. Escolha Standard_E4ds_v4 como Tamanho da máquina virtual ou escolha um tamanho semelhante que seja adequado para manipulação de dados e treinamento em conjuntos de dados de médio a grande porte.
      4. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar uma instância de computação.
    4. Na seção Programação do workflow Criar instância de computação, especifique as seguintes informações:
      1. Ative a alternância Fechar automaticamente após o timeout de inatividade.
      2. Defina Fazer Shutdown após como 60 Minutos.
      3. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar uma instância de computação.
    5. Na seção Segurança do workflow Criar instância de computação, digite as seguintes informações:
      1. Por padrão, as opções Designação do usuário, Identidade designada e SSH são desativadas.
      2. Ative a alternância Rede virtual e, na lista drop-down, selecione sua Rede virtual e Sub-rede para configurar essa conexão de instância de computação na qual o acesso ao Oracle Database está configurado.
      3. Ative o Acesso raiz e o SSO.
      4. Selecione o botão Próximo para prosseguir.
      Esta captura de tela mostra como criar uma instância de computação.
    6. Na seção Aplicativos do workflow Criar instância de computação, nenhuma alteração é necessária. Selecione o botão Próximo para prosseguir.Esta captura de tela mostra como criar uma instância de computação.
    7. Na seção Tags do workflow Criar instância de computação, digite tags como strings de par Chave e Valor. Você pode adicionar várias tags. Selecione o botão Próximo para prosseguir.Esta captura de tela mostra como criar uma instância de computação.
    8. Na seção Revisar do workflow Criar instância de computação, verifique suas informações. Selecione o botão Criar para criar uma instância de computação ou selecione o botão Voltar para fazer as alterações necessárias.Esta captura de tela mostra como criar uma instância de computação.
    9. Depois que sua instância de computação for criada, navegue até o serviço Compute na página Machine Learning Studio e selecione o link Nome para exibir detalhes e configurações.Esta captura de tela mostra como criar uma instância de computação.
    10. Próxima etapa: Crie uma Computação de Aprendizado de Máquina do Azure - Notebook.

    Computação do Azure Machine Learning Studio - Notebook

    1. Na página Machine Learning Studio, navegue até a seção Criação. Selecione Notebooks no menu esquerdo.Esta captura de tela mostra como criar um notebook no Azure Machine Learning.
    2. Na página Notebooks, selecione a guia Arquivos e selecione os três pontos (...) ao lado do seu nome em Usuários. Em seguida, selecione a opção Criar novo arquivo na lista drop-down.Esta captura de tela mostra como criar um notebook no Azure Machine Learning.
    3. Digite 01_Load_Data.ipynb no campo Nome do arquivo e selecione o Tipo de arquivo como Notebook (*ipynb). Selecione o botão Criar. Esta captura de tela mostra como criar um notebook no Azure Machine Learning.
    4. Edite o notebook Python e, em seguida, adicione os blocos de Código a seguir ao seu notebook. Além disso, você pode adicionar seções de Markdown para conteúdo e documentação em linha.
      1. Atualize o valor Conexão para a string de conexão do Oracle Database.

        Execute o seguinte código para instalar as bibliotecas Python necessárias:

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

        Execute o seguinte código para configurar o ambiente com todas as bibliotecas necessárias:

        
        import json from datasets 
        import load_dataset
        import getpass
        import oracledb

      Execute o seguinte código para testar a conectividade do banco de dados:

      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")

      Execute o seguinte código para carregar os dados do McAuley-Lab/Amazon-Reviews-2023 meta_Clothing_Shoes_and_Jewelry no Oracle Database usando esta abordagem:

      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. O notebook deve ser semelhante ao exemplo a seguir.Esta captura de tela mostra como criar um notebook no Azure Machine Learning.
    6. Siga as etapas anteriores para criar outro notebook chamado 02_Generate_Vector_Embedding.ipynb e, em seguida, adicione os trechos de código a seguir.
      1. Atualize os valores api_key e azure_endpoint com os valores reais dos detalhes do Modelo de incorporação de texto.
      2. Atualize o valor Conexão para a string de conexão do Oracle Database.
        Observação

        A geração de incorporação de vetores incorre em custos de computação com base no volume de dados. Limite o número de registros na tabela Produto para reduzir os custos de computação.
        Execute o seguinte código para instalar as bibliotecas necessárias:
        
        %pip install openai --upgrade
        %pip install oracledb --upgrade
        Execute o seguinte código para configurar o Azure OpenAI e gerar incorporação:
        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. Siga as etapas anteriores para adicionar o arquivo de notebook Python final, 03_Semantic_Search.ipynb e, em seguida, adicione as seções de código a seguir.
      1. Atualize os valores api_key e azure_endpoint com os valores reais dos detalhes do Modelo de incorporação de texto.
      2. Atualize o valor Conexão para a string de conexão do Oracle Database.

        Execute o seguinte código para instalar as bibliotecas necessárias:

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

        Execute o seguinte código para gerar a incorporação na entrada e executar a pesquisa de banco de dados:

        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. Execute o código em cada notebook na sequência a seguir.
      1. 01_Load_Data: Extrair dados de amostra do catálogo da loja de varejo do conjunto de dados público e inserir no Oracle Database.
      2. 02_Generate_Vector_Embeeding: Gere dados vetoriais para o título do produto e atualize-os na coluna do vetor do produto.
      3. 03_Semantic_Search: Gerar incorporação de vetor para texto de pesquisa do usuário e selecionar registros da tabela Produto com algoritmo de distância e exibir na saída para o resultado correspondente.