Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Programmgesteuerter Zugriff auf OCI Generative AI Service mit Ruby on Rails-Webanwendung
Einführung
Oracle Cloud Infrastructure Generative AI (OCI Generative AI) ist ein revolutionäres neues Tool für künstliche Intelligenz, das die Art und Weise, wie wir mit Technologie interagieren, verändern kann. Es ist ein großes Sprachmodell, das auf einer großen Menge an Textdaten trainiert wird und lernt, das nächste Wort in einer Sequenz basierend auf den Wörtern vorherzusagen, die vor ihm kamen. Dies ermöglicht es OCI Generative AI, menschenähnliche Antworten auf Texteingabeaufforderungen zu generieren, was es zu einem unglaublich leistungsstarken Tool für die Erstellung einer natürlich klingenden Sprache macht.
Eine der beeindruckendsten Funktionen von OCI Generative AI ist die Fähigkeit, komplexe Themen zu verstehen und ausführliche Erklärungen und Antworten bereitzustellen. Heutzutage möchte jedes Unternehmen die Leistungsfähigkeit generativer KI in seinen Anwendungen nutzen und ein innovatives Angebot für seine Kunden erstellen.
In diesem Tutorial werden wir besprechen und verstehen, wie OCI Unternehmen auf der ganzen Welt helfen kann, die Leistungsfähigkeit generativer KI mit OCI zu nutzen. In diesem Tutorial verwenden wir Ruby on Rails (RoR) als Entwicklungs-Framework und rufen OCI Generative AI-APIs auf, die auf der Ruby-Programmiersprache basieren.
Ziele
-
Richten Sie OCI-API-Schlüssel für den Benutzer ein, basierend auf dem GitLab-Agent eine Verbindung zum OCI-Mandanten herstellt.
-
Erstellen und konfigurieren Sie eine Compute-Instanz, damit sie für die RoR-Entwicklung verwendet werden kann.
-
Richten Sie eine RoR-Anwendung ein, schreiben Sie den entsprechenden Code, um den OCI Generative AI-Service aufzurufen und anzuzeigen.
Voraussetzungen
-
Zugriff auf OCI und Policys, die in Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) zulässig sind. Der Benutzer muss Zugriff auf die entsprechenden Ressourcen haben, die er mit Terraform-Code erstellen oder aktualisieren möchte.
-
Kenntnisse über Ruby und RoR und ihre Arbeitsmethode basierend auf der Entwicklung von Model View Controller-(MVC-)Webanwendungen.
-
Grundlegendes Verständnis der agilen Methodik der Softwareentwicklung.
Aufgabe 1: Oracle Cloud Infrastructure-API-Schlüssel einrichten
-
Melden Sie sich beim OCI-Mandanten mit dem Serviceaccount oder dem Admin-Benutzer an, und gehen Sie zu den Benutzereinstellungen.
Oder
Gehen Sie über die OCI-IAM-Konsole zum Benutzer. Stellen Sie sicher, dass der Benutzer über den erforderlichen Zugriff zum Erstellen und Aktualisieren der Infrastruktur auf OCI verfügt.
-
Gehen Sie zum Abschnitt Ressourcen für den Benutzer, und klicken Sie auf API-Schlüssel und API-Schlüssel hinzufügen. Wählen Sie diese Option aus, um den neuen Public Key und den neuen Private Key herunterzuladen, den Public Key hochzuladen oder den Public Key einzufügen.
-
Speichern Sie die Schlüssel an einem geeigneten Speicherort, und speichern Sie die Konfigurationsdatei wie auf der folgenden Seite gezeigt. Sie benötigen diese Konfigurationsdatei und diesen Private Key, wenn Sie mit dem Ruby-SDK eine Verbindung zu Ihrem Mandanten herstellen.
Hinweis:
-
OCI unterstützt ab sofort den generativen KI-Service in der Region
US-CHICAGO-1
. Stellen Sie daher sicher, dass Sie diese Region in Ihrem Mandanten aktivieren und abonnieren. -
Um OCI-Services von OCI Compute-Instanzen aufzurufen, bietet OCI eine sicherere Möglichkeit, Instanz-Principals zu verwenden. Verwenden Sie keine Benutzer-API-Schlüssel als Best Practices. Weitere Informationen finden Sie unter Services aus einer Instanz aufrufen.
-
Aufgabe 2: OCI Compute-Instanz für die RoR-Entwicklung erstellen und konfigurieren
-
Gehen Sie zu Windows-Instanz auf OCI starten, um Ihre Windows-Compute-Instanz auf OCI zu erstellen.
-
Nachdem die Windows-Instanz erstellt wurde, melden Sie sich mit Ihrem anfänglichen Kennwort an, wie im folgenden Screenshot gezeigt.
-
Nachdem Sie sich bei Ihrer Windows-Compute-Instanz angemeldet haben, installieren und konfigurieren Sie Ruby, Ruby on Rails, und erstellen Sie eine neue Anwendung mit dem Schienenbefehl.
rails new GenAIApp
Gehen Sie zu Ihrem App-Verzeichnis, und führen Sie den folgenden Befehl aus, um den Schienen-App-Server hochzufahren und auszuführen. Sie sollten auf Ihre Standard-Rails-App unter
http://127.0.0.1:3000
zugreifen können.cd GenAIApp rails server -b 0.0.0.0
-
Gehen Sie zum Home-Verzeichnis der Benutzer (
c:/users/opc
), und erstellen Sie die Dateiconfig
für das Ruby-SDK. Konfigurieren Sie die Konfigurationsdatei wie in Aufgabe 1.3 heruntergeladen, und speichern Sie die heruntergeladene Private-Key-Datei. Weitere Informationen finden Sie unter Oracle Cloud Infrastructure-Ruby-SDK.Hinweis:
-
Sie müssen das Windows-Kennwort bei der ersten Anmeldung bei der OCI-Compute-Instanz zurücksetzen. Merken Sie sich das neue Passwort, da Sie dieses benötigen, um sich beim nächsten Mal anzumelden.
-
Um von außerhalb des Netzwerks auf Ihre Rails-App zuzugreifen, müssen Sie Port
3000
öffnen und außerdem die Windows-Firewall von der erstellten Compute-Instanz ausschalten.
-
Aufgabe 3: RoR-Anwendung einrichten, entsprechenden Code zum Aufrufen und Anzeigen des OCI Generative AI-Service schreiben
-
Nachdem Sie Ihre Rails-App ausführen und lokal und über das erforderliche Netzwerk darauf zugreifen können, ist es unser erster Schritt, die erforderlichen Edelsteine für die Anwendung einzurichten. Öffnen Sie die
Gemfile
, und aktualisieren Sie den Inhalt wie im folgenden Code-Snippet dargestellt.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]
-
Führen Sie den Befehl
bundle install
aus, um alle Packages zu installieren.bundle install
Die Bundle-Installation sollte die Ausgabe wie in der folgenden Abbildung dargestellt anzeigen.
-
Nachdem die Bundle-Installation abgeschlossen ist, fügen Sie der Datei
routes.rb
Routen hinzu. Dadurch werden die in Ihrer Anwendung angegebenen APIs bereitgestellt, und beim Aufruf müssen Aktionen ausgeführt werden.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
-
Wir müssen den Code für die App
controller
-Datei wie unten gezeigt entwickeln. Dies ist der Hauptcode, der ausgeführt wird, wenn Sie die OCI Generative AI-APIs mit der App aufrufen.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
-
Aktualisieren Sie den Inhalt für unsere Ansichtsdatei. Dadurch wird die UI angezeigt und die API-Aufrufe Abrufen und Posten für Ihre Anwendungen aufgerufen. Diese UI-Seite wird vom Benutzer für die Interaktion mit Ihrer App verwendet.
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>
Nachdem Sie alle diese Änderungen vorgenommen haben, sollten Sie die aktualisierte Anwendung anzeigen können und außerdem OCI Generative AI aufrufen können, indem Sie dem Prompt Fragen stellen.
Hinweis:
-
Sie müssen sich um alle Edelsteine und deren Versionen kümmern, da es Fälle geben kann, in denen Sie die Versionen in
Gemfile
entsprechend Ihrer Konfiguration aktualisieren müssen. -
Achten Sie auf das Networking, damit Ruby von Ihrer Instanz eine Verbindung zum erforderlichen Edelsteinprovider herstellen kann, um die erforderlichen Edelsteine herunterzuladen.
-
Verwandte Links
-
Generativer KI-Service von Oracle Cloud Infrastructure (OCI)
-
Oracle liefert leistungsstarke und sichere generative KI-Services für Unternehmen
Danksagungen
- Autor - Lovelesh Saxena (Principal Software Engineering Architect)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Access OCI Generative AI Service Programmatically using Ruby on Rails Web Application
F96221-01
April 2024