Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Accéder au service d'IA générative OCI par programmation à l'aide de l'application Web Ruby on Rails
Présentation
Oracle Cloud Infrastructure Generative AI (OCI Generative AI) est un nouvel outil d'intelligence artificielle révolutionnaire qui a le potentiel de transformer la façon dont nous interagissons avec la technologie. Il s'agit d'un modèle de langage volumineux, qui est entraîné sur une quantité massive de données textuelles et apprend à prédire le mot suivant dans une séquence basée sur les mots qui l'ont précédé. Cela permet à l'intelligence artificielle générative d'OCI de générer des réponses de type humain aux invites de texte, ce qui en fait un outil incroyablement puissant pour créer un langage à sons naturels.
L'une des caractéristiques les plus impressionnantes de l'IA générative d'OCI est sa capacité à comprendre des sujets complexes et à fournir des explications et des réponses approfondies. De nos jours, chaque organisation souhaite tirer parti de la puissance de l'IA générative dans ses applications et créer une offre innovante pour ses clients.
Dans ce tutoriel, nous allons discuter et comprendre comment OCI peut aider les organisations du monde entier à tirer parti de la puissance de l'IA générative avec OCI. Dans ce tutoriel, nous utiliserons Ruby on Rails (RoR) comme cadre de développement et appellerons des API d'IA générative OCI basées sur le langage de programmation Ruby.
Objectifs
-
Configurez les clés d'API OCI pour l'utilisateur en fonction desquelles l'agent GitLab se connectera à la location OCI.
-
Créez et configurez une instance de calcul afin que nous puissions l'utiliser pour le développement RoR.
-
Configurez une application RoR, écrivez le code approprié pour appeler et afficher le service d'intelligence artificielle générative OCI.
Préalables
-
Accès à OCI et politiques autorisées dans Oracle Cloud Infrastructure Identity and Access Management (OCI IAM). L'utilisateur doit avoir accès aux ressources correspondantes qu'il souhaite créer ou mettre à jour à l'aide du code Terraform.
-
Connaissance de Ruby et de RoR et de sa méthodologie de travail basée sur le développement d'applications Web Model View Controller (MVC).
-
Compréhension de base de la méthodologie agile du développement logiciel.
Tâche 1 : Configurer les clés d'API Oracle Cloud Infrastructure
-
Connectez-vous à la location OCI avec le compte de service ou l'utilisateur administrateur et allez à Paramètres de l'utilisateur.
Ou
Accédez à l'utilisateur à partir de la console IAM OCI. Assurez-vous que l'utilisateur dispose de tous les accès requis pour créer et mettre à jour l'infrastructure sur OCI.
-
Allez à la section Ressources pour l'utilisateur, cliquez sur Clés d'API et sur Ajouter une clé d'API. Sélectionnez cette option pour télécharger les nouvelles clés publiques et privées, charger votre clé publique ou coller votre clé publique.
-
Enregistrez les clés à un emplacement pratique et enregistrez le fichier de configuration comme indiqué dans la page suivante. Vous aurez besoin de ce fichier de configuration et de cette clé privée lors de la connexion à votre location à l'aide de la trousse SDK Ruby.
Note :
-
OCI prend en charge le service d'IA générative dans la région
US-CHICAGO-1
à ce jour. Veillez donc à activer cette région de votre location et à vous y abonner. -
Pour appeler des services OCI à partir d'instances de calcul OCI, OCI fournit un moyen plus sécurisé à l'aide des principaux d'instance. Évitez d'utiliser des clés d'API d'utilisateur comme meilleures pratiques. Pour plus d'informations, voir Appel de services à partir d'une instance.
-
Tâche 2 : Créer et configurer une instance de calcul OCI à utiliser pour le développement RoR
-
Allez à Lancement d'une instance Windows sur OCI pour créer votre instance de calcul Windows sur OCI.
-
Une fois votre instance Windows créée, connectez-vous à l'aide de votre mot de passe initial, comme indiqué dans la capture d'écran suivante.
-
Après vous être connecté à votre instance de calcul Windows, installez et configurez Ruby, Ruby on Rails et créez une nouvelle application à l'aide de la commande rails.
rails new GenAIApp
Accédez au répertoire de votre application et exécutez la commande suivante pour mettre en service votre serveur d'applications Rails. Vous devriez pouvoir accéder à votre application Rails par défaut sur
http://127.0.0.1:3000
.cd GenAIApp rails server -b 0.0.0.0
-
Accédez au répertoire de base de vos utilisateurs, qui est
c:/users/opc
, et créez le fichierconfig
pour la trousse SDK Ruby. Configurez le fichier de configuration tel que vous l'avez téléchargé dans la tâche 1.3. Placez également le fichier de clé privée téléchargé. Pour plus d'informations, voir Oracle Cloud Infrastructure Ruby SDK.Note :
-
Vous devez réinitialiser le mot de passe Windows lors de la première connexion à l'instance de calcul OCI. Rappelez-vous le nouveau mot de passe, car vous en aurez besoin pour vous connecter à partir de la prochaine fois.
-
Pour accéder à votre application Rails en dehors du réseau, vous devez ouvrir le port
3000
et désactiver le pare-feu Windows à partir de l'instance de calcul créée.
-
Tâche 3 : Configurer une application RoR, écrire le code approprié pour appeler et afficher le service d'IA générative OCI
-
Après avoir pu exécuter votre application Rails et y accéder localement et à partir du réseau requis, notre toute première étape consiste à configurer les joyaux requis pour l'application. Ouvrez votre
Gemfile
et mettez à jour son contenu comme indiqué dans l'extrait de code suivant.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]
-
Exécutez la commande
bundle install
pour installer tous les ensembles.bundle install
L'installation de l'offre groupée doit afficher la sortie comme indiqué dans l'image suivante.
-
Une fois l'installation de l'ensemble terminée, ajoutez des routes au fichier
routes.rb
. Cela fournira les API exposées dans votre application et l'action doit être effectuée lors de l'appel.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
-
Nous devons développer le code pour le fichier app
controller
comme indiqué ci-dessous. Il s'agit du code principal qui sera exécuté lorsque vous appellerez les API d'IA générative OCI à l'aide de l'application.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
-
Mettez à jour le contenu de notre fichier d'affichage. Cette option sera utilisée pour afficher l'interface utilisateur et appeler les appels d'API Obtenir et Post sur vos applications. Cette page d'interface utilisateur sera utilisée par l'utilisateur pour interagir avec votre application.
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>
Après avoir effectué toutes ces modifications, vous devriez être en mesure de voir l'application mise à jour et de pouvoir appeler l'IA générative OCI en posant des questions à l'invite.
Note :
-
Vous devez prendre soin de tous les gemmes et de leurs versions, car il peut y avoir des cas où vous devez mettre à jour les versions dans
Gemfile
selon votre configuration. -
Prenez soin du réseau, afin que Ruby puisse se connecter au fournisseur de gemmes requis à partir de votre instance pour télécharger les gemmes requises.
-
Liens connexes
Confirmation
- Auteur - Lovelesh Saxena (architecte principal de l'ingénierie logicielle)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Access OCI Generative AI Service Programmatically using Ruby on Rails Web Application
F96223-01
April 2024