Consulta tu Base de Datos con Lenguaje Natural usando Select AI: Uso de DBMS_CLOUD_AI.GENERATE

Karla CornejoKarla Cornejo
4 min read

Uso de Select AI para Interacción en Lenguaje Natural con tu Base de Datos

Oracle ha introducido la funcionalidad Select AI en su Oracle Autonomous Database, que permite a los usuarios realizar consultas usando lenguaje natural, eliminando la necesidad de escribir código SQL complejo.

Select AI se basa en inteligencia artificial generativa y Modelos de Lenguaje Grande (LLMs) para convertir texto en lenguaje natural directamente en consultas SQL de Oracle. Esto significa que los usuarios pueden formular preguntas simples como "¿Cuántos clientes tenemos?" y la IA generará la consulta SQL correspondiente, ejecutándola automáticamente y proporcionando los resultados de manera precisa y eficiente.

Sin embargo, es crucial tener en cuenta que Select AI no es compatible con Database Actions ni con APEX Service. Para aprovechar esta capacidad, es necesario utilizar la función DBMS_CLOUD_AI.GENERATE. Esta función es la clave que permite a los usuarios interactuar con la base de datos mediante prompts en lenguaje natural, facilitando el acceso a la información sin requerir conocimientos avanzados de SQL.

En este blog, veremos cómo configurar Select AI para formular preguntas en lenguaje natural y generar consultas SQL sobre una tabla en especifica: UXUI_USUARIOS, esta tabla cuenta con información por periodo de la cantidad de usuario activos, bajas, altas, ganancias, suscripciones, etc.

  1. En nuestra consola de APEX identificar la tabla y el esquema, sobre la cual haremos las consultas.

  2. Navegar a Autonomous Database, luego ir a la opción:

    APEX Application Development -> APEX Instances-> APEX Instance Details

    Luego, se abrirán las acciones e ingresar a SQL. Asegurarnos que estemos logeados como ADMIN.

    Ejecutar los siguientes comandos en función a nuestro esquema:

     grant execute on DBMS_CLOUD to your_schema_name;
     grant execute on DBMS_CLOUD_AI to your_schema_name;
    

    Select AI se conecta a los LLMs de OpenAI o Cohere a través de REST. Para permitir esta llamada, es necesario configurar la Lista de Control de Acceso (ACL).

    Para este ejemplo usaremos Cohere: 'api.cohere.ai'

     BEGIN
         DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
               HOST => 'api.cohere.ai',
               ACE => XS$ACE_TYPE(PRIVILEGE_LIST => XS$NAME_LIST('http'), 
                                  PRINCIPAL_NAME => 'your_schema_name',
                                  PRINCIPAL_TYPE => XS_ACL.PTYPE_DB)
     );
     END;
    

    Si en caso se requiera usar Openai se cambiaria por: 'api.openai.com'

  3. Luego de configurar los ACL's, el siguiente paso es en APEX App Builder, navegar a la opción de SQL Command, para crear las credenciales y profile.

     BEGIN
         DBMS_CLOUD.create_credential('COHERE_CRED', 'COHERE', 'your_api_token');
     END;
    

    En caso se use OPENAI, usar el siguiente comando:

     BEGIN
         DBMS_CLOUD.create_credential('OPENAI_CRED', 'OPENAI', 'your_api_token');
     END;
    

    Ahora crearemos el profile, en donde indicaremos el esquema, la tabla o las tablas sobre la cual haremos las consultas:

     BEGIN
         DBMS_CLOUD_AI.CREATE_PROFILE(
             profile_name => 'GPT_USUARIOS',
             attributes => '{ "provider": "cohere",
                              "credential_name": "COHERE_CRED",
                              "object_list": [{"owner": "WKSP_KCBARRA", "name": "UXUI_USUARIOS"}]
                            }',
             description => 'AI profile to use Cohere for SQL translation'
         );
     END;
    

    En caso necesitamos más de una tabla, lo ponemos de la siguiente manera:

    "object_list": [{"owner": "esquema", "name": "tabla1"},

    {"owner": "esquema", "name": "tabla2"},

    {"owner": "esquema", "name": "tabla3"},

    {"owner": "esquema", "name": "tabla4"}]

  4. Ahora vamos a lo nuestro, usar DBMS_CLOUD_AI.GENERATE.

    Por ejemplo en este caso queremos saber que Periodo tiene el maximo en usuarios activos, tenemos que identificar el profile_name creado en el punto anterior:

     BEGIN
         dbms_output.put_line(
             dbms_cloud_ai.generate(
                                     prompt => 'Cual es el periodo donde los usuarios_activos es el maximo',
                                     action => 'showsql',
                                     profile_name => 'GPT_USUARIOS'
                                    )
           );
     END;
    

    Usando DBMS_CLOUD_AI.GENERATE, vemos como en lenguaje natural, con la action: 'showsql', podemos obtener la sentencia SQL propuesta en función a lo expuesto en el prompt.

  5. En acción veremos el uso de DBMS_CLOUD_AI.GENERATE.

    En esta aplicación podemos realizar preguntas en el prompt como:

    • Cual es la sumatoria de usuarios bajas.

    • Cual es el periodo del máximo de usuarios activos.

    • Que periodo tiene la maxima suscripcion total

    • Cual es el porcentaje de ganancias por periodo, entre otras.

  1. Tips adicionales:

    1. Para obtener la sentencia SQL he usado:

       dbms_cloud_ai.generate(
                   prompt => :P3_PROMPT,
                   action => 'showsql',
                   profile_name => 'GPT_USUARIOS'
                   );
      
    2. Para obtener el resultado, en función al sql, he creado una funcion que me devuelva el SQL y luego lo he usado en un reporte Clásico de tipo PL/SQL Function Body returning SQL Query:

       dbms_cloud_ai.generate(
                   prompt => p_prompt,
                   action => 'showsql',
                   profile_name => 'GPT_USUARIOS'
                   );
      

    3. Para visualizar el explain, o la explicación de todo he usado lo siguiente:

       return '<h3>Explain: </h3><div><pre>'||dbms_cloud_ai.generate(
                   prompt => 'explain this sql query to a non-technical user: '||:P3_SQL_SENTENCE  ,
                   action => 'chat',
                   profile_name => 'GPT_USUARIOS'
           )||'</pre></div>';
      

CONCLUSIÓN:

La integración de inteligencia artificial en Oracle Autonomous Database a través de Select AI representa un avance significativo en la forma en que los usuarios pueden interactuar con sus datos. Aunque existen ciertas limitaciones en cuanto a su disponibilidad, la capacidad de realizar consultas complejas utilizando lenguaje natural mediante DBMS_CLOUD_AI.GENERATE democratiza el acceso a los datos, permitiendo que un mayor número de usuarios aproveche el poder de las bases de datos sin necesidad de habilidades técnicas avanzadas. Este enfoque no solo simplifica el proceso de consulta, sino que también abre nuevas posibilidades para la toma de decisiones informada en tiempo real.

Artículos relacionados:

ArticuloOracle

ArticuloOracle2

2
Subscribe to my newsletter

Read articles from Karla Cornejo directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Karla Cornejo
Karla Cornejo