Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Accedi al servizio OCI Generative AI a livello di programmazione utilizzando l'applicazione Web Ruby on Rails
Introduzione
Oracle Cloud Infrastructure Generative AI (OCI Generative AI) è un nuovo e rivoluzionario strumento di intelligenza artificiale che ha il potenziale per trasformare il modo in cui interagiamo con la tecnologia. Si tratta di un modello di linguaggio di grandi dimensioni, che viene addestrato su una grande quantità di dati di testo e impara a prevedere la parola successiva in una sequenza basata sulle parole che sono venute prima. Ciò consente all'AI generativa OCI di generare risposte simili a quelle umane ai prompt di testo, rendendolo uno strumento incredibilmente potente per creare un linguaggio dal suono naturale.
Una delle caratteristiche più straordinarie dell'AI generativa OCI è la sua capacità di comprendere argomenti complessi e fornire spiegazioni e risposte approfondite. Oggi, ogni organizzazione vuole sfruttare la potenza dell'AI generativa nelle proprie applicazioni e creare un'offerta innovativa per i propri clienti.
In questo tutorial, discuteremo e capiremo come OCI può aiutare le organizzazioni di tutto il mondo a sfruttare la potenza dell'AI generativa con OCI. In questo tutorial, utilizzeremo Ruby on Rails (RoR) come framework di sviluppo e chiameremo le API OCI Generative AI basate sul linguaggio di programmazione Ruby.
Obiettivi
-
Impostare le chiavi API OCI per l'utente in base a quale agente GitLab si connetterà alla tenancy OCI.
-
Creare e configurare un'istanza di computazione in modo da poterla utilizzare per lo sviluppo RoR.
-
Impostare un'applicazione RoR, scrivere il codice appropriato per chiamare e visualizzare il servizio AI generativa OCI.
Prerequisiti
-
Accesso a OCI e ai criteri consentiti in Oracle Cloud Infrastructure Identity and Access Management (IAM OCI). L'utente deve avere accesso alle risorse corrispondenti che desidera creare o aggiornare utilizzando il codice Terraform.
-
Conoscenza di Ruby e RoR e della sua metodologia di lavoro basata sullo sviluppo di applicazioni Web Model View Controller (MVC).
-
Conoscenza di base della metodologia agile di sviluppo del software.
Task 1: impostare le chiavi API di Oracle Cloud Infrastructure
-
Eseguire il login alla tenancy OCI con l'account di servizio o l'utente amministratore e andare alle impostazioni utente.
Oppure
Andare all'utente dalla console IAM OCI. Assicurarsi che l'utente disponga di tutti gli accessi necessari per creare e aggiornare l'infrastruttura su OCI.
-
Passare alla sezione Risorse per l'utente, fare clic su Chiavi API e su Aggiungi chiave API. Selezionare questa opzione per scaricare le nuove chiavi pubbliche e private, caricare la chiave pubblica o incollare la chiave pubblica.
-
Salvare le chiavi in una posizione comoda e salvare il file di configurazione come mostrato nella pagina seguente. Durante la connessione alla tenancy mediante l'SDK Ruby, saranno necessari questo file di configurazione e questa chiave privata.
Nota:
-
OCI supporta il servizio AI generativa nell'area
US-CHICAGO-1
al momento. Pertanto, assicurati di abilitare e sottoscrivere quest'area nella tua tenancy. -
Per chiamare i servizi OCI dalle istanze di OCI Compute, OCI offre un modo più sicuro utilizzando i principal delle istanze. Evita di utilizzare le chiavi API degli utenti come best practice. Per ulteriori informazioni, vedere Chiamata di servizi da un'istanza.
-
Task 2: creare e configurare un'istanza di OCI Compute da utilizzare per lo sviluppo RoR
-
Andare a Avvio di un'istanza di Windows su OCI per creare l'istanza di computazione Windows su OCI.
-
Una volta creata l'istanza di Windows, eseguire il login utilizzando la password iniziale come mostrato nella schermata seguente.
-
Dopo aver eseguito il login all'istanza di computazione Windows, installare e configurare Ruby, Ruby on Rails e creare una nuova applicazione utilizzando il comando rail.
rails new GenAIApp
Accedere alla directory dell'applicazione ed eseguire il comando seguente per attivare e attivare il server dell'applicazione dei binari. Dovresti essere in grado di accedere all'app Rails predefinita su
http://127.0.0.1:3000
.cd GenAIApp rails server -b 0.0.0.0
-
Andare alla directory home degli utenti, ovvero
c:/users/opc
, e creare il fileconfig
per l'SDK Ruby. Configurare il file di configurazione così come è stato scaricato nel task 1.3. Posizionare anche il file della chiave privata scaricato. Per ulteriori informazioni, consulta Oracle Cloud Infrastructure Ruby SDK.Nota:
-
È necessario reimpostare la password Windows al primo login all'istanza di computazione OCI. Ricordare la nuova password, in quanto sarà necessario eseguire il login dalla prossima volta.
-
Per accedere all'applicazione Rails dall'esterno della rete, è necessario aprire la porta
3000
e anche disattivare il firewall Windows dall'istanza di computazione creata.
-
Task 3: impostare un'applicazione RoR, scrivere il codice appropriato per chiamare e visualizzare il servizio AI generativa OCI
-
Dopo essere stato in grado di eseguire l'app Rails e accedervi localmente e dalla rete richiesta, il nostro primo passo è quello di impostare le gemme richieste per l'applicazione. Aprire il file
Gemfile
e aggiornarne il contenuto come mostrato nel seguente frammento di codice.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]
-
Eseguire il comando
bundle install
per installare tutti i pacchetti.bundle install
L'installazione del bundle dovrebbe mostrare l'output come mostrato nella seguente immagine.
-
Al termine dell'installazione del bundle, aggiungere gli instradamenti al file
routes.rb
. Ciò fornirà le API esposte nell'applicazione e l'azione deve essere eseguita quando viene richiamata.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
-
Dobbiamo sviluppare il codice per il file app
controller
come mostrato di seguito. Si tratta del codice principale che verrà eseguito quando si chiamano le API AI generative OCI utilizzando l'applicazione.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
-
Aggiorna il contenuto del file di visualizzazione. Verrà utilizzata per visualizzare l'interfaccia utente e chiamare le chiamate API Ottieni e Invia nelle applicazioni. Questa pagina dell'interfaccia utente verrà utilizzata dall'utente per interagire con l'applicazione.
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>
Dopo aver apportato tutte queste modifiche, dovresti essere in grado di visualizzare l'applicazione aggiornata e anche di richiamare l'AI generativa OCI ponendo domande al prompt.
Nota:
-
È necessario prendersi cura di tutte le gemme e delle loro versioni, in quanto potrebbero esserci casi in cui è necessario aggiornare le versioni in
Gemfile
in base alla configurazione. -
Prenditi cura della rete, in modo che Ruby possa connettersi al provider gem richiesto dalla tua istanza per scaricare le gemme richieste.
-
Collegamenti correlati
Conferme
- Autore - Lovelesh Saxena (architetto principale di ingegneria del software)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Access OCI Generative AI Service Programmatically using Ruby on Rails Web Application
F96225-01
April 2024