Escenario: consulta de datos de IoT con IA seleccionada en APEX

Utiliza APEX SQL Workshop o SQLcl para hacer preguntas en lenguaje natural sobre tus datos de IoT para generar SQL con Select AI.

Cuando el dominio de IoT está conectado a APEX, puede utilizar este escenario si desea consultar los datos de IoT mediante IA. El usuario de la base de datos de IoT ya tiene los privilegios y permisos de base de datos necesarios para utilizar Select AI.

El escenario muestra un script de ejemplo que crea un perfil Select AI, solicita una petición de datos en lenguaje natural con DBMS_CLOUD_AI.GENERATE, muestra el SQL que ha generado Select AI y, a continuación, puede ejecutar ese SQL en los comandos SQL de APEX.

Para obtener más conceptos, consulte Preguntas frecuentes sobre la selección de IA en APEX.

Políticas de IAM necesarias

Necesita estos permisos para leer datos de IoT y utilizar la familia de recursos de IA generativa.

Permite a un grupo de usuarios leer un dominio de IoT en un compartimento específico.
Allow group <your-group-name> to read <iot-domain> in compartment <compartment-name>
Permite que un grupo de usuarios utilice la familia de recursos de IA generativa en un compartimento específico.
allow dynamic-group <your-group-name> to manage generative-ai-family in compartment <compartment-name>

Administradores: si es nuevo en las políticas, para obtener más información sobre la configuración de políticas, consulte Cómo funcionan las políticas de IAM para Oracle Cloud Infrastructure. Para ver ejemplos específicos, consulte Detalles de políticas de la plataforma Internet of Things (IoT).

