Scénario : requête de données IoT avec Select AI dans APEX
Utilisez APEX SQL Workshop ou SQLcl pour poser des questions en langage naturel sur vos données IoT afin de générer du code SQL avec Select AI.
Lorsque votre domaine IoT est connecté à APEX, vous pouvez utiliser ce scénario si vous souhaitez interroger vos données IoT à l'aide de l'IA. L'utilisateur de base de données IoT dispose déjà des privilèges de base de données requis et des autorisations pour utiliser Select AI.
Le scénario présente un exemple de script qui crée un profil Select AI, demande une invite en langage naturel avec DBMS_CLOUD_AI.GENERATE, affiche le code SQL généré par Select AI, puis vous pouvez exécuter ce code SQL dans les commandes SQL APEX.
Pour plus de concepts, reportez-vous à la FAQ Select AI in APEX.
Tâches
Stratégies IAM requises
Vous devez disposer de ces droits d'accès pour lire les données IoT et utiliser la famille de ressources d'IA générative.
Allow group <your-group-name> to read <iot-domain> in compartment <compartment-name>Permet à un groupe d'utilisateurs d'utiliser la famille de ressources Generative AI dans un compartiment spécifique.allow dynamic-group <your-group-name> to manage generative-ai-family in compartment <compartment-name>Administrateurs : si vous ne connaissez pas les stratégies, pour en savoir plus sur leur configuration, reportez-vous à Fonctionnement des stratégies IAM pour Oracle Cloud Infrastructure. Pour obtenir des exemples spécifiques, reportez-vous à Détails de stratégie pour la plate-forme Internet of Things (IoT).
Avant de commencer
Vérifiez que vous disposez des éléments suivants :
- Accès configuré à l'espace de travail APEX pour l'utilisateur de base de données IoT.
- Stratégies IAM requises afin de disposer des droits d'accès permettant d'interroger la base de données ou la source de données cible.
Téléchargement, personnalisation et exécution du script de configuration Select AI dans APEX
- Copiez cet exemple de script SQL et enregistrez le fragment de code en tant que fichier à télécharger, par exemple :
select_ai_apex_setup.sqlLe script crée une valeurobject_listpour les objets de schéma IoT, notammentRAW_DATA,HISTORIZED_DATA,SNAPSHOT_DATA,DIGITAL_TWIN_MODELS,DIGITAL_TWIN_INSTANCESetDIGITAL_TWIN_ADAPTERS.Exemple 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; / Dans APEX, sélectionnez SQL Workshop, puis SQL Scripts (Scripts SQL).
- Sélectionnez Télécharger vers le serveur pour ajouter le fichier
select_ai_apex_setup.sqlà APEX. - Sélectionnez Modifier pour mettre à jour le script avec des variables pour votre environnement.Remplacez les valeurs par les valeurs propres à votre environnement :
Ce script utilise le service d'IA générative qui utilise ces constantes etc_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 vous souhaitez utiliser un autre modèle, vous pouvez mettre à jour ces valeurs dans le script. Reportez-vous à Configuration de la sélection d'IA pour utiliser les fournisseurs d'IA pris en charge. - Remplacez le texte
selectetpromptpar la question à laquelle l'IA doit répondre.Remplacez
profile_namepar le profil AI que vous souhaitez exécuter.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', - Sélectionnez Exécuter, puis Exécuter maintenant.
- Sélectionnez Visualiser, puis Accéder pour consulter le code SQL généré en fonction de la question IoT dans l'invite.
- Copiez le code SQL généré, sélectionnez SQL Workshop, puis Commandes SQL.
- Collez le code SQL généré et sélectionnez Exécuter pour exécuter le code SQL généré.
- Pour cette invite, les résultats affichent l'OCID de jumeau numérique, son nom d'affichage, la température et les valeurs d'humidité.
Les grands modèles de langage (LLM) ont été entraînés sur un large éventail de contenu et de documentation textuelle, généralement à partir d'Internet. Par conséquent, les LLM peuvent avoir incorporé des modèles à partir de contenu non valide ou malveillant, y compris l'injection SQL. Les LLM sont aptes à générer du contenu utile et pertinent, ils peuvent également générer des informations incorrectes et fausses, y compris des requêtes SQL qui produisent des résultats inexacts et/ou compromettent la sécurité de vos données.
Les requêtes générées en votre nom par le fournisseur de LLM spécifié par l'utilisateur seront exécutées dans votre base de données. Votre utilisation de cette fonctionnalité est uniquement à vos risques et périls, et nonobstant toute autre condition générale relative aux services fournis par Oracle, constitue votre acceptation de ce risque et exclut expressément la responsabilité d'Oracle quant à tout dommage résultant de cette utilisation.
Exemples de requête
Utilisez ces exemples en tant qu'invites de début dans les commandes SQL APEX ou SQLcl. Dans APEX, utilisez le texte entre guillemets comme valeur prompt.
- Trouver la dernière télémétrie pour un appareil
'Show the most recent telemetry readings for device <device-id>';- Recherche de l'instance HVAC la plus chaude
'Which HVAC instance and model has the highest temperature in the last 1 hour?';- Rechercher les erreurs de périphérique récentes
'Which devices reported errors in the last 24 hours?';- Résumer l'humidité par appareil
'Show average humidity by device for the last 7 days';- Rechercher les périphériques sans télémétrie aujourd'hui, identifier les périphériques qui peuvent être hors ligne ou mal configurés
'List devices that have not sent telemetry today';- Résumer les relevés d'usine anormaux
'Summarize abnormal readings for factory floor sensors this week';- Nombre d'enregistrements de données historiques
'How many historized data records are in the IoT domain?';- Compter les instances de jumeaux numériques historiques
'How many digital twin instances are in historized data?';- Trouver l'instance de données brutes la plus occupée
'What instance sent most of the raw data last day?';- Compter les adaptateurs dans le domaine
'How many adapters are in the domain?';- Compter les instances dans le domaine
'How many instances are in the domain?';- Nombre moyen d'instances par modèle
'What is the average number of instances that implement one model?';- Vérifier les données rejetées
'Is there rejected data in the domain?';- Taux d'ingestion de données brutes par heure
'What is the average raw data ingestion rate per hour last day, each hour?';- Taille de la charge utile d'enregistrement brut
'What is the average and max raw record payload size?';- Taille de la charge utile d'enregistrement historique
'What is the average and max historized record payload size?';- Tendance de la température par heure
'Show the average temperature by hour for the last day';- Regrouper les erreurs de périphérique par type
'Show devices with error events in the last 7 days grouped by error type';
Meilleures pratiques
- Utilisez d'abord
showsqlafin de vérifier l'instruction SQL générée avant son exécution. - Posez une question IoT à la fois.
- Incluez le type de périphérique, le nom de mesure, l'URI de spécification de modèle ou la période lorsque cela est important.
- Utilisez des noms de profil distincts pour des modèles distincts, par exemple
OpenAI,GOOGLE_GEMINIouCLAUDE.
FAQ
- Pourquoi l'exemple APEX utilise-t-il
profile_nameau lieu deSET_PROFILE? SET_PROFILEdéfinit le profil de la session de base de données avec conservation de statut en cours. APEX et Database Actions peuvent utiliser des connexions sans conservation de statut. Par conséquent, le modèle le plus simple consiste à transmettreprofile_namedirectement àDBMS_CLOUD_AI.GENERATE.- Ai-je besoin de plusieurs profils ?
- Non Utilisez un seul profil si vous ne voulez utiliser qu'un seul fournisseur et modèle. Créez plusieurs profils uniquement lorsque vous souhaitez comparer ou basculer entre des modèles, tels que Open AI, Gemini ou Claude.
- Pourquoi OCI Generative AI et Select AI mentionnent-ils différentes listes de modèles ?
- Sélectionnez AI comme fonctionnalité de base de données. La liste de modèles dépend du fournisseur dans le profil Select AI. La région de modèle OCI Generative AI et la documentation de modèle importé s'appliquent lorsque le profil utilise
"provider": "oci". Les modèles Gemini et Claude proviennent de Google et Anthropic, et non de la liste des modèles de service OCI Generative AI. - En quoi cela concerne-t-il l'IoT ?
- Les données IoT sont les données de base de données qui sélectionnent les requêtes AI. Le profil Select AI pointe vers les objets de schéma IoT et le fournisseur/modèle transforme l'invite en langage naturel en SQL.
- Dois-je ajouter des autorisations ou des autorisations de base de données pour l'utilisateur IoT ?
- Non Pour utiliser Select AI, les privilèges et autorisations de base de données requis sont déjà affectés à l'utilisateur de base de données IoT.
Dépannage
La requête ne renvoie aucune ligne
La requête référence la mauvaise colonne
Autorisation refusée
Résultats incomplets
Etapes suivantes
- Configurez une connexion directe à la base de données du domaine IoT.
- Consultez le schéma de base de données de domaine IoT.
- Configurez une connexion au serveur IoT MCP.