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.

AskDBExpert sur oracle.com/dbexpert

Objectifs

Prérequis

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.

Configuration des services d'API Oracle Digital Assistant

Oracle Digital Assistant - Définition d'une variable pour l'appel d'un service REST

Oracle Digital Assistant - Définir les détails des variables

Oracle Digital Assistant - Appeler le service REST

Oracle Digital Assistant - Capturer la réponse du service REST

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.

  1. 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.
    • 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.

  2. 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 et web-sdk.js.

    Mettez à jour les attributs d'interface utilisateur de l'application - JavaScript

  3. Accédez à l'onglet CSS et entrez l'URL du fichier CSS.

    Mettre à jour les attributs d'interface utilisateur de l'application - CSS

  4. 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 fichier settings.js.

    Evénement d'application APEX pour l'initialisation du chatbot

    Event code d'application APEX pour l'initialisation du chatbot

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.

AskDBExpert sur oracle.com/dbexpert

Remerciements

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.