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

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
- Crie um Oracle Exadata Database (26ai).
- Obtenha a string de conexão do PDB (Oracle Database Pluggable Database).
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:
- Crie o esquema do banco de dados.
- Crie a tabela do banco de dados para o estado atual.
- Atualize o esquema para usar o AI Vector para o estado futuro.
- Crie o Azure OpenAI.
- Implante um modelo de incorporação de texto.
- Crie o Azure Machine Learning.
- Crie uma instância de computação.
- Use a instância de computação para executar o código de notebook.
- Criar um notebook Python.
- Carregar dados de amostra na tabela existente.
- Enriqueça os dados com o Oracle AI Vector Search.
- Executar consultas de pesquisa semântica (Consulta Mágica).
- Crie uma instância de computação.
Próximas Etapas: Alterne para a guia Oracle AI Database e siga as instruções passo a passo.
- Crie o esquema do banco de dados.
Criar Tabela do Oracle AI Database (Estado Atual)
- Conecte-se ao Oracle Exadata Database. Para obter instruções passo a passo, consulte a seção Conectar - Banco de Dados Exadata.
- Crie um novo usuário no banco de dados e conceda ao usuário a atribuição
dbaque 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; - 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.
- 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)); - 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.
- No portal do Azure, navegue até o Azure OpenAI.

- No menu de navegação esquerdo, localize a seção Usar com o Foundry e selecione Azure OpenAI.

- 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.
- Na lista drop-down + Criar, selecione a opção Azure OpenAI para iniciar o workflow Criar Azure OpenAI.
- Na guia Básicos do workflow Criar OpenAI do Azure, especifique as seguintes informações:
- Na lista drop-down Assinatura, selecione sua assinatura do Azure.
- Selecione um Grupo de recursos existente ou selecione Criar novo para criar um.
- 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.
- Selecione a Camada de preços necessária para dimensionamento e capacidade. Para obter mais informações, consulte Exibir detalhes completos de preços.
- Verifique as informações e os links da política na seção Política de revisão de conteúdo.
- Selecione o botão Próximo para prosseguir.

- Na guia Rede do workflow Criar Azure OpenAI, especifique as seguintes informações:
- 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.
- Selecione Rede Virtual na lista de redes virtuais existentes.
- Selecione a sub-rede que você criou para o aplicativo na lista de Sub-redes.
- 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.
- Selecione o botão Próximo para prosseguir.

- Na guia Tags do workflow Criar Azure OpenAI, especifique as seguintes informações:
- Adicione Nome e Valor para tags. Você pode adicionar várias tags.
- Selecione o botão Próximo para prosseguir.

- 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.

- 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.

Implantar Modelo de Incorporação de Texto
- No portal Azure AI Foundry, navegue até a seção Playgrounds e selecione Chat.

- Selecione o botão + Criar uma implantação.

- Selecione o botão + Implantar modelo para exibir as opções de implantação. Selecione a opção Implantar modelo base.
- Na lista de modelos, selecione text-embedding-3-large.

- Na página Deploy text-embedding-3-large, especifique as seguintes informações:
- Informe um Nome da implantação descritivo e exclusivo para o modelo.
- Selecione o Tipo de implantação como Padrão para permitir outras configurações
- Versão do modelo, Recurso de IA e Filtro de conteúdo são definidos como padrão.
- Defina o Limite de Taxa de Tokens por Minuto para essa implantação com base em seus requisitos. Por exemplo, ele é definido como 400K.
- Ative a cota dinâmica.
- Selecione Implantar para criar a implantação com as definições selecionadas.

- 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.
- As informações do ponto final, incluindo o URI de Destino e a Chave, são necessárias para maior integração.

Próximas Etapas: Alterne para a guia Azure Machine Learning e siga as instruções passo a passo.
- No portal do Azure, navegue até o Azure OpenAI.
Criar Machine Learning do Azure
- No portal do Azure, navegue até o Azure Machine Learning.

- Selecione o botão + Criar e selecione a opção Novo espaço de trabalho na lista drop-down.

- Na guia Básicos do workflow do Azure Machine Learning, especifique as seguintes informações:
- Na lista drop-down Assinatura, selecione sua assinatura do Azure.
- Selecione um Grupo de recursos existente ou selecione Criar novo para criar um.
- 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.
- Selecione Região para especificar o local físico em que o espaço de trabalho está implantado.
- 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.
- 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.
- 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.
- 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.
- Selecione o botão Próximo : Acesso de Entrada para continuar.

