Ajouter une interface en langage naturel à l'application Oracle APEX
Présentation
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 en nuage.
Notre site Web est une instance Oracle Application Express (Oracle APEX) s'exécutant sur une base de données Oracle Autonomous Transaction Processing Serverless, et nous avons constaté que la nouvelle solution Oracle Autonomous Database Select AI était disponible pour permettre des interactions en langage naturel avec nos données.
Pour traiter correctement non seulement les questions liées au contenu, mais aussi les demandes d'aide et d'acceptation des commentaires des utilisateurs, nous avons choisi Oracle Digital Assistant comme élément frontal des interrogations 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 dans 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éalables
-
Installation et familiarisation avec Oracle Digital Assistant et Oracle APEX.
-
L'application Oracle APEX doit figurer sur une version d'Oracle Database qui prend en charge Oracle Autonomous Database Select AI.
-
Compte avec les données d'identification d'un modèle LLLM (Large Language Model), qui génère le code SQL en fonction de l'entrée utilisateur. Pour obtenir des conseils sur cette condition préalable, voir le blogue 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 Atelier SQL -> Commandes SQL, exécutez le code ci-dessous pour créer un profil d'intelligence artificielle (IA) afin de spécifier les schémas et les objets de base de données qui seront utilisés avec Sélectionner l'IA. Le profil sera utilisé dans la tâche 2.
Pour ce tutoriel, nous avons utilisé OpenAI comme 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
select dbms_cloud_ai.generate(
prompt => 'How many employees work at Oracle?',
action => 'SHOWSQL',
profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;
À partir de là, vous devriez recevoir une interrogation SQL en tant que sortie, en 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 un point d'extrémité POST REST qui sera intégré à Oracle Digital Assistant. Pour créer cela dans Oracle APEX, ouvrez Atelier SQL -> RESTful Services de données et créez un module avec un programme de traitement POST. Le nom du module et le nom du programme de traitement POST sont utilisés dans la tâche 3 pour configurer Oracle Digital Assistant.
Le programme de traitement POST reçoit les questions en langage naturel d'Oracle Digital Assistant et extrait une interrogation SQL. L'interrogation SQL résultante est exécutée et la sortie est retournée à l'assistant numérique pour affichage. Collez le code suivant dans le programme de traitement POST pour le module que vous avez créé :
Conseil : Voir Activation de Data Exchange 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 ce qui suit dans Oracle APEX Atelier SQL -> Commandes SQL pour créer la procédure qui exécute l'interrogation 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 serait une autre option pour différentes applications.
Note : Ce point d'extrémité peut être utilisé à partir de plusieurs assistants numériques Oracle (ou d'applications similaires) pour tirer parti des données et du traitement effectués par Oracle Autonomous Database Select AI.
Tâche 3 : Configurer un assistant Oracle Digital Assistant
Dans notre instance Oracle Digital Assistant, nous avons créé un flux pour traiter les questions sur nos données. Des flux supplémentaires traitent les demandes d'aide, les petites conversations et les commentaires. Les captures d'écran ci-dessous montrent les endroits dans Oracle Digital Assistant où nous avons utilisé les informations sur le point d'extrémité REST que nous avons créé lors de la tâche 2 pour connecter l'agent conversationnel au service REST.
Conseil : Ce tutoriel ne couvre pas la création et la configuration d'Oracle Digital Assistant. Pour plus d'informations, voir Oracle Digital Assistant.
Ce flux transmet l'entrée utilisateur au point d'extrémité REST pour traitement.
Tâche 4 : Préparer les données pour Oracle Autonomous Database Select AI
Notre schéma comprend plusieurs tables jointes à des tables de mappage. Plutôt que de transmettre tout cela au LLM, nous avons créé une vue qui joint les tables pertinentes, en utilisant nos connaissances de 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 sources 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, plus d'informations étaient nécessaires pour que notre application produise de bons résultats. (Nous avons appris que l'ingénierie des invites ne signifie pas codez-la rapidement!) En utilisant la génération augmentée d'extraction (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 dans les commentaires sur les colonnes pertinentes. Vous pouvez envisager ce type d'action pour améliorer vos résultats.
Tâche 5 : Intégrer un assistant numérique Oracle Digital Assistant à 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 à l'application.
-
Dans l'application Oracle APEX, allez à Composants partagés et à Fichiers d'application statiques.
Ces fichiers d'application statiques sont utilisés pour configurer et appeler l'agent conversationnel.
settings.js
web-sdk.js
chatbot_style.css
Note : Téléchargez ces modèles Oracle Digital Assistant à partir d'ici : Téléchargements d'Oracle Digital Assistant (ODA) et d'Oracle Mobile Cloud (OMC).
-
settings.js
: Ce fichier est destiné à la configuration d'Oracle Digital Assistant. Mettez à jour les valeurs suivantes.- URL : Entrez l'URL de votre instance Oracle Digital Assistant.
- Nom : Entrez le nom du robot référencé à partir de l'événement Sur le chargement de page de l'application Oracle APEX dans la page 0.
- ID canal : Entrez l'ID canal copié à partir de l'application Oracle Digital Assistant.
- Associez les sessions d'utilisateur d'application Oracle APEX à une instance de robot qui est tenue à jour dans différentes pages d'application au fur et à mesure que 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 de l'agent conversationnel.
-
Pour configurer l'application à utiliser, chargez le fichier dans Fichiers d'application statiques. Allez à Composants partagés, Attributs de l'interface utilisateur, JavaScript et entrez les URL pour
settings.js
etweb-sdk.js
. -
Allez à 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 celle-ci doit afficher l'icône de l'agent conversationnel en bas à droite de l'écran. Il est prêt pour les utilisateurs de poser des questions en langage naturel!
Étapes suivantes
Activer les interrogations en langage naturel pour ajouter de la valeur à vos données
En combinant trois technologies stratégiques d'Oracle, vous avez rapidement introduit dans votre application des capacités d'IA utiles et extensibles avec un nouvel agent conversationnel qui peut être utilisé dans d'autres applications et sites Web. Vous pouvez élargir 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 d'Oracle Digital Assistant à traiter.
Accédez aux ressources de Database Expert et essayez l'interface en langage naturel pour nous faire part de vos commentaires.
Liens connexes
Confirmation
-
Auteurs - Burt Clouse, Omar Gallardo
-
Contributeurs - Marty Gubar, Mark Hornick, Yuoko Watari
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.
Add a Natural Language Interface to Oracle APEX Application
G11965-04
October 2024