Cargar, personalizar y ejecutar el script de selección de configuración de IA en APEX

  1. Copie este script SQL de ejemplo y guarde el fragmento de código como un archivo para cargarlo, por ejemplo: select_ai_apex_setup.sql
    El script crea un object_list para los objetos de esquema de IoT, incluidos RAW_DATA, HISTORIZED_DATA, SNAPSHOT_DATA, DIGITAL_TWIN_MODELS, DIGITAL_TWIN_INSTANCES y DIGITAL_TWIN_ADAPTERS.
    Ejemplo de script SQL
    -- APEX SQL Commands setup script.
    -- Run this code block first in APEX SQL Commands or SQL Scripts.
    
    alter session set nls_language = 'ENGLISH';
    
    declare
      c_domain_short_id       constant varchar2(128)  := '<domain short id in upper case>';
      c_genai_user_ocid       constant varchar2(4000) := 'ocid1.user.oc1..unique';
      c_genai_tenancy_ocid    constant varchar2(4000) := 'ocid1.tenancy.oc1..unique';
      c_genai_fingerprint     constant varchar2(4000) := 'unique';
      c_genai_region          constant varchar2(128)  := 'region';
      c_genai_model           constant varchar2(4000) := 'xai.grok-4.20-reasoning';
      c_genai_credential_name constant varchar2(128)  := 'GENAI_CRED';
      c_genai_profile_name    constant varchar2(128)  := 'GENAI_XAI_GROK_420';
    
      c_private_key constant clob := q'~-----BEGIN PRIVATE KEY-----
    <private key>
    -----END PRIVATE KEY-----~';
    
      type t_name_list is table of varchar2(128);
      l_objects t_name_list := t_name_list(
        'RAW_DATA',
        'HISTORIZED_DATA',
        'REJECTED_DATA',
        'SNAPSHOT_DATA',
        'RAW_COMMAND_DATA',
        'DIGITAL_TWIN_MODEL_SPECS',
        'DIGITAL_TWIN_MODELS',
        'DIGITAL_TWIN_INSTANCES',
        'DIGITAL_TWIN_RELATIONSHIPS',
        'DIGITAL_TWIN_ADAPTERS'
      );
    
      l_iot_owner   varchar2(130);
      l_attributes  clob;
      l_object_list clob := '[';
    begin
      l_iot_owner := upper(trim(c_domain_short_id)) || '__IOT';
    
      begin
        dbms_cloud_ai.drop_profile(c_genai_profile_name);
      exception
        when others then
          null;
      end;
    
      begin
        dbms_cloud.drop_credential(c_genai_credential_name);
      exception
        when others then
          null;
      end;
    
      dbms_cloud.create_credential(
        credential_name => c_genai_credential_name,
        user_ocid       => c_genai_user_ocid,
        tenancy_ocid    => c_genai_tenancy_ocid,
        private_key     => c_private_key,
        fingerprint     => c_genai_fingerprint
      );
    
      for i in 1 .. l_objects.count loop
        if i > 1 then
          l_object_list := l_object_list || ',';
        end if;
        l_object_list := l_object_list ||
          '{"owner":"' || l_iot_owner || '","name":"' || l_objects(i) || '"}';
      end loop;
      l_object_list := l_object_list || ']';
    
      l_attributes := '{' ||
        '"provider":"oci",' ||
        '"credential_name":"' || c_genai_credential_name || '",' ||
        '"region":"' || c_genai_region || '",' ||
        '"oci_compartment_id":"' || c_genai_tenancy_ocid || '",' ||
        '"model":"' || c_genai_model || '",' ||
        '"annotations":false,' ||
        '"comments":true,' ||
        '"object_list":' || l_object_list ||
      '}';
    
      dbms_cloud_ai.create_profile(
        profile_name => c_genai_profile_name,
        attributes   => l_attributes
      );
    end;
    /
  2. En APEX, seleccione SQL Workshop y, a continuación, seleccione SQL Scripts.

  3. Seleccione Cargar para agregar el archivo select_ai_apex_setup.sql a APEX.
  4. Seleccione Editar para actualizar el script con variables para el entorno.
    Sustituya estos valores por los valores del entorno:
    c_domain_short_id       constant varchar2(128)  := '<DOMAIN_SHORT_ID>';
    c_genai_region          constant varchar2(128)  := '<region>';
    c_genai_model           constant varchar2(4000) := 'xai.grok-4.20-reasoning';
    c_genai_profile_name    constant varchar2(128)  := 'GENAI_XAI_GROK_420';
    Este script utiliza el servicio GenAI que utiliza estas constantes y "provider": "oci". Si desea utilizar un modelo diferente, puede actualizar estos valores en el script. Consulte Configurar Seleccionar AI para Utilizar Proveedores de AI Soportados.
  5. Sustituya el texto select y prompt por la pregunta que desea que responda la IA.

    Sustituya profile_name por el perfil AI en el que desea ejecutar.

    select 'GENAI_XAI_GROK_420' as profile_name,
           upper(trim('IN2AHR4KWKIRC')) || '__IOT' as iot_owner,
           'Setup complete' as status
    from dual;
    
    
    select 'which digital twin instances with the model spec uri dtmi:com:oracle:iot:sample:hvac:iot-domain-short-id' as prompt_text,
           dbms_lob.substr(
             replace(
               replace(
                 dbms_cloud_ai.generate(
                   prompt       => 'which model spec uri has exactly two digital twin instances and both in active state',
                   profile_name => 'GENAI_XAI_GROK_420',
  6. Seleccione Ejecutar y, a continuación, Ejecutar ahora.
  7. Seleccione Ver y, a continuación, Ir desplácese hacia abajo para revisar el SQL generado en función de la pregunta de IoT de la petición de datos.
  8. Copie el SQL generado, seleccione SQL Workshop y, a continuación, seleccione SQL Commands.
  9. Pegue el SQL generado y seleccione Ejecutar para ejecutar el SQL generado.
  10. Para esta petición de datos, los resultados muestran el OCID de instancia gemela digital, su nombre mostrado, la temperatura y los valores de humedad.
Advertencia

Los grandes modelos de lenguaje (LLM) se han entrenado en un amplio conjunto de documentación y contenido de texto, normalmente desde Internet. Como resultado, los LLM pueden haber incorporado patrones de contenido no válido o malicioso, incluida la inyección SQL. Los LLM son expertos en generar contenido útil y relevante, también pueden generar información incorrecta y falsa, incluidas consultas SQL que producen resultados inexactos y / o comprometen la seguridad de sus datos.

Las consultas generadas en su nombre por el proveedor de LLM especificado por el usuario se ejecutarán en la base de datos. El uso que Vd. haga de esta función será a su propio riesgo e, independientemente de cualesquiera otros términos y condiciones relacionados con los Servicios prestados por Oracle, constituirá su aceptación de dicho riesgo y exclusión expresa de la responsabilidad de Oracle por cualesquiera daños resultantes del uso de esta función.

Ejemplos de consulta

Utilice estos ejemplos como peticiones de datos iniciales en los comandos SQL de APEX o SQLcl. En APEX, utilice el texto entre comillas como valor prompt.

Encuentra la telemetría más reciente para un dispositivo
'Show the most recent telemetry readings for device <device-id>';
Buscar la instancia de climatización más activa
'Which HVAC instance and model has the highest temperature in the last 1 hour?';
Buscar errores recientes de dispositivo
'Which devices reported errors in the last 24 hours?';
Resume la humedad por dispositivo
'Show average humidity by device for the last 7 days';
Buscar dispositivos sin telemetría hoy, identifica dispositivos que podrían estar fuera de línea o mal configurados
'List devices that have not sent telemetry today';
Resumir lecturas de fábrica anormales
'Summarize abnormal readings for factory floor sensors this week';
Recuento de registros de datos históricos
'How many historized data records are in the IoT domain?';
Recuento de instancias de gemelos digitales historizadas
'How many digital twin instances are in historized data?';
Buscar la instancia de datos raw más activa
'What instance sent most of the raw data last day?';
Adaptadores de recuento en el dominio
'How many adapters are in the domain?';
Recuento de instancias en el dominio
'How many instances are in the domain?';
Media de instancias por modelo
'What is the average number of instances that implement one model?';
Comprobar datos rechazados
'Is there rejected data in the domain?';
Ratio de ingesta de datos sin procesar por hora
'What is the average raw data ingestion rate per hour last day, each hour?';
Tamaño de carga útil de registro bruto
'What is the average and max raw record payload size?';
Tamaño de carga útil de registro histórico
'What is the average and max historized record payload size?';
Tendencia de temperatura por hora
'Show the average temperature by hour for the last day';
Agrupar errores de dispositivo por tipo
'Show devices with error events in the last 7 days grouped by error type';

Mejores prácticas

  • Utilice showsql en primer lugar para revisar el SQL generado antes de que se ejecute.
  • Haga una pregunta de IoT a la vez.
  • Incluya el tipo de dispositivo, el nombre de métrica, el URI de especificación del modelo o el rango temporal cuando sea importante.
  • Utilice nombres de perfil independientes para modelos independientes, por ejemplo, OpenAI, GOOGLE_GEMINI o CLAUDE.

Preguntas más frecuentes

¿Por qué el ejemplo de APEX utiliza profile_name en lugar de SET_PROFILE?
SET_PROFILE define el perfil para la sesión de base de datos con estado actual. APEX y Database Actions pueden utilizar conexiones sin estado, por lo que el patrón más sencillo es transferir profile_name directamente a DBMS_CLOUD_AI.GENERATE.
¿Necesito varios perfiles?
Nº Utilice un perfil si solo desea utilizar un proveedor y un modelo. Cree varios perfiles solo cuando desee comparar o cambiar entre modelos, como Open AI, Gemini o Claude.
¿Por qué OCI Generative AI y Select AI mencionan diferentes listas de modelos?
Select AI is the database feature. The model list depends on the provider in the Select AI profile. OCI Generative AI model-region and imported-model documentation applies when the profile uses "provider": "oci". Gemini and Claude models come from Google and Anthropic, not from the OCI Generative AI service model list.
¿Cómo se relaciona esto con IoT?
Los datos de IoT son los datos de la base de datos que seleccionan las consultas de IA. El perfil Select AI apunta a los objetos de esquema de IoT y el proveedor/modelo convierte la petición de datos en lenguaje natural en SQL.
¿Necesito agregar permisos o permisos de base de datos para el usuario de IoT?
Nº Para utilizar Select AI, los privilegios y permisos de base de datos necesarios ya están asignados al usuario de base de datos de IoT.

Solución de problemas

La Consulta no devuelve ninguna fila

Confirme que el dispositivo haya informado datos para el intervalo de tiempo solicitado. Intente ampliar el intervalo de tiempo o consultar un dispositivo activo conocido.

La consulta hace referencia a la columna incorrecta

Utilice una redacción más específica en la petición de datos. Incluya la métrica exacta, el identificador de dispositivo o el tipo de evento.

Permiso denegado

Verifique que el usuario tiene privilegios de base de datos y permisos de IAM de OCI para los recursos necesarios.

Resultado incompleto

Compruebe si la consulta se filtra por compartimento, inquilino, grupo de dispositivos, región o rango temporal.