Aggiungere un'interfaccia in linguaggio naturale all'applicazione Oracle APEX

Introduzione

Gestiamo il sito Database Expert Resources (DBExpert Toolkit), che fornisce informazioni comparative e strumenti interattivi per aiutare gli utenti a identificare il miglior Oracle Database Cloud Service per i loro casi d'uso. Di recente abbiamo aggiunto un'interfaccia in linguaggio naturale al nostro sito Web in modo che gli utenti possano anche porre domande sui servizi cloud.

Il nostro sito Web è un'istanza di Oracle Application Express (Oracle APEX) in esecuzione su un database Oracle Autonomous Transaction Processing Serverless e abbiamo visto che la nuova Oracle Autonomous Database Select AI era disponibile per abilitare le interazioni del linguaggio naturale con i nostri dati.

Per gestire con grazia non solo le domande relative ai contenuti, ma anche le richieste di aiuto e per accettare il feedback degli utenti, abbiamo scelto Oracle Digital Assistant per il frontend delle query in linguaggio naturale.

Questa esercitazione descrive le attività eseguite per aggiungere l'interfaccia del linguaggio naturale.

AskDBExpert su oracle.com/dbexpert

Obiettivi

Prerequisiti

Task 1: connettere Oracle Autonomous Database Select AI al proprio LLM

Nell'area di lavoro APEX, in SQL Workshop -> Comandi SQL, eseguire il codice riportato di seguito per creare un profilo di intelligenza artificiale (AI) per specificare gli schemi e gli oggetti di database che verranno utilizzati con Select AI. Il profilo verrà utilizzato nel task 2.

Per questo tutorial, abbiamo usato OpenAI come 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;

Per verificare la configurazione di Oracle Autonomous Database Select AI, eseguire

