Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Acceso al servicio OCI Generative AI mediante programación mediante la aplicación web Ruby on Rails
Introducción
Oracle Cloud Infrastructure Generative AI (OCI Generative AI) es una nueva y revolucionaria herramienta de inteligencia artificial que tiene el potencial de transformar la forma en que interactuamos con la tecnología. Es un modelo de lenguaje grande, que se entrena en una gran cantidad de datos de texto y aprende a predecir la siguiente palabra en una secuencia basada en las palabras que le precedieron. Esto permite a OCI Generative AI generar respuestas similares a las de los humanos a las peticiones de datos de texto, lo que lo convierte en una herramienta increíblemente poderosa para crear un lenguaje que suene natural.
Una de las funciones más impresionantes de OCI Generative AI es su capacidad para comprender temas complejos y proporcionar explicaciones y respuestas detalladas. Hoy en día, todas las organizaciones quieren aprovechar el poder de la IA generativa en sus aplicaciones y crear una oferta innovadora para sus clientes.
En este tutorial, analizaremos y comprenderemos cómo OCI puede ayudar a las organizaciones de todo el mundo a aprovechar el poder de la IA generativa con OCI. En este tutorial, utilizaremos Ruby on Rails (RoR) como nuestro marco de desarrollo y llamaremos a las API de IA generativa de OCI basadas en el lenguaje de programación Ruby.
Objetivos
-
Configure claves de API de OCI para el usuario según el agente GitLab que se conectará al arrendamiento de OCI.
-
Cree y configure una instancia informática para que podamos utilizarla para el desarrollo de RoR.
-
Configure una aplicación RoR, escriba el código adecuado para llamar y mostrar el servicio OCI Generative AI.
Requisitos
-
Acceso a OCI y políticas permitidas en Oracle Cloud Infrastructure Identity and Access Management (OCI IAM). El usuario debe tener acceso a los recursos correspondientes que desea crear o actualizar mediante el código de Terraform.
-
Conocimiento de Ruby y RoR y su metodología de trabajo basada en el desarrollo de aplicaciones web Model View Controller (MVC).
-
Comprensión básica de la metodología ágil del desarrollo de software.
Tarea 1: Configuración de claves de API de Oracle Cloud Infrastructure
-
Conéctese al arrendamiento de OCI con la cuenta de servicio o el usuario administrador y vaya a la configuración de usuario.
O bien:
Vaya al usuario desde la consola de OCI IAM. Asegúrese de que el usuario tiene todo el acceso necesario para crear y actualizar la infraestructura en OCI.
-
Vaya a la sección Recursos del usuario, haga clic en Claves de API y Agregar clave de API. Seleccione esta opción para descargar las nuevas claves públicas y privadas, cargar la clave pública o pegar la clave pública.
-
Guarde las claves en una ubicación conveniente y guarde el archivo de configuración como se muestra en la siguiente página. Necesitará este archivo de configuración y esta clave privada al conectarse a su arrendamiento mediante el SDK de Ruby.
Nota:
-
OCI soporta el servicio de IA generativa en la región
US-CHICAGO-1
a partir de ahora. Por lo tanto, asegúrese de activar y suscribirse a esta región de su arrendamiento. -
Para llamar a los servicios de OCI desde instancias de OCI Compute, OCI proporciona una forma más segura mediante principales de instancia. Evite utilizar claves de API de usuario como mejores prácticas. Para obtener más información, consulte Llamada a servicios desde una instancia.
-
Tarea 2: Creación y configuración de una instancia informática de OCI que se utilizará para el desarrollo de RoR
-
Vaya a Inicio de una instancia de Windows en OCI para crear su instancia informática de Windows en OCI.
-
Una vez creada la instancia de Windows, conéctese con la contraseña inicial, como se muestra en la siguiente captura de pantalla.
-
Después de conectarse a la instancia informática de Windows, instale y configure Ruby, Ruby on Rails y cree una nueva aplicación mediante el comando rails.
rails new GenAIApp
Vaya al directorio de aplicaciones y ejecute el siguiente comando para activar y ejecutar el servidor de aplicaciones de guías. Debe poder acceder a la aplicación Rails por defecto en
http://127.0.0.1:3000
.cd GenAIApp rails server -b 0.0.0.0
-
Vaya al directorio raíz de los usuarios, que es
c:/users/opc
, y cree el archivoconfig
para el SDK de Ruby. Configure el archivo de configuración como lo ha descargado en la tarea 1.3 y coloque también el archivo de clave privada descargado. Para obtener más información, consulte SDK de Oracle Cloud Infrastructure Ruby.Nota:
-
Debe restablecer la contraseña de Windows en la primera conexión a la instancia informática de OCI. Recuerde la nueva contraseña, ya que la necesitará para iniciar sesión la próxima vez.
-
Para acceder a la aplicación Rails desde fuera de la red, debe abrir el puerto
3000
y también desactivar el firewall de Windows desde la instancia informática creada.
-
Tarea 3: Configuración de una aplicación RoR, escritura del código adecuado para llamar y mostrar el servicio OCI Generative AI
-
Después de que pueda ejecutar su aplicación Rails y acceder a ella localmente y desde la red requerida, nuestro primer paso es configurar las gemas necesarias para la aplicación. Abra
Gemfile
y actualice su contenido como se muestra en el siguiente fragmento de código.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]
-
Ejecute el comando
bundle install
para instalar todos los paquetes.bundle install
La instalación del paquete debe mostrar la salida como se muestra en la siguiente imagen.
-
Una vez realizada la instalación del paquete, agregue rutas al archivo
routes.rb
. Esto proporcionará las API expuestas en la aplicación y la acción se debe realizar cuando se llame.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
-
Tenemos que desarrollar el código para el archivo
controller
de la aplicación como se muestra a continuación. Este es el código principal que se ejecutará cuando llame a las API de IA generativa de OCI mediante la aplicación.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
-
Actualice el contenido de nuestro archivo de vista. Se utilizará para mostrar la interfaz de usuario y llamar a las llamadas de API Obtener y Publicar en las aplicaciones. El usuario utilizará esta página de interfaz de usuario para interactuar con la aplicación.
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>
Después de realizar todos estos cambios, debería poder ver la aplicación actualizada y también llamar a OCI Generative AI haciendo preguntas a la petición de datos.
Nota:
-
Tienes que cuidar todas las gemas y sus versiones, ya que puede haber casos en los que necesites actualizar las versiones en
Gemfile
de acuerdo a tu configuración. -
Cuida las redes, para que Ruby pueda conectarse al proveedor de gemas necesario desde tu instancia para descargar las gemas necesarias.
-
Enlaces relacionados
-
Servicio de IA generativa de Oracle Cloud Infrastructure (OCI)
-
Oracle ofrecerá servicios de IA generativa potentes y seguros para empresas
Agradecimientos
- Autor: Lovelesh Saxena (Arquitecto principal de ingeniería de software)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Access OCI Generative AI Service Programmatically using Ruby on Rails Web Application
F96222-01
April 2024