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.
Obiettivi
- Impostare un'interfaccia Oracle Digital Assistant all'interno di un'applicazione Oracle APEX per fornire un'interfaccia in linguaggio naturale per l'esecuzione di query sui dati in Oracle Autonomous Database dell'applicazione.
Prerequisiti
-
Installazioni e familiarità con Oracle Digital Assistant e Oracle APEX.
-
L'applicazione Oracle APEX deve avere una versione di Oracle Database che supporti Oracle Autonomous Database Select AI.
-
Account con le credenziali per un modello LLM (Large Language Model), che genererà l'istruzione SQL in base all'input dell'utente. Per indicazioni su questo prerequisito, consulta il blog di Mark Hornick Presentazione di Select AI - Natural Language to SQL Generation su Autonomous Database.
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.
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.
-
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
.
- userId:
-
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.
-
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
eweb-sdk.js
. -
Andare alla scheda CSS e immettere l'URL per il file CSS.
-
Nella pagina globale 0 dell'applicazione, aggiungere un evento attivato al caricamento della pagina per richiamare la funzione
initSdk
nel filesettings.js
.
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.
Collegamenti correlati
Conferme
-
Autori - Burt Clouse, Omar Gallardo
-
Contributori: Marty Gubar, Mark Hornick, Yuoko Watari
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.
Add a Natural Language Interface to Oracle APEX Application
G11967-04
October 2024