select dbms_cloud_ai.generate(
    prompt => 'How many employees work at Oracle?',
    action => 'SHOWSQL',
    profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;

Da questo, si dovrebbe ricevere una query SQL come output, verificando la configurazione.

Task 2: Integrare l'API REST

Dopo aver utilizzato Oracle Autonomous Database Select AI con gli oggetti di database, creare un endpoint POST REST che verrà integrato con Oracle Digital Assistant. Per creare questa operazione in Oracle APEX, aprire SQL Workshop -> RESTful Data Services e creare un modulo con un handler POST. Il nome del modulo e il nome dell'handler POST vengono utilizzati nel task 3 per la configurazione di Oracle Digital Assistant.

L'handler POST riceve le domande in linguaggio naturale da Oracle Digital Assistant e recupera una query SQL. La query SQL risultante viene eseguita e l'output viene restituito all'assistente digitale per la visualizzazione. Incollare il codice seguente nell'handler POST per il modulo creato:

Suggerimento: per ulteriori dettagli sui servizi RESTful con Oracle APEX, vedere Abilitazione dello scambio di dati con i servizi RESTful.

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;

Eseguire quanto segue in SQL Workshop -> Comandi SQL di Oracle APEX per creare la procedura che esegue la query SQL ricevuta da 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;
/

L'output viene formattato in una tabella da utilizzare con Oracle Digital Assistant. L'output JSON rappresenta un'altra opzione per le diverse applicazioni.

Nota: questo endpoint può essere utilizzato da più assistenti digitali Oracle (o applicazioni simili) per sfruttare i dati e l'elaborazione eseguiti da Oracle Autonomous Database Select AI.

Task 3: configurare un Oracle Digital Assistant

Nella nostra istanza di Oracle Digital Assistant, abbiamo creato un flusso per gestire le domande sui nostri dati. Flussi aggiuntivi che gestiscono le richieste di assistenza, chiacchiere e feedback. Gli screenshot riportati di seguito mostrano i punti in Oracle Digital Assistant in cui sono state utilizzate le informazioni sull'endpoint REST creato nel task 2 per connettere il chatbot al servizio REST.

Suggerimento: questa esercitazione non riguarda la creazione e la configurazione di un Oracle Digital Assistant. Per ulteriori informazioni, vedere Oracle Digital Assistant.

Questo flusso passa l'input utente all'endpoint REST per l'elaborazione.

Configurazione dei servizi API di Oracle Digital Assistant

Oracle Digital Assistant - Impostazione della variabile per la chiamata al servizio REST

Oracle Digital Assistant - Impostazione dettagli variabile

Oracle Digital Assistant - Chiama servizio REST

Oracle Digital Assistant - Acquisisci risposta servizio REST

Task 4: Preparare i dati per Oracle Autonomous Database Select AI

Lo schema include più tabelle unite tramite join con le tabelle di mapping. Invece di passare tutti questi al LLM, abbiamo creato una vista che unisce le tabelle pertinenti, utilizzando la nostra conoscenza del dominio per inviare una tabella con tutti (e solo) i dati necessari. Questa vista viene aggiornata periodicamente dalle tabelle di origine per rimanere aggiornata.

Polacco l'esperienza con Retrieval Augmented Generation (RAG)

Abbiamo rapidamente scoperto che, anche se stavamo inviando i nostri dati completi e affidabili al LLM, erano necessarie ulteriori informazioni per la nostra applicazione per produrre buoni risultati. (Abbiamo appreso che prompt engineering non significa codificarlo rapidamente!) Utilizzando la generazione aumentata di recupero (RAG), siamo stati in grado di migliorare i nostri risultati. Ad esempio, i pacchetti applicativi Oracle rappresentati nei nostri dati sono noti con varie abbreviazioni e acronimi, che ora forniamo nei commenti sulle colonne pertinenti. Si può prendere in considerazione questo tipo di azione per migliorare i risultati.

Task 5: integrazione di un Oracle Digital Assistant nell'applicazione Oracle APEX

L'applicazione è un'istanza di Oracle APEX ospitata in un'istanza di Oracle Autonomous Database. Integrazione di Oracle Digital Assistant nell'applicazione.

  1. Nell'applicazione Oracle APEX, andare a Componenti condivisi e File di applicazione statici.

    Questi file di applicazione statici vengono utilizzati per configurare e richiamare il chatbot.

    • settings.js
    • web-sdk.js
    • chatbot_style.css

    Nota: scaricare i modelli di Oracle Digital Assistant da qui: Download di Oracle Digital Assistant (ODA) e Oracle Mobile Cloud (OMC).

    • settings.js: questo file è per la configurazione di Oracle Digital Assistant. Aggiornare i seguenti valori.

      • URL: immettere l'URL dell'istanza di Oracle Digital Assistant.
      • Nome: immettere il nome del bot a cui viene fatto riferimento dall'evento Al caricamento della pagina dell'applicazione Oracle APEX nella pagina 0.
      • ID canale: immettere l'ID canale copiato dall'applicazione Oracle Digital Assistant.
      • Per collegare le sessioni utente dell'applicazione Oracle APEX a un'istanza bot gestita in diverse pagine dell'applicazione durante la navigazione dell'utente.
        • userId: document.getElementById("pInstance").value.
    • web-idk.js: non sono necessarie modifiche a questo file, ma è necessario aggiornarlo per ogni nuova release della piattaforma Oracle Digital Assistant, in modo che corrisponda alla versione di Oracle Digital Assistant.

    • chatbot_style.css: crea un file CSS da zero per personalizzare l'icona del chatbot.

  2. Per configurare l'applicazione da utilizzare, caricare il file in File di applicazione statici. Andare a Componenti condivisi, Attributi interfaccia utente, JavaScript e immettere gli URL per settings.js e web-sdk.js.

    Aggiornare gli attributi dell'interfaccia utente dell'applicazione - JavaScript

  3. Andare alla scheda CSS e immettere l'URL per il file CSS.

    Aggiorna attributi interfaccia utente dell'applicazione - CSS

  4. Nella pagina globale 0 dell'applicazione, aggiungere un evento attivato al caricamento della pagina per richiamare la funzione initSdk nel file settings.js.

    Evento applicazione APEX per inizializzazione chatbot

    Codice evento applicazione APEX per inizializzazione chatbot

Esegui l'applicazione Oracle APEX e dovrebbe visualizzare l'icona del chatbot in basso a destra nella schermata. È pronto per gli utenti a porre domande sul linguaggio naturale!

Passi successivi

Abilita query in linguaggio naturale per aggiungere valore ai dati

Combinando tre tecnologie Oracle strategiche, hai introdotto rapidamente funzionalità AI utili ed estendibili nella tua applicazione con un nuovo chatbot che può essere utilizzato in altre applicazioni e siti Web. È possibile espandere l'ambito dei dati gestiti utilizzando Oracle Autonomous Database Select AI e integrare fonti di informazioni aggiuntive per i nuovi flussi di Oracle Digital Assistant da elaborare.

Visita le Risorse degli esperti del database e prova l'interfaccia in linguaggio naturale per fornirci feedback.

AskDBExpert su oracle.com/dbexpert

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.