Ajout d'une interface en langage naturel à l'application Oracle APEX
Introduction
Nous exploitons le site Database Expert Resources (DBExpert Toolkit), qui fournit des informations comparatives et des outils interactifs permettant aux utilisateurs d'identifier le meilleur service Oracle Database Cloud Service pour leurs cas d'utilisation. Nous avons récemment ajouté une interface en langage naturel à notre site Web afin que les utilisateurs puissent également poser des questions sur les services cloud.
Notre site Web est une instance Oracle Application Express (Oracle APEX) exécutée sur une base de données Oracle Autonomous Transaction Processing Serverless. Nous avons vu que la nouvelle instance Oracle Autonomous Database Select AI était disponible pour permettre des interactions en langage naturel avec nos données.
Pour traiter avec élégance non seulement les questions liées au contenu, mais également les demandes d'aide et accepter les commentaires des utilisateurs, nous avons choisi Oracle Digital Assistant pour le front-end des requêtes en langage naturel.
Ce tutoriel décrit les tâches que nous avons effectuées pour ajouter l'interface en langage naturel.
Objectifs
- Configurez une interface Oracle Digital Assistant au sein d'une application Oracle APEX afin de fournir une interface en langage naturel pour l'interrogation des données dans Oracle Autonomous Database de l'application.
Prérequis
-
Installations d'Oracle Digital Assistant et d'Oracle APEX, et familiarité avec celles-ci.
-
L'application Oracle APEX doit être sur une version d'Oracle Database qui prend en charge Oracle Autonomous Database Select AI.
-
Compte avec des informations d'identification pour un modèle LLM (Large Language Model), qui générera le SQL en fonction des entrées utilisateur. Pour obtenir des instructions sur ce prérequis, reportez-vous au blog de Mark Hornick Présentation de Select AI - Natural Language to SQL Generation sur Autonomous Database.
Tâche 1 : connecter Oracle Autonomous Database Select AI à votre LLM
Dans votre espace de travail APEX, dans SQL Workshop -> SQL Commands, exécutez le code ci-dessous pour créer un profil d'intelligence artificielle (IA) afin d'indiquer les schémas et les objets de base de données qui seront utilisés avec Select AI. Le profil sera utilisé dans la tâche 2.
Pour ce tutoriel, nous avons utilisé OpenAI en tant que LLM.
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI',
password => '...' );
END;
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OPENAI_PROFILE',
attributes => '{ "provider": "openai",
"credential_name": "OPENAI_CRED",
"comments":"true",
"object_list": [{"owner": "DB_SCHEMA", "name":"OBJECT_NAME"}]
}',
description => 'AI profile to use OpenAI for SQL translation'
);
END;
Pour vérifier la configuration d'Oracle Autonomous Database Select AI, exécutez la commande suivante :
select dbms_cloud_ai.generate(
prompt => 'How many employees work at Oracle?',
action => 'SHOWSQL',
profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;
A partir de là, vous devez recevoir une requête SQL comme sortie, vérifiant la configuration.
Tâche 2 : intégrer l'API REST
Une fois qu'Oracle Autonomous Database Select AI fonctionne avec vos objets de base de données, créez une adresse POST REST qui sera intégrée à Oracle Digital Assistant. Pour le créer dans Oracle APEX, ouvrez SQL Workshop -> RESTful Data Services et créez un module avec un gestionnaire POST. Le nom du module et le nom du gestionnaire POST sont utilisés dans la tâche 3 pour configurer Oracle Digital Assistant.
Le gestionnaire POST reçoit les questions en langage naturel d'Oracle Digital Assistant et extrait une requête SQL. La requête SQL résultante est exécutée et la sortie est renvoyée à l'assistant numérique pour affichage. Collez le code suivant dans le gestionnaire POST du module que vous avez créé :
A savoir : reportez-vous à Activation de l'échange de données avec les services RESTful pour plus de détails sur les services RESTful avec Oracle APEX.
DECLARE
l_response CLOB;
l_sql CLOB;
l_prompt VARCHAR2 (4000);
l_cursor NUMBER := DBMS_SQL.open_cursor;
l_profile_name user_cloud_ai_profiles.profile_name%TYPE := 'YOUR_PROFILE'; -- the LLM profile you created per (link to Select AI setup)
p_refcursor SYS_REFCURSOR;
l_result CLOB;
BEGIN
/*
The variable name for the 'prompt' parameter below must match the variable used in the
Oracle Digital Assistant Flow, in the State that calls the REST endpoint
*/
l_sql :=
dbms_cloud_ai.generate (prompt => :l_prompt,
action => 'showsql',
profile_name => l_profile_name);
-- check if SQL could be generated.
BEGIN
DBMS_SQL.PARSE (l_cursor, l_sql, DBMS_SQL.native);
l_response := l_sql;
parse_cursor (l_sql, p_refcursor, l_result);
if l_result is not null then
:status := 200;
else
raise_application_error(-20987,'No records found');
end if;
EXCEPTION
WHEN OTHERS
THEN
:status := 400;
l_result := 'Something went wrong while processing...';
END;
APEX_UTIL.PRN (l_result, FALSE);
END;
Exécutez la commande suivante dans Oracle APEX SQL Workshop -> SQL Commands pour créer la procédure qui exécute la requête SQL reçue d'Oracle Autonomous Database Select AI :
CREATE OR REPLACE PROCEDURE parse_cursor (p_query IN VARCHAR2,
cur IN OUT SYS_REFCURSOR,
p_result OUT CLOB)
AS
curs INT;
cols INT;
d DBMS_SQL.desc_tab2;
val VARCHAR2 (32767);
l_row_count INTEGER := 0;
BEGIN
OPEN cur FOR p_query;
curs := DBMS_SQL.to_cursor_number (cur);
DBMS_SQL.describe_columns2 (curs, cols, d);
p_result := p_result || '<table> <tr>';
FOR i IN 1 .. cols
LOOP
DBMS_SQL.define_column (curs,
i,
val,
32767);
p_result := p_result || '<th>' || d (i).col_name || '</th>';
END LOOP;
p_result := p_result ||'</tr>';
WHILE DBMS_SQL.fetch_rows (curs) > 0
LOOP
p_result := p_result ||'<tr>';
FOR i IN 1 .. cols
LOOP
DBMS_SQL.COLUMN_VALUE (curs, i, val);
p_result := p_result ||'<td>' || val || '</td>';
END LOOP;
p_result := p_result ||'</tr>';
l_row_count := l_row_count + 1;
END LOOP;
p_result := p_result ||'</table>';
IF l_row_count = 0
THEN
p_result := NULL;
END IF;
DBMS_SQL.close_cursor (curs);
END;
/
La sortie est formatée dans une table à utiliser avec Oracle Digital Assistant ; la sortie JSON est une autre option pour différentes applications.
Remarque : cette adresse peut être utilisée à partir de plusieurs assistants numériques Oracle (ou d'applications similaires) pour exploiter les données et le traitement effectués par Oracle Autonomous Database Select AI.
Tâche 3 : configurer Oracle Digital Assistant
Dans notre instance Oracle Digital Assistant, nous avons créé un flux permettant de gérer les questions relatives à nos données. Des flux supplémentaires gèrent les demandes d'aide, les petites discussions et les retours. Les captures d'écran ci-dessous montrent les emplacements dans Oracle Digital Assistant où nous avons utilisé les informations sur l'adresse REST que nous avons créée dans la tâche 2 afin de connecter le chatbot au service REST.
A savoir : Ce tutoriel ne traite pas de la création et de la configuration d'Oracle Digital Assistant. Pour plus d'informations, reportez-vous à Oracle Digital Assistant.
Ce flux transmet l'entrée utilisateur à l'adresse REST pour traitement.
Tâche 4 : préparation des données pour Oracle Autonomous Database Select AI
Notre schéma comprend plusieurs tables jointes aux tables de mapping. Plutôt que de les transmettre au LLM, nous avons créé une vue qui joint les tables pertinentes, en utilisant notre connaissance du domaine pour envoyer une table avec toutes (et uniquement) les données nécessaires. Cette vue est régulièrement actualisée à partir des tables source pour rester à jour.
Polonais l'expérience avec Retrieval Augmented Generation (RAG)
Nous avons rapidement découvert que, bien que nous envoyions nos données complètes et fiables au LLM, davantage d'informations étaient nécessaires pour que notre application produise de bons résultats. (Nous avons appris que l'ingénierie rapide ne signifie pas le coder rapidement !) En utilisant la génération augmentée de récupération (RAG), nous avons pu améliorer nos résultats. Par exemple, les applications packagées Oracle représentées dans nos données sont connues par diverses abréviations et acronymes, que nous fournissons maintenant en commentaires sur les colonnes pertinentes. Vous pouvez envisager ce type d'action pour améliorer vos résultats.
Tâche 5 : intégration d'un assistant Oracle Digital Assistant dans l'application Oracle APEX
L'application est une instance Oracle APEX hébergée sur une instance Oracle Autonomous Database. Intégrez Oracle Digital Assistant dans l'application.
-
Dans l'application Oracle APEX, accédez à Composants partagés et à Fichiers d'application statique.
Ces fichiers d'application statiques sont utilisés pour configurer et appeler le chatbot.
settings.js
web-sdk.js
chatbot_style.css
Remarque : téléchargez les modèles Oracle Digital Assistant ci-dessous : Oracle Digital Assistant (ODA) et Oracle Mobile Cloud (OMC) Downloads.
-
settings.js
: ce fichier est destiné à la configuration d'Oracle Digital Assistant. Mettez à jour les valeurs suivantes.- URL : entrez l'URL de l'instance Oracle Digital Assistant.
- Nom : entrez le nom du bot référencé à partir de l'événement Chargement de page de l'application Oracle APEX à la page 0.
- ID de canal : entrez l'ID de canal copié à partir de l'application Oracle Digital Assistant.
- Associer les sessions utilisateur d'application Oracle APEX à une instance de bot qui est gérée sur différentes pages d'application lorsque l'utilisateur navigue.
- userId:
document.getElementById("pInstance").value
.
- userId:
-
web-idk.js
: aucune modification n'est nécessaire pour ce fichier, mais il doit être mis à jour pour chaque nouvelle version de la plate-forme Oracle Digital Assistant, afin de correspondre à la version d'Oracle Digital Assistant. -
chatbot_style.css
: créez un fichier CSS à partir de zéro pour personnaliser l'icône du chatbot.
-
Pour configurer l'application à utiliser, téléchargez le fichier vers Fichiers d'application statiques. Accédez à Composants partagés, Attributs d'interface utilisateur, JavaScript et entrez les URL pour
settings.js
etweb-sdk.js
. -
Accédez à l'onglet CSS et entrez l'URL du fichier CSS.
-
Dans la page globale 0 de l'application, ajoutez un événement qui se déclenche lors du chargement de la page pour appeler la fonction
initSdk
dans le fichiersettings.js
.
Exécutez votre application Oracle APEX et elle doit afficher l'icône de chatbot en bas à droite de l'écran. Il est prêt pour les utilisateurs à poser des questions en langage naturel !
Etapes suivantes
Activer les requêtes en langage naturel pour ajouter de la valeur à vos données
En combinant trois technologies Oracle stratégiques, vous avez rapidement introduit des fonctionnalités d'IA utiles et extensibles dans votre application avec un nouveau chatbot qui peut être utilisé dans d'autres applications et sites Web. Vous pouvez étendre la portée des données gérées à l'aide d'Oracle Autonomous Database Select AI et intégrer des sources d'informations supplémentaires pour les nouveaux flux Oracle Digital Assistant à traiter.
Accédez à Database Expert Resources et essayez l'interface en langage naturel et faites-nous part de vos commentaires.
Liens connexes
Remerciements
-
Auteurs - Burt Clouse, Omar Gallardo
-
Contributeurs - Marty Gubar, Mark Hornick, Yuoko Watari
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.
Add a Natural Language Interface to Oracle APEX Application
G11966-04
October 2024