Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se cadastrar em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Acesse o Serviço de IA Generativa do OCI de Forma Programática usando o Aplicativo Web Ruby on Rails
Introdução
A Oracle Cloud Infrastructure Generative AI (OCI Generative AI) é uma nova ferramenta revolucionária de inteligência artificial que tem o potencial de transformar a maneira como interagimos com a tecnologia. É um modelo de linguagem grande, que é treinado em uma enorme quantidade de dados de texto e aprende a prever a próxima palavra em uma sequência com base nas palavras que vieram antes dela. Isso permite que a IA generativa da OCI gere respostas semelhantes às humanas a prompts de texto, tornando-a uma ferramenta incrivelmente poderosa para criar linguagem de som natural.
Um dos recursos mais impressionantes da IA generativa da OCI é sua capacidade de compreender tópicos complexos e fornecer explicações e respostas detalhadas. Hoje em dia, todas as organizações querem aproveitar o poder da IA generativa em seus aplicativos e criar uma oferta inovadora para seus clientes.
Neste tutorial, discutiremos e entenderemos como a OCI pode ajudar as organizações em todo o mundo a aproveitar o poder da IA generativa com a OCI. Neste tutorial, usaremos o Ruby on Rails (RoR) como nossa estrutura de desenvolvimento e chamaremos APIs de IA Generativa da OCI com base na linguagem de programação Ruby.
Objetivos
-
Configure chaves de API do OCI para o usuário com base nas quais o agente GitLab estabelecerá conexão com a tenancy do OCI.
-
Crie e configure uma instância de computação para que possamos usá-la para o desenvolvimento RoR.
-
Configure um aplicativo RoR, grave o código apropriado para chamar e exibir o serviço OCI Generative AI.
Pré-requisitos
-
Acesso ao OCI e políticas permitidas no Oracle Cloud Infrastructure Identity and Access Management (OCI IAM). O usuário deve ter acesso aos recursos correspondentes que deseja criar ou atualizar usando o código do Terraform.
-
Conhecimento de Ruby e RoR e sua metodologia de trabalho baseada no desenvolvimento de aplicativos web do Model View Controller (MVC).
-
Compreensão básica da metodologia ágil de desenvolvimento de software.
Tarefa 1: Configurar Chaves de API do Oracle Cloud Infrastructure
-
Faça log-in na tenancy do OCI com a conta de serviço ou o usuário administrador e vá para as Definições do usuário.
Ou
Vá para o usuário na console do OCI IAM. Certifique-se de que o usuário tenha todo o acesso necessário para criar e atualizar a infraestrutura no OCI.
-
Vá para a seção Recursos do usuário, clique em Chaves de API e Adicionar Chave de API. Selecione para fazer download das novas chaves pública e privada, fazer upload da chave pública ou colar a chave pública.
-
Salve as chaves em um local conveniente e salve o arquivo de configuração conforme mostrado na página a seguir. Você precisará desse arquivo de configuração e da chave privada ao estabelecer conexão com sua tenancy usando o Ruby SDK.
Observação:
-
O OCI suporta o serviço de IA Generativa na região
US-CHICAGO-1
a partir de agora. Portanto, certifique-se de ativar e assinar esta região em sua tenancy. -
Para chamar serviços do OCI por meio de instâncias do OCI Compute, o OCI fornece uma maneira mais segura de usar controladores de instâncias. Evite usar chaves de API do usuário como melhores práticas. Para obter mais informações, consulte Chamando os Serviços em uma Instância.
-
Tarefa 2: Criar e Configurar uma Instância do OCI Compute a ser usada para o Desenvolvimento RoR
-
Vá para Iniciando uma Instância do Windows no OCI para criar sua instância de computação do Windows no OCI.
-
Depois que sua instância do Windows for criada, faça log-in usando sua senha inicial, conforme mostrado na captura de tela a seguir.
-
Depois de fazer log-in na sua instância de computação do Windows, instale e configure o Ruby, o Ruby on Rails e crie um novo aplicativo usando o comando rails.
rails new GenAIApp
Vá para o diretório do aplicativo e execute o comando a seguir para ativar e executar o servidor de aplicativos de trilhos. Você deve ser capaz de acessar seu aplicativo Rails padrão em
http://127.0.0.1:3000
.cd GenAIApp rails server -b 0.0.0.0
-
Vá para o diretório home dos usuários, que é
c:/users/opc
, e crie o arquivoconfig
para o Ruby SDK. Configure o arquivo de configuração conforme o download foi feito na Tarefa 1.3. Coloque também o arquivo de chave privada baixado. Para obter mais informações, consulte Oracle Cloud Infrastructure Ruby SDK.Observação:
-
Você precisa redefinir a senha do Windows no primeiro log-in na instância de computação do OCI. Lembre-se da nova senha, pois você precisará dela para fazer login na próxima vez.
-
Para acessar seu aplicativo Rails de fora da rede, abra a porta
3000
e também desative o firewall do Windows da instância de computação criada.
-
Tarefa 3: Configurar um Aplicativo RoR, Escrever Código Apropriado para Chamar e Exibir o serviço de IA Generativa do OCI
-
Depois de poder executar seu aplicativo Rails e acessá-lo localmente e a partir da rede necessária, nosso primeiro passo é configurar as gemas necessárias para o aplicativo. Abra seu
Gemfile
e atualize seu conteúdo conforme mostrado no trecho de código a seguir.Gemfile
:source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '3.2.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main' gem 'rails', '~> 6.1.4', '>= 6.1.4.1' # Gem for OCI SDK gem 'oci' # Use sqlite3 as the database for Active Record gem 'sqlite3', '~> 1.4' # Use Puma as the app server gem 'puma', '~> 5.0' # Use SCSS for stylesheets gem 'sass-rails', '>= 6' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 5.0' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' gem 'tzinfo-data' # Use Active Storage variant # gem 'image_processing', '~> 1.2' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.4', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 4.1.0' # Display performance information such as SQL time and flame graphs for each request in your browser. # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md gem 'rack-mini-profiler', '~> 2.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 3.26' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
-
Execute o comando
bundle install
para instalar todos os pacotes.bundle install
A instalação do seu bundle deve mostrar a saída conforme mostrado na imagem a seguir.
-
Depois que a instalação do bundle for concluída, adicione rotas ao arquivo
routes.rb
. Isso fornecerá as APIs expostas em seu aplicativo e a ação precisa ser executada quando chamada.config/routes.rb
:Rails.application.routes.draw do root "genai_app#checkin" get "/checkin", to: "genai_app#checkin" post "/checkin", to: "genai_app#checkinpost" end
-
Temos que desenvolver o código para o arquivo
controller
do aplicativo, conforme mostrado abaixo. Este é o código principal que será executado quando você chamar as APIs de IA Generativa do OCI usando o aplicativo.app/controller/genai_app_controller.rb
:require 'oci' class GenAIAppController < ApplicationController def checkin lines = File.readlines("C:/Users/opc/GenAIApp/app/controllers/chatlog.txt") @chatLines = lines end def checkinpost File.open("C:/Users/opc/GenAIApp/app/controllers/chatlog.txt", "a") { |f| f.write "\nusr::#{params[:message]}" } if params[:message].include? "AskAI:" fullMessage = params[:message].split("AskAI:")[1].strip() region = 'us-chicago-1' gen_ai_inference_client = OCI::GenerativeAiInference::GenerativeAiInferenceClient.new(region: region) compartment_id = 'ocid1.compartment.oc1..aaaaaaaasdk6oyucuqzcaixwxtnxzlt6xxxxxxxxxxuzrm6vmdqgh6wipa' # compartmentId that has policies grant permissions for using Generative AI Service model_id = 'cohere.command' prompt = params[:message].split("AskAI:")[1].strip() max_tokens = 500 temperature = 0.75 frequency_penalty = 1.0 top_p = 0.7 details = OCI::GenerativeAiInference::Models::GenerateTextDetails.new('compartment_id': compartment_id, 'serving_mode': OCI::GenerativeAiInference::Models::OnDemandServingMode.new( 'model_id': model_id ), 'inference_request': OCI::GenerativeAiInference::Models:: CohereLlmInferenceRequest.new( 'prompt': prompt, 'is_stream': false, 'max_tokens': max_tokens, 'temperature': temperature, 'top_p': top_p, 'frequency_penalty': frequency_penalty )) response = gen_ai_inference_client.generate_text(details) text_response = response.data.to_s[170...-150] File.open("C:/Users/opc/GenAIApp/app/controllers/chatlog.txt", "a") { |f| f.write "\nnex::#{text_response}" } print(text_response) end redirect_to("/checkin") end end
-
Atualize o conteúdo do nosso arquivo de visualização. Isso será usado para exibir a interface do usuário e chamar as chamadas de API Get e Post em seus aplicativos. Esta página da interface do usuário será usada pelo usuário para interagir com seu aplicativo.
app/view/checkin.html.erb
:<style> .greenB { background-color: white; color: black; font-size: 16px; border-bottom: 5px solid darkgreen; text-decoration: none; font-family:verdana; font-weight:bold; width: 100%; height: 50px; display: inline-block; display:flex;/*CSS3*/ align-items:center;/*Vertical align*/ justify-content:center;/*horizontal align*/ } .blueB { background-color: white; color: black; font-size: 16px; border-bottom: 5px solid #2E86C1; text-decoration: none; font-family:verdana; font-weight:bold; width: 100%; height: 50px; display: inline-block; display:flex;/*CSS3*/ align-items:center;/*Vertical align*/ justify-content:center;/*horizontal align*/ } .greenB:hover {background-color: darkgreen; color: white} .blueB:hover {background-color: #2E86C1; color: white} </style> </br> <table width=100%> <tr> <td width=2%> </td> <td width=98%> <div style="color:black;font-family:verdana;font-size:25px;"> <b>Hey, welcome to Nex!</b> </div> </br> <div style="color:black;font-family:verdana;font-size:17px;"> <b>New Checking/Chat</b> </div> </br> <div style="color:darkgreen;font-family:verdana;font-size:14px;padding-bottom:20px;"> <b> Start a new chat with Nex </b> </div> </br> <div style="font-family:verdana;font-size:15px;display:block;height:450px;overflow:auto;"> <% for line in @chatLines do %> <% if line.include? "nex::" %> <table width=90%> <tr> <td width=70% style="color:white;background-color:#2E86C1;padding:10px;"> <%= line.split("nex::")[1] %> </td> <td width=30%> </td> </tr><tr height=2px></tr> </table> <% end %> <% if line.include? "usr::" %> <table width=97%> <tr> <td width=30%> </td> <td width=70% style="color:white;background-color:darkgreen;padding:10px;"> <%= line.split("usr::")[1] %> </td> </tr><tr height=2px></tr> </table> <% end %> <% end %> <table width=90%> <tr> <td width=70%> <%= submit_tag 'Track it!', name: nil, class: "greenB", :style => "width: 200px;" %> </td> <td width=30%> </td> </tr><tr height=5px></tr> </table> </div> <%= form_tag({:controller=>"genai_app", :action=>"checkinpost"}, method: :post) do %> <table width=100%> <tr> <td width=80%> <%= text_field_tag :message, "", :placeholder => "Enter your message", :style => "width: 100%; font-size:17px; padding:15px;" %> </td> <td width=3%> </td> <td width=15%> <%= submit_tag 'Send Message', name: nil, class: "blueB" %> </td> <td width=3%> </td> </tr> </table> <% end %> </td> </tr> </table>
Depois de fazer todas essas alterações, você poderá ver o aplicativo atualizado e também chamar a IA Generativa do OCI fazendo perguntas ao prompt.
Observação:
-
Você tem que cuidar de todas as gemas e suas versões, pois pode haver casos em que você precisa atualizar as versões em
Gemfile
de acordo com sua configuração. -
Cuide da rede, para que o Ruby possa se conectar ao provedor de gemas necessário da sua instância para fazer download das gemas necessárias.
-
Links Relacionados
-
Serviço de IA generativa da Oracle Cloud Infrastructure (OCI)
-
Oracle Oferecerá Serviços de IA Generativa Poderosos e Seguros para Empresas
Confirmação
- Autor - Lovelesh Saxena (Arquiteto Principal de Engenharia de Software)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Access OCI Generative AI Service Programmatically using Ruby on Rails Web Application
F96228-01
April 2024