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.
Tareas
Políticas de IAM necesarias
Necesita estos permisos para leer datos de IoT y utilizar la familia de recursos de IA generativa.
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).
Antes de empezar
Confirme que tiene:
- Acceso configurado al espacio de trabajo de APEX para el usuario de la base de datos de IoT.
- Políticas de IAM necesarias para que tenga permisos para consultar la base de datos de destino o el origen de datos.
Cargar, personalizar y ejecutar el script de selección de configuración de IA en APEX
- Copie este script SQL de ejemplo y guarde el fragmento de código como un archivo para cargarlo, por ejemplo:
select_ai_apex_setup.sqlEl script crea unobject_listpara los objetos de esquema de IoT, incluidosRAW_DATA,HISTORIZED_DATA,SNAPSHOT_DATA,DIGITAL_TWIN_MODELS,DIGITAL_TWIN_INSTANCESyDIGITAL_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; / En APEX, seleccione SQL Workshop y, a continuación, seleccione SQL Scripts.
- Seleccione Cargar para agregar el archivo
select_ai_apex_setup.sqla APEX. - Seleccione Editar para actualizar el script con variables para el entorno.Sustituya estos valores por los valores del entorno:
Este script utiliza el servicio GenAI que utiliza estas constantes yc_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';"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. - Sustituya el texto
selectypromptpor la pregunta que desea que responda la IA.Sustituya
profile_namepor 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', - Seleccione Ejecutar y, a continuación, Ejecutar ahora.
- 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.
- Copie el SQL generado, seleccione SQL Workshop y, a continuación, seleccione SQL Commands.
- Pegue el SQL generado y seleccione Ejecutar para ejecutar el SQL generado.
- 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.
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
showsqlen 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_GEMINIoCLAUDE.
Preguntas más frecuentes
- ¿Por qué el ejemplo de APEX utiliza
profile_nameen lugar deSET_PROFILE? SET_PROFILEdefine 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 transferirprofile_namedirectamente aDBMS_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
La consulta hace referencia a la columna incorrecta
Permiso denegado
Resultado incompleto
Qué es lo siguiente
- Configure una conexión directa a la base de datos de dominio de IoT.
- Revise el esquema de base de datos de dominio de IoT.
- Configure una conexión al servidor MCP de IoT.