- Na guia Acesso de Entrada do workflow do Azure Machine Learning, especifique as seguintes informações:
- Escolha as opções Todas as redes como Acesso público à rede.
- Selecione o botão Próximo : Acesso de Saída para continuar.

- Na guia Acesso de Saída do workflow do Azure Machine Learning, especifique as seguintes informações:
- 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.
- Selecione o botão Próximo : Criptografia para continuar.

- Na guia Criptografia do workflow do Azure Machine Learning, especifique as seguintes informações:
- Deixe a caixa de seleção Criptografar dados usando uma chave gerenciada pelo cliente desmarcada.
- Selecione o botão Próximo : Identidade para continuar.

- Na guia Identidade do workflow do Azure Machine Learning, especifique as seguintes informações:
- 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.
- Deixe a caixa de seleção Espaço de trabalho de alto impacto nos negócios desmarcada.
- Selecione o botão Próximo : Tags para continuar.

- Na guia Tags do workflow do Azure Machine Learning, especifique as seguintes informações:
- Adicione Nome e Valor para tags. Você pode adicionar várias tags.
- Selecione o botão Próximo: Verificar + criar para continuar.

- 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.

- Depois que o espaço de trabalho for criado, selecione o botão Ir para recurso.

- 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.

Estúdio de Machine Learning do Azure
- Na página Estúdio de Machine Learning, navegue até a seção Gerenciar. Formule o menu esquerdo, selecione Compute.

- Selecione o botão + Novo para criar uma instância de computação.

- Na seção Definições obrigatórias do workflow Criar instância de computação, especifique as seguintes informações:
- Digite um nome exclusivo no campo Nome do serviço Compute da sua instância de computação.
- É um campo obrigatório e o nome do Compute deve ter entre 3 e 24 caracteres.
- Os caracteres válidos são letras maiúsculas e minúsculas, dígitos e hifens.
- O nome de computação deve começar com uma letra.
- O nome do Compute deve ser exclusivo em todos os cálculos existentes em uma região do Azure.
- Se um hífen for usado, ele deverá ser seguido por pelo menos uma letra no final do nome.
- Escolha CPU como Tipo de máquina virtual para operações que consomem muita CPU.
- 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.
- Selecione o botão Próximo para prosseguir.

- Digite um nome exclusivo no campo Nome do serviço Compute da sua instância de computação.
- Na seção Programação do workflow Criar instância de computação, especifique as seguintes informações:
- Ative a alternância Fechar automaticamente após o timeout de inatividade.
- Defina Fazer Shutdown após como 60 Minutos.
- Selecione o botão Próximo para prosseguir.

- Na seção Segurança do workflow Criar instância de computação, digite as seguintes informações:
- Por padrão, as opções Designação do usuário, Identidade designada e SSH são desativadas.
- 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.
- Ative o Acesso raiz e o SSO.
- Selecione o botão Próximo para prosseguir.

- 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.

- 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.

- 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.

- 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.

- Próxima etapa: Crie uma Computação de Aprendizado de Máquina do Azure - Notebook.
Computação do Azure Machine Learning Studio - Notebook
- Na página Machine Learning Studio, navegue até a seção Criação. Selecione Notebooks no menu esquerdo.

- 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.

- Digite
01_Load_Data.ipynbno campo Nome do arquivo e selecione o Tipo de arquivo como Notebook (*ipynb). Selecione o botão Criar.
- 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.
- 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.0Execute 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_Jewelryno 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() - Atualize o valor Conexão para a string de conexão do Oracle Database.
- O notebook deve ser semelhante ao exemplo a seguir.

- 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.
- Atualize os valores api_key e azure_endpoint com os valores reais dos detalhes do Modelo de incorporação de texto.
- 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 --upgradeExecute 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()
- 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.
- Atualize os valores api_key e azure_endpoint com os valores reais dos detalhes do Modelo de incorporação de texto.
- 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 --upgradeExecute 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()
- Execute o código em cada notebook na sequência a seguir.
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.02_Generate_Vector_Embeeding: Gere dados vetoriais para o título do produto e atualize-os na coluna do vetor do produto.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.
- No portal do Azure, navegue até o Azure Machine Learning.