Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Accéder au service OCI Generative AI par programmation à l'aide de Ruby on Rails Web Application
Introduction
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 grand modèle de langage, 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 à OCI Generative AI 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 à son naturel.
L'une des fonctionnalités les plus impressionnantes d'OCI Generative AI est sa capacité à comprendre des sujets complexes et à fournir des explications et des réponses approfondies. De nos jours, chaque entreprise veut 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 entreprises 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 nous appellerons les API OCI Generative AI basées sur le langage de programmation Ruby.
Objectifs
-
Configurez des clés d'API OCI pour l'utilisateur en fonction de l'agent GitLab qui se connectera à la location OCI.
-
Créez et configurez une instance de calcul afin de pouvoir l'utiliser pour le développement RoR.
-
Configurez une application RoR, écrivez le code approprié pour appeler et afficher le service OCI Generative AI.
Prérequis
-
Accès à OCI et aux stratégies 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 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 de développement logiciel.
Tâche 1 : configuration des clés d'API Oracle Cloud Infrastructure
-
Connectez-vous à la location OCI avec le compte de service ou l'administrateur et accédez aux paramètres utilisateur.
Ou
Accédez à l'utilisateur à partir de la console OCI IAM. Assurez-vous que l'utilisateur dispose de tous les accès requis pour la création et la mise à jour de l'infrastructure sur OCI.
-
Accédez à la section Ressources de 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, télécharger votre clé publique ou coller votre clé publique.
-
Enregistrez les clés à un emplacement approprié 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 du kit SDK Ruby.
Remarque :
-
OCI prend désormais en charge le service d'IA générative dans la région
US-CHICAGO-1
. Veillez donc à activer cette région dans votre location et à vous y abonner. -
Pour appeler des services OCI à partir d'instances OCI Compute, OCI offre un moyen plus sécurisé d'utiliser des principaux d'instance. Evitez d'utiliser des clés d'API utilisateur comme meilleures pratiques. Pour plus d'informations, reportez-vous à 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
-
Accédez à 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 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 faire fonctionner 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, à savoir
c:/users/opc
, et créez le fichierconfig
pour le kit SDK Ruby. Configurez le fichier de configuration comme vous l'avez téléchargé dans la tâche 1.3, puis placez également le fichier de clé privée téléchargé. Pour plus d'informations, reportez-vous à SDK Ruby Oracle Cloud Infrastructure.Remarque :
-
Vous devez réinitialiser le mot de passe Windows lors de la première connexion à l'instance de calcul OCI. N'oubliez pas le nouveau mot de passe, car vous en aurez besoin pour vous connecter à partir de la prochaine fois.
-
Pour accéder à votre application Rails à partir de l'extérieur 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 OCI Generative AI
-
Une fois que vous êtes en mesure d'exécuter votre application Rails et d'y accéder localement et à partir du réseau requis, notre première étape consiste à configurer les pierres précieuses requises pour l'application. Ouvrez votre fichier
Gemfile
et mettez à jour son contenu comme indiqué dans le fragment 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 packages.bundle install
L'installation du bundle doit afficher la sortie comme indiqué dans l'image suivante.
-
Une fois l'installation du bundle terminée, ajoutez des routes au fichier
routes.rb
. Cela fournira les API exposées sur votre application et l'action doit être effectuée lorsqu'elle est appelée.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 s'exécutera lorsque vous appellerez les API OCI Generative AI à 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. Elle sera utilisée pour afficher l'interface utilisateur et appeler les appels d'API Obtenir et Publier 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>
Une fois toutes ces modifications effectuées, vous devriez être en mesure de voir l'application mise à jour et également d'appeler OCI Generative AI en posant des questions à l'invite.
Remarque :
-
Vous devez prendre soin de toutes les gemmes et de leurs versions, car il peut y avoir des cas où vous devez mettre à jour les versions dans
Gemfile
en fonction de votre configuration. -
Prenez soin de la mise en 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
Remerciements
- Auteur - Lovelesh Saxena (architecte principal en ingénierie logicielle)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur 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
F96224-01
April 2024