シナリオ: APEXでSelect AIを使用してIoTデータをクエリ
APEX SQLワークショップまたはSQLclを使用して、IoTデータに関する自然言語の質問を行い、Select AIでSQLを生成します。
IoTドメインがAPEXに接続されている場合、AIを使用してIoTデータを問い合せる場合は、このシナリオを使用できます。IoTデータベース・ユーザーは、Select AIを使用するために必要なデータベース権限および権限をすでに持っています。
このシナリオは、Select AIプロファイルを作成するスクリプトの例を示しており、DBMS_CLOUD_AI.GENERATEを使用して自然言語プロンプトを要求し、Select AIによって生成されたSQLを表示してから、そのSQLをAPEX SQLコマンドで実行できます。
その他の概念については、APEXでのSelect AIのFAQを参照してください。
タスク
必要なIAMポリシー
IoTデータを読み取って生成AIリソース・ファミリを使用するには、これらの権限が必要です。
Allow group <your-group-name> to read <iot-domain> in compartment <compartment-name>ユーザー・グループが特定のコンパートメント内の生成AIリソース・ファミリを使用できるようにします。allow dynamic-group <your-group-name> to manage generative-ai-family in compartment <compartment-name>管理者: ポリシーを初めて使用する場合は、ポリシーの設定についてさらに学習するために、Oracle Cloud InfrastructureのIAMポリシーの仕組みを参照してください。具体的な例は、Internet of Things (IoT)プラットフォームのポリシー詳細を参照してください。
始める前に
次のものがあることを確認します。
- IoTデータベース・ユーザーのAPEXへの構成済アクセス・ワークスペース。
- 必要なIAMポリシー: ターゲット・データベースまたはデータ・ソースを問い合せる権限を持ちます。
APEXでのSelect AI設定スクリプトのアップロード、カスタマイズおよび実行
- この例のSQLスクリプトをコピーし、コード・スニペットをアップロードするファイルとして保存します(例:
select_ai_apex_setup.sql)。このスクリプトは、IoTスキーマ・オブジェクト(RAW_DATA、HISTORIZED_DATA、SNAPSHOT_DATA、DIGITAL_TWIN_MODELS、DIGITAL_TWIN_INSTANCES、DIGITAL_TWIN_ADAPTERSなど)のobject_listを作成します。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; / APEXで、「SQLワークショップ」を選択し、「SQLスクリプト」を選択します。
- 「アップロード」を選択して、
select_ai_apex_setup.sqlファイルをAPEXに追加します。 - 環境の変数を使用してスクリプトを更新するには、「編集」を選択します。これらの値は、ご使用の環境に固有の値に置き換えてください。
このスクリプトは、これらの定数および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';"provider": "oci"を使用する生成AIサービスを使用します。別のモデルを使用する場合は、スクリプトでこれらの値を更新できます。サポートされているAIプロバイダを使用するためのSelect AIの構成を参照してください。 selectおよびpromptテキストを、AIが回答する質問に置き換えます。profile_nameを、実行するAIプロファイルに置き換えます。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',- 「Run」を選択し、「Run Now」を選択します。
- 「表示」を選択し、「実行」をスクロール・ダウンして、プロンプト内のIoT質問に基づいて生成されたSQLを確認します。
- 生成されたSQLをコピーし、「SQLワークショップ」、「SQLコマンド」の順に選択します。
- 生成されたSQLを貼り付け、「実行」を選択して生成されたSQLを実行します。
- このプロンプトでは、「結果」にデジタル・ツイン・インスタンスのOCID、その表示名、温度および湿度の値が表示されます。
大規模言語モデル(LLM)は、一般的にインターネットから、幅広いテキスト・ドキュメントおよびコンテンツに基づいてトレーニングされています。その結果、LLMは、SQLインジェクションを含む、無効または悪意のあるコンテンツからのパターンを組み込んだ可能性があります。LLMは、有用で関連性の高いコンテンツの生成に精通しており、不正確な結果を生成するSQLクエリやデータのセキュリティを損なうSQLクエリなど、誤った情報や誤った情報を生成することもできます。
ユーザー指定のLLMプロバイダによってユーザーにかわって生成された問合せは、データベースで実行されます。この機能の使用は、お客様自身の責任においてのみ行われるものとし、Oracleが提供するサービスに関連するその他の条件にかかわらず、お客様はそのリスクを受け入れるとともに、その使用によって生じた損害についてOracleの責任または責任を明確に排除します。
問合せの例
これらの例は、APEX SQLコマンドまたはSQLclでの開始プロンプトとして使用します。APEXでは、引用符内のテキストをprompt値として使用します。
- デバイスの最新のテレメトリを検索
'Show the most recent telemetry readings for device <device-id>';- 最もホットなHVACインスタンスの検索
'Which HVAC instance and model has the highest temperature in the last 1 hour?';- 最近のデバイスエラーを検索
'Which devices reported errors in the last 24 hours?';- デバイス別の湿度の集計
'Show average humidity by device for the last 7 days';- 現在テレメトリのないデバイスを検出し、オフラインまたは正しく構成されていない可能性のあるデバイスを特定します
'List devices that have not sent telemetry today';- 異常な工場検針の要約
'Summarize abnormal readings for factory floor sensors this week';- 棚卸履歴データ・レコード
'How many historized data records are in the IoT domain?';- 履歴デジタル・ツイン・インスタンスのカウント
'How many digital twin instances are in historized data?';- 最もビジーなRAWデータ・インスタンスの検索
'What instance sent most of the raw data last day?';- ドメイン内のアダプタの数
'How many adapters are in the domain?';- ドメイン内のインスタンスのカウント
'How many instances are in the domain?';- モデル当たりの平均インスタンス数
'What is the average number of instances that implement one model?';- 拒否されたデータの確認
'Is there rejected data in the domain?';- 時間別のRAWデータ取込み率
'What is the average raw data ingestion rate per hour last day, each hour?';- RAWレコードのペイロード・サイズ
'What is the average and max raw record payload size?';- 履歴レコード・ペイロード・サイズ
'What is the average and max historized record payload size?';- 時間別温度トレンド
'Show the average temperature by hour for the last day';- デバイスエラーをタイプ別にグループ化
'Show devices with error events in the last 7 days grouped by error type';
ベスト・プラクティス
- 最初に
showsqlを使用して、生成されたSQLを実行前に確認できるようにします。 - 一度にIoTの質問をします。
- デバイス・タイプ、メトリック名、モデル仕様URIまたは時間範囲を含めます。
OpenAI、GOOGLE_GEMINI、CLAUDEなど、個別のモデルに個別のプロファイル名を使用します。
FAQ
- APEXの例では、
SET_PROFILEのかわりにprofile_nameを使用するのはなぜですか。 SET_PROFILEは、現在のステートフル・データベース・セッションのプロファイルを設定します。APEXおよびデータベース・アクションではステートレス接続を使用できるため、より簡単なパターンはprofile_nameをDBMS_CLOUD_AI.GENERATEに直接渡すことです。- 複数のプロファイルが必要ですか。
- 番号1つのプロバイダとモデルのみを使用する場合は、1つのプロファイルを使用します。複数のプロファイルを作成するのは、Open AI、Gemini、Claudeなどのモデルを比較または切り替える場合のみです。
- OCI Generative AIとSelect AIが異なるモデル・リストを示している理由
- Select AIはデータベース機能です。モデル・リストは、Select AIプロファイルのプロバイダによって異なります。OCI生成AIモデル・リージョンおよびインポートされたモデルのドキュメントは、プロファイルで
"provider": "oci"が使用される場合に適用されます。GeminiおよびClaudeモデルは、OCI Generative AIサービス・モデル・リストではなく、GoogleおよびAnthropicから取得されます。 - これはIoTとどのように関係しているのでしょうか。
- IoTデータは、Select AIが問い合せるデータベース・データです。Select AIプロファイルはIoTスキーマ・オブジェクトを指し、プロバイダ/モデルは自然言語プロンプトをSQLに変換します。
- IoTユーザーのデータベース権限または権限を追加する必要がありますか。
- 番号Select AIを使用するには、必要なデータベース権限および権限がすでにIoTデータベース・ユーザーに割り当てられています。
トラブルシューティング
問合せは行を返しません
問合せが間違った列を参照しています
権限が拒否されました
結果は不完全です
次の内容
- IoTドメイン・データベースへの直接接続を構成します。
- IoTドメイン・データベース・スキーマを確認します。
- IoT MCPサーバーへの接続を設定します。