Szenario: IoT-Daten mit ausgewählter KI in APEX abfragen

Verwenden Sie APEX SQL Workshop oder SQLcl, um Fragen in natürlicher Sprache zu Ihren IoT-Daten zu stellen und SQL mit Select AI zu generieren.

Wenn Ihre IoT-Domain mit APEX verbunden ist, können Sie dieses Szenario verwenden, wenn Sie Ihre IoT-Daten mit KI abfragen möchten. Der IoT-Datenbankbenutzer verfügt bereits über die erforderlichen Datenbankberechtigungen und Berechtigungen zur Verwendung von Select AI.

Das Szenario zeigt ein Beispielskript, das ein Select AI-Profil erstellt, eine Eingabeaufforderung in natürlicher Sprache mit DBMS_CLOUD_AI.GENERATE abfragt, die generierte SQL-Anweisung "Select AI" anzeigt und dann diese SQL in APEX SQL Commands ausführen kann.

Weitere Konzepte finden Sie unter AI in APEX auswählen - Häufig gestellte Fragen.

Erforderliche IAM-Policys

Sie benötigen diese Berechtigungen, um IoT-Daten zu lesen und die Ressourcenfamilie der generativen KI zu verwenden.

Lässt zu, dass eine Benutzergruppe eine IoT-Domain in einem bestimmten Compartment liest.
Allow group <your-group-name> to read <iot-domain> in compartment <compartment-name>
Lässt zu, dass eine Benutzergruppe die Ressourcenfamilie der generativen KI in einem bestimmten Compartment verwendet.
allow dynamic-group <your-group-name> to manage generative-ai-family in compartment <compartment-name>

Administratoren: Weitere Informationen zum Einrichten von Policys finden Sie unter Funktionsweise von IAM-Policys für Oracle Cloud Infrastructure. Spezielle Beispiele finden Sie unter Policy-Details für die Internet of Things-(IoT-)Plattform.

AI-Setupskript in APEX hochladen, anpassen und ausführen

  1. Kopieren Sie dieses SQL-Skript, und speichern Sie das Code-Snippet als hochzuladende Datei. Beispiel: select_ai_apex_setup.sql
    Das Skript erstellt eine object_list für die IoT-Schemaobjekte, einschließlich RAW_DATA, HISTORIZED_DATA, SNAPSHOT_DATA, DIGITAL_TWIN_MODELS, DIGITAL_TWIN_INSTANCES und DIGITAL_TWIN_ADAPTERS.
    Beispiel für ein SQL-Skript
    -- 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. Wählen Sie in APEX SQL Workshop aus, und wählen Sie SQL Scripts aus.

  3. Wählen Sie Hochladen aus, um die Datei select_ai_apex_setup.sql zu APEX hinzuzufügen.
  4. Wählen Sie Bearbeiten aus, um das Skript mit Variablen für Ihre Umgebung zu aktualisieren.
    Ersetzen Sie diese durch die Werte für Ihre Umgebung:
    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';
    Dieses Skript verwendet den GenAI-Service, der diese Konstanten verwendet, und "provider": "oci". Wenn Sie ein anderes Modell verwenden möchten, können Sie diese Werte im Skript aktualisieren. Informationen hierzu finden Sie unter Select AI to Use Supported AI Providers konfigurieren.
  5. Ersetzen Sie den Text select und prompt durch die Frage, die von der KI beantwortet werden soll.

    Ersetzen Sie profile_name durch das AI-Profil, für das Sie ausführen möchten.

    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. Wählen Sie Run, und wählen Sie Run Now aus.
  7. Wählen Sie Anzeigen, Los, und scrollen Sie nach unten, um die generierte SQL basierend auf der IoT-Frage im Prompt zu prüfen.
  8. Kopieren Sie das generierte SQL, wählen Sie SQL Workshop aus, und wählen Sie SQL Commands aus.
  9. Fügen Sie die generierte SQL ein, und wählen Sie Ausführen aus, um die generierte SQL auszuführen.
  10. Für diesen Prompt zeigen die Ergebnisse die OCID der digitalen Zwillingsinstanz, ihren Anzeigenamen, die Temperatur und die Feuchtigkeitwerte an.
Warnung

Große Sprachmodelle (LLMs) wurden mit einem breiten Set an Textdokumentation und -inhalt trainiert, normalerweise aus dem Internet. Daher können LLMs Muster aus ungültigen oder böswilligen Inhalten, einschließlich SQL-Injection, integriert haben. LLMs sind in der Lage, nützliche und relevante Inhalte zu generieren. Sie können auch falsche und falsche Informationen generieren, einschließlich SQL-Abfragen, die ungenaue Ergebnisse liefern und/oder die Sicherheit Ihrer Daten beeinträchtigen.

Die Abfragen, die in Ihrem Namen vom benutzerdefinierten LLM-Provider generiert werden, werden in Ihrer Datenbank ausgeführt. Ihre Nutzung dieser Funktion erfolgt ausschließlich auf Ihr eigenes Risiko und ungeachtet sonstiger Vertragsbedingungen in Bezug auf die von Oracle bereitgestellten Services stellt Ihre Annahme dieses Risikos und Ihren ausdrücklichen Ausschluss der Verantwortung oder Haftung von Oracle für Schäden dar, die sich aus dieser Nutzung ergeben.

Beispielabfragen

Verwenden Sie diese Beispiele als Start-Prompts in APEX SQL Commands oder SQLcl. Verwenden Sie in APEX den Text innerhalb der Anführungszeichen als Wert prompt.

Die neueste Telemetrie für ein Gerät finden
'Show the most recent telemetry readings for device <device-id>';
Die heißeste HVAC-Instanz suchen
'Which HVAC instance and model has the highest temperature in the last 1 hour?';
Letzte Gerätefehler suchen
'Which devices reported errors in the last 24 hours?';
Feuchtigkeit nach Gerät zusammenfassen
'Show average humidity by device for the last 7 days';
Geräte ohne Telemetrie suchen, Geräte identifizieren, die offline oder falsch konfiguriert sein könnten
'List devices that have not sent telemetry today';
Abnorme Werksablesungen zusammenfassen
'Summarize abnormal readings for factory floor sensors this week';
Anzahl historischer Datensätze
'How many historized data records are in the IoT domain?';
Anzahl historisierter digitaler Zwillingsinstanzen
'How many digital twin instances are in historized data?';
Am häufigsten verwendete Raw-Dateninstanz suchen
'What instance sent most of the raw data last day?';
Adapter in der Domain zählen
'How many adapters are in the domain?';
Instanzen in der Domain zählen
'How many instances are in the domain?';
Durchschnittliche Instanzen pro Modell
'What is the average number of instances that implement one model?';
Auf abgelehnte Daten prüfen
'Is there rejected data in the domain?';
Datenaufnahmerate für Rohdaten nach Stunde
'What is the average raw data ingestion rate per hour last day, each hour?';
Payload-Größe für Rohdatensatz
'What is the average and max raw record payload size?';
Größe der historischen Datensatz-Payload
'What is the average and max historized record payload size?';
Temperaturtrend nach Stunde
'Show the average temperature by hour for the last day';
Gerätefehler nach Typ gruppieren
'Show devices with error events in the last 7 days grouped by error type';

Best Practices

  • Verwenden Sie zuerst showsql, damit Sie die generierte SQL prüfen können, bevor sie ausgeführt wird.
  • Stellen Sie jeweils eine IoT-Frage.
  • Nehmen Sie bei Bedarf den Gerätetyp, den Metriknamen, die Modellspezifikations-URI oder den Zeitraum auf.
  • Verwenden Sie separate Profilnamen für separate Modelle, wie OpenAI, GOOGLE_GEMINI oder CLAUDE.

Häufig gestellte Fragen (FAQ)

Warum verwendet das APEX-Beispiel profile_name anstelle von SET_PROFILE?
SET_PROFILE legt das Profil für die aktuelle zustandsbehaftete Datenbanksession fest. APEX und Database Actions können zustandslose Verbindungen verwenden. Das einfachere Muster besteht also darin, profile_name direkt an DBMS_CLOUD_AI.GENERATE zu übergeben.
Benötige ich mehrere Profile?
Nein. Verwenden Sie ein Profil, wenn Sie nur einen Provider und ein Modell verwenden möchten. Erstellen Sie mehrere Profile nur, wenn Sie Modelle vergleichen oder zwischen ihnen wechseln möchten, wie z.B. Open AI, Gemini oder Claude.
Warum erwähnen OCI Generative AI und Select AI unterschiedliche Modelllisten?
Select AI ist die Datenbankfunktion. Die Modellliste hängt vom Provider im Profil "AI auswählen" ab. Die Dokumentation zu OCI Generative AI model-region und importiertem Modell wird angewendet, wenn das Profil "provider": "oci" verwendet. Gemini- und Claude-Modelle stammen von Google und Anthropic, nicht von der OCI Generative AI-Servicemodellliste.
Wie steht es um das IoT?
IoT-Daten sind die Datenbankdaten, die KI-Abfragen auswählen. Das AI-Profil "Select" verweist auf die IoT-Schemaobjekte, und der Provider/das Modell wandelt die Eingabeaufforderung in natürlicher Sprache in SQL um.
Muss ich Datenbankberechtigungen oder Berechtigungen für den IoT-Benutzer hinzufügen?
Nein. Zur Verwendung von Select AI sind die erforderlichen Datenbankberechtigungen und Berechtigungen bereits dem IoT-Datenbankbenutzer zugewiesen.

Fehlerbehebung

Die Anfrage gibt keine Zeilen zurück

Bestätigen Sie, dass das Gerät Daten für den angeforderten Zeitraum gemeldet hat. Versuchen Sie, den Zeitraum zu erweitern oder ein bekanntes aktives Gerät abzufragen.

Die Abfrage referenziert die falsche Spalte

Verwenden Sie spezifischere Formulierungen in der Eingabeaufforderung. Geben Sie die genaue Metrik, die Geräte-ID oder den Ereignistyp an.

Berechtigung verweigert

Prüfen Sie, ob der Benutzer über Datenbankberechtigungen und OCI-IAM-Berechtigungen für die erforderlichen Ressourcen verfügt.

Ergebnisansicht unvollständig

Prüfen Sie, ob die Abfrage nach Compartment, Mandant, Gerätegruppe, Region oder Zeitraum gefiltert wird.