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.

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.

Permet à un groupe d'utilisateurs de lire un domaine IoT dans un compartiment spécifique.
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).

Téléchargement, personnalisation et exécution du script de configuration Select AI dans APEX

  1. 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.sql
    Le script crée une valeur object_list pour les objets de schéma IoT, notamment RAW_DATA, HISTORIZED_DATA, SNAPSHOT_DATA, DIGITAL_TWIN_MODELS, DIGITAL_TWIN_INSTANCES et DIGITAL_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;
    /
  2. Dans APEX, sélectionnez SQL Workshop, puis SQL Scripts (Scripts SQL).

  3. Sélectionnez Télécharger vers le serveur pour ajouter le fichier select_ai_apex_setup.sql à APEX.
  4. Sélectionnez Modifier pour mettre à jour le script avec des variables pour votre environnement.
    Remplacez les valeurs par les valeurs propres à votre environnement :
    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';
    Ce script utilise le service d'IA générative qui utilise ces constantes et "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.
  5. Remplacez le texte select et prompt par la question à laquelle l'IA doit répondre.

    Remplacez profile_name par 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',
  6. Sélectionnez Exécuter, puis Exécuter maintenant.
  7. Sélectionnez Visualiser, puis Accéder pour consulter le code SQL généré en fonction de la question IoT dans l'invite.
  8. Copiez le code SQL généré, sélectionnez SQL Workshop, puis Commandes SQL.
  9. Collez le code SQL généré et sélectionnez Exécuter pour exécuter le code SQL généré.
  10. 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é.
Avertissement

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 showsql afin 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_GEMINI ou CLAUDE.

FAQ

Pourquoi l'exemple APEX utilise-t-il profile_name au lieu de SET_PROFILE ?
SET_PROFILE dé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 à transmettre profile_name directement à 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

Confirmez que le périphérique a signalé des données pour la période demandée. Essayez d'élargir la période ou d'interroger un périphérique actif connu.

La requête référence la mauvaise colonne

Utilisez des termes plus spécifiques dans l'invite. Incluez la mesure exacte, l'identificateur de périphérique ou le type d'événement.

Autorisation refusée

Vérifiez que l'utilisateur dispose de privilèges de base de données et de droits d'accès IAM OCI pour les ressources requises.

Résultats incomplets

Vérifiez si la requête est filtrée par compartiment, locataire, groupe de périphériques, région ou période.