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.

AskDBExpert sur oracle.com/dbexpert

Objectifs

Préalables

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.

Configuration des services d'API d'Oracle Digital Assistant

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

Oracle Digital Assistant - Définition des détails des variables

Oracle Digital Assistant - Appeler le service REST

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

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.

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

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

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

  3. Allez à 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.

    Événement d'application APEX pour l'initialisation de l'agent conversationnel

    Code d'événement d'application APEX pour l'initialisation de l'agent conversationnel

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.

AskDBExpert sur oracle.com/dbexpert

Confirmation

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.