Adición de una interfaz de lenguaje natural a la aplicación Oracle APEX

Introducción

Operamos el sitio de Database Expert Resources (DBExpert Toolkit), que proporciona información comparativa y herramientas interactivas que ayudan a los usuarios a identificar el mejor Oracle Database Cloud Service para sus casos de uso. Recientemente agregamos una interfaz de lenguaje natural a nuestro sitio web para que los usuarios también puedan hacer preguntas sobre los servicios en la nube.

Nuestro sitio web es una instancia de Oracle Application Express (Oracle APEX) que se ejecuta en una base de datos Oracle Autonomous Transaction Processing Serverless, y vimos que la nueva instancia de Oracle Autonomous Database Select AI estaba disponible para permitir interacciones de lenguaje natural con nuestros datos.

Para manejar correctamente no solo las preguntas relacionadas con el contenido, sino también las solicitudes de ayuda y aceptar comentarios de los usuarios, elegimos Oracle Digital Assistant para la interfaz de usuario de las consultas de lenguaje natural.

En este tutorial se describen las tareas que hemos realizado para agregar la interfaz de lenguaje natural.

AskDBExpert en oracle.com/dbexpert

Objetivos

Requisitos

Tarea 1: Conexión de Oracle Autonomous Database Select AI a su LLM

En el espacio de trabajo de APEX, en Taller de SQL -> Comandos SQL, ejecute el siguiente código para crear un perfil de inteligencia artificial (IA) para especificar esquemas y objetos de base de datos que se utilizarán con Select AI. El perfil se utilizará en la tarea 2.

Para este tutorial, hemos utilizado OpenAI como 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;

Para verificar la configuración de Oracle Autonomous Database Select AI, ejecute

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

De esta forma, debe recibir una consulta SQL como salida, verificando la configuración.

Tarea 2: Integración de la API de REST

Una vez que Oracle Autonomous Database Select AI trabaje con los objetos de base de datos, cree un punto final de REST POST que se integrará con Oracle Digital Assistant. Para crear esto en Oracle APEX, abra Taller de SQL -> Servicios de datos RESTful y cree un módulo con un manejador POST. El nombre del módulo y el nombre del manejador POST se utilizan en la tarea 3 para configurar Oracle Digital Assistant.

El manejador POST recibe las preguntas de lenguaje natural de Oracle Digital Assistant y recupera una consulta SQL. Se ejecuta la consulta SQL resultante y la salida se devuelve al asistente digital para su visualización. Pegue el siguiente código en el manejador POST para el módulo que ha creado:

Consejo: consulte Activación del intercambio de datos con servicios de RESTful para obtener más información sobre los servicios de RESTful con 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;

Ejecute lo siguiente en Oracle APEX Taller de SQL -> Comandos SQL para crear el procedimiento que ejecuta la consulta SQL recibida de 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 salida se formatea en una tabla para su uso con Oracle Digital Assistant; la salida JSON sería otra opción para diferentes aplicaciones.

Nota: Este punto final se puede utilizar desde varios asistentes digitales de Oracle (o aplicaciones similares) para aprovechar los datos y el procesamiento realizados por Oracle Autonomous Database Select AI.

Tarea 3: Configuración de Oracle Digital Assistant

En nuestra instancia de Oracle Digital Assistant, creamos un flujo para gestionar preguntas sobre nuestros datos. Los flujos adicionales gestionan las solicitudes de ayuda, las conversaciones pequeñas y los comentarios. En las capturas de pantalla siguientes se muestran los lugares de Oracle Digital Assistant donde hemos utilizado la información sobre el punto final de REST que hemos creado en la tarea 2 con el fin de conectar el chatbot al servicio REST.

Consejo: en este tutorial no se trata la creación ni la configuración de Oracle Digital Assistant. Para obtener más información, consulte Oracle Digital Assistant.

Este flujo transfiere la entrada del usuario al punto final de REST para su procesamiento.

Configuración de servicios de API de Oracle Digital Assistant

Oracle Digital Assistant: definición de variable para llamar al servicio REST

Oracle Digital Assistant: definición de detalles de variables

Oracle Digital Assistant - Llamar al servicio REST

Oracle Digital Assistant - Capturar respuesta de servicio REST

Tarea 4: Preparación de datos para Oracle Autonomous Database Select AI

Nuestro esquema incluye varias tablas que se unen con tablas de asignación. En lugar de pasar todo esto al LLM, creamos una vista que une las tablas relevantes, utilizando nuestro conocimiento de dominio para enviar una tabla con todos (y solo) los datos necesarios. Esta vista se refresca periódicamente desde las tablas de origen para mantenerse actualizada.

Pulir la experiencia con la recuperación de generación aumentada (RAG)

Rápidamente descubrimos que, aunque estábamos enviando nuestros datos completos y de confianza al LLM, se necesitaba más información para que nuestra aplicación produjera buenos resultados. (Aprendimos que la ingeniería rápida no significa codificarlo rápidamente!) Al utilizar la generación aumentada de recuperación (RAG), pudimos mejorar nuestros resultados. Por ejemplo, las aplicaciones empaquetadas de Oracle representadas en nuestros datos son conocidas por varias abreviaturas y acrónimos, que ahora proporcionamos en comentarios sobre las columnas relevantes. Puede considerar este tipo de acción para mejorar sus resultados.

Tarea 5: Integración de Oracle Digital Assistant en la aplicación Oracle APEX

La aplicación es una instancia de Oracle APEX alojada en una instancia de Oracle Autonomous Database. Integre Oracle Digital Assistant en la aplicación.

  1. En la aplicación Oracle APEX, vaya a Componentes compartidos y Archivos de aplicación estática.

    Estos archivos de aplicación estáticos se utilizan para configurar y llamar al chatbot.

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

    Nota: Descargue estas plantillas de Oracle Digital Assistant desde aquí: Descargas de Oracle Digital Assistant (ODA) y Oracle Mobile Cloud (OMC).

    • settings.js: este archivo es para la configuración de Oracle Digital Assistant. Actualice los siguientes valores.

      • URL: introduzca la URL de la instancia de Oracle Digital Assistant.
      • Nombre: introduzca el nombre del bot al que se hace referencia desde el evento En carga de página de la aplicación Oracle APEX en la página 0.
      • ID de canal: introduzca el ID de canal copiado de la aplicación Oracle Digital Assistant.
      • Para vincular sesiones de usuario de aplicación de Oracle APEX a una instancia de bot que se mantiene en diferentes páginas de aplicación a medida que navega el usuario.
        • userId: document.getElementById("pInstance").value.
    • web-idk.js: no es necesario realizar cambios en este archivo, pero se debe actualizar para cada nueva versión de la plataforma Oracle Digital Assistant, para que coincida con la versión de Oracle Digital Assistant.

    • chatbot_style.css: cree el archivo CSS desde cero para personalizar el icono del bot conversacional.

  2. Para configurar la aplicación que se va a utilizar, cargue el archivo en Archivos de Aplicación Estáticos. Vaya a Componentes compartidos, Atributos de interfaz de usuario, JavaScript e introduzca las URL para settings.js y web-sdk.js.

    Actualizar los atributos de interfaz de usuario de la aplicación: JavaScript

  3. Vaya al separador CSS e introduzca la URL del archivo CSS.

    Actualizar los atributos de interfaz de usuario de la aplicación - CSS

  4. En la página global 0 de la aplicación, agregue un evento que se dispare al cargar la página para llamar a la función initSdk en el archivo settings.js.

    Evento de aplicación APEX para la inicialización del bot conversacional

    Código de evento de la aplicación APEX para la inicialización del bot conversacional

Ejecute la aplicación de Oracle APEX y debe mostrar el icono de chatbot en la parte inferior derecha de la pantalla. ¡Está listo para que los usuarios hagan preguntas sobre el lenguaje natural!

Pasos Siguientes

Activar consultas de lenguaje natural para agregar valor a los datos

Al combinar tres tecnologías estratégicas de Oracle, introdujo rápidamente capacidades de IA útiles y extensibles en su aplicación con un nuevo chatbot que se puede utilizar en otras aplicaciones y sitios web. Puede ampliar el ámbito de los datos gestionados mediante Oracle Autonomous Database Select AI e integrar fuentes de información adicionales para que se procesen los nuevos flujos de Oracle Digital Assistant.

Vaya a los recursos de Database Expert y pruebe la interfaz de lenguaje natural y proporcione comentarios.

AskDBExpert en oracle.com/dbexpert

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.