Natural Languageを使用したOCIオブジェクト・ストレージとの対話 (2026/05/25)

Natural Languageを使用したOCIオブジェクト・ストレージとの対話 (2026/05/25)

https://www.ateam-oracle.com/interacting-with-oci-object-storage-using-natural-language

投稿者:Ajay Ojha | Cloud Solutions Architect

はじめに

Oracle Cloud Infrastructure (OCI) オブジェクトストレージは、あらゆる種類のデータを無制限に保存できるように設計された、スケーラブルで高性能、耐久性に優れ、コスト効率の高いクラウドベースのストレージサービスです。OCI 内でデータを自動的に複製することで、高い耐久性と可用性を実現します。データをバケットに整理し、IAM ポリシー、事前認証リクエスト、暗号化を使用してアクセスを制御できます。パフォーマンスとコストのバランスを取るために、複数のストレージ階層 (標準、低頻度アクセス、アーカイブ) をサポートしています。

Oracle Autonomous AI Database Select AIは、生成型AIを使用して、自然言語プロンプトからのSQLの生成、実行、説明、ベクトルストアを使用した検索拡張生成、合成データの生成、LLMとのチャットなど、あらゆる作業を簡素化および自動化します。自然言語を使用してSQL経由でデータベースやLLMと対話することで、ユーザーの生産性を向上させ、AIベースのアプリケーションを開発できます。

要件

OCIオブジェクトストレージでは、コンソールから名前またはプレフィックスでオブジェクトを検索できます。OCIは、オブジェクトストレージと連携するためのREST APIも提供しており、ページ分割された結果が表示されます。しかし、ユーザーが実行したいオブジェクトストレージ検索の要件があり、それを実現するためのオプションを検討します。

以下は、オブジェクトストレージ検索に関するユーザー要件の一部です。

  1. 接尾辞またはオブジェクト拡張子を使用してオブジェクトを検索します。
  2. 検索キーワードを含むオブジェクト名を検索します。
  3. サイズまたはサイズ範囲でオブジェクトを検索します。
  4. 作成日、最終更新日、または日付範囲でオブジェクトを検索します。
  5. サブフォルダをまたいでオブジェクトを検索する。

前提条件

  1. Oracle Cloud Infrastructureへのアクセス。
  2. Oracle Automous Databaseへのアクセス。
  3. Oracle APEX環境へのアクセス。

高レベルの手順

  1. 必要なOCIポリシーを作成します。
  2. 新しいDBユーザーを作成するか、既存の管理者権限のないDBユーザーを使用してください
  3. 必要なDBロールを付与します
  4. Select AIプロファイルとその他の関連オブジェクトを作成します。
  5. Select AI機能を使用するためのOracle APEXページを作成します。

詳細な手順

  1. 必要な OCI ポリシー ( OCI 生成 AI 用の IAM ポリシー) を作成します。以下のいずれかのポリシーを作成できます。
OCIポリシーのサンプル追加情報
動的グループ XYZ_DG がコンパートメント XYZ 内の生成型 AI ファミリーを管理することを許可する

XYZ_DGとXYZを適切な詳細情報に置き換えてください。
このポリシーは、リソースプリンシパルを介してOCI Gen AIに動的グループへのアクセス権を付与します。このタイプのポリシーは、マシン間アクセスに使用されます。
グループ XYZ_UG がコンパートメント XYZ 内の generative-ai-family を管理することを許可する

XYZ_UGとXYZを適切な詳細情報に置き換えてください。
このポリシーは、OCI Gen AIにユーザーグループへのアクセス権を付与します。このタイプのポリシーは、人間ユーザーによるアクセスに使用されます。

2. Select AI アクティビティに使用する新しい DB ユーザーを作成するか、既存の管理者以外の DB ユーザー (例: MY_SELECT_AI_USER) を使用します。管理者ユーザーはこの目的で使用しないでください。

3. ADMIN DB ユーザーを使用して、必要な DB ロールを DB ユーザー MY_SELECT_AI_USER に付与します。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
GRANT EXECUTE ON DBMS_CLOUD_AI TO MY_SELECT_AI_USER;

EXEC DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(provider => 'OCI',username =>'MY_SELECT_AI_USER');

-- Replace MY_SELECT_AI_USER with appropriate details.

4. MY_SELECT_AI_USER DBユーザーを使用して、Select AIプロファイルおよびその他の関連オブジェクトを作成します。

資格情報:

OCI$RESOURCE_PRINCIPALを使用している場合は、上記の手順で認証情報が作成されます。

OCI$RESOURCE_PRINCIPALを使用せず、個々のOCIユーザーの詳細を使用する場合は、DBMS_CLOUD.CREATE_CREDENTIALを使用して資格情報を作成する必要があります。

ビュー:

OCIオブジェクトストレージバケットのオブジェクトの詳細を一覧表示するのに役立つ以下のビューを作成します。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
create or replace view MY_OCI_OS_V
as
SELECT object_name, bytes size_in_bytes, checksum, created, last_modified
FROM DBMS_CLOUD.LIST_OBJECTS('OCI$RESOURCE_PRINCIPAL', 'https://objectstorage.my_oci_os_region.oraclecloud.com/n/my_oci_os_ns/b/my_oci_os_b/o/');

-- Replace MY_OCI_OS_V, MY_OCI_OS_REGION, MY_OCI_OS_NS, MY_OCI_OS_B with appropriate details.

上記のコードでは、オブジェクトストレージ領域、名前空間、およびバケットを確認/置換する必要があります。リソースプリンシパルを使用している場合は、OCI$RESOURCE_PRINCIPAL をそのまま使用できますが、そうでない場合は、上記で作成した認証情報の名前に置き換えることができます。

以下に、その眺望に関する重要な詳細をいくつか示します。

  1. このビューは、Oracleが提供する関数DBMS_CLOUD.LIST_OBJECTSを使用します。
  2. DBMS_CLOUD.LIST_OBJECTS は、指定されたバケット内のすべてのオブジェクトの詳細を一覧表示します。詳細には、オブジェクト名、オブジェクトのサイズ(バイト単位)、チェックサム、作成日、最終更新日が含まれます。
  3. Select AIプロファイルを作成する際に、このビューを使用します。

AIプロファイルを選択してください:

以下のサンプルコードを使用して、OCIプロバイダーとGrokモデルを用いたSelect AIプロファイルを作成します。他のプロバイダーやモデルも評価し、ご自身の期待や要件に合ったものをお選びください。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name => ‘MY_SELECT_AI_PROFILE',
      attributes   =>
      '{
        "provider": "oci",
        "region": "us-chicago-1",
        "oci_compartment_id": "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxx",
        "credential_name": "OCI$RESOURCE_PRINCIPAL",
        "comments": true,
        "object_list": [
          {"owner": "MY_SELECT_AI_USER", "name": "MY_OCI_OS_V"}
        ],
        "model": "xai.grok-4"
      }');
end;

-- Replace MY_SELECT_AI_PROFILE, MY_SELECT_AI_USER, MY_OCI_OS_V, REGION, OCI_COMPARTMENT_ID, MODEL with appropriate details.
パラメータ追加情報
プロバイダー私たちはOCIを使用していますが、他の複数のプロバイダーもサポートしています
リージョンモデルの地域。指定された地域に基づいて、モデルの在庫状況をご確認ください。
OCIコンパートメントIDOCI Gen AI コンパートメント ID。
認証情報名OCI$RESOURCE_PRINCIPAL、または上記で作成した認証情報の名前。
コメントこのパラメータを使用すると、クエリ生成のために詳細情報をLLMと共有する際に、テーブル/列のコメントをユーザープロンプトに追加する必要があるかどうかを判断できます。
オブジェクトリストこのパラメータを使用すると、使用するスキーマ、またはスキーマとテーブル/ビューを指定できます。
モデルこのパラメータは、使用するモデルを指定するために使用できます。

サンプル参照 AIクエリを選択追加情報期待される結果
SELECT dbms_cloud_ai.generate(                prompt => '最大サイズのファイルの詳細が必要です。また、ファイルのサイズをGB単位でも必要です',                action => 'showprompt'               profile_name => 'MY_SELECT_AI_PROFILE') from dualshowpromptアクションは、LLM に送信されるプロンプトを確認するのに役立ちます。このプロンプトには、ユーザープロンプトと、設計時または実行時に指定された Select AI プロファイル属性によって影響を受けるその他の詳細が含まれます。LLMに送信されるプロンプトの詳細がすべて含まれたJSONが表示されます。
SELECT dbms_cloud_ai.generate(                prompt => '最大サイズのファイルの詳細が必要です。また、ファイルのサイズをGB単位でも必要です',                action => 'showsql'               profile_name => 'MY_SELECT_AI_PROFILE') from dualshowsqlアクションは、上記のプロンプトに基づいてLLMによって生成されたSQLを表示します。生成されたSQL文が表示されます。
SELECT dbms_cloud_ai.generate(                prompt => '最大サイズのファイルの詳細が必要です。また、ファイルのサイズをGB単位でも必要です',                action => 'runsql'               profile_name => 'MY_SELECT_AI_PROFILE') from dualrunsqlアクションは、LLMによって生成されたSQLをデータベースに対して実行します。上記で生成されたSQL文のJSON出力が表示されます。
SELECT dbms_cloud_ai.generate(                prompt => '最大サイズのファイルの詳細が必要です。また、ファイルのサイズをGB単位でも必要です',                action => 'narrate'               profile_name => 'MY_SELECT_AI_PROFILE') from dualナレートアクションは、LLMによって生成されたSQLをデータベースに対して実行し、結果として得られたデータセットを、会話形式で平易な言葉で書かれた、人間が読みやすい要約に変換します。上記のJSON出力の、人間が読みやすい要約が表示されます。

5. Select AI機能を使用するためのOracle APEXページを作成します。

手順追加情報
APEXワークスペースとアプリケーションを作成します。新しいAPEXワークスペースとアプリケーションを作成するか、既存のAPEXワークスペースとアプリケーションを使用します。
APEXページを作成します。APEXアプリケーションで新しいページを作成します。
テキストフィールドとボタンを含む静的領域を作成します。領域:オブジェクトストレージクエリ
テキストフィールド:自然言語でのクエリ (PX_OS_QUERY)
ボタン:結果を取得。
読み取り専用のテキスト領域を持つ静的領域を作成します。領域:オブジェクトストレージクエリ結果
テキストエリア:結果
ボタンに動的なアクションを作成します。名前:結果を取得してテキストエリアに入力する
アクション:値を設定する
セットタイプ: SQL ステートメント
SQL ステートメント: SELECT DBMS_LOB.SUBSTR (dbms_cloud_ai.generate( prompt => :PX_OS_QUERY, action => 'narrate', profile_name => 'MY_SELECT_AI_PROFILE' ),2000,1) xx_result from dual where :PX_OS_QUERY IS NOT NULL
送信する項目: PX_OS_QUERY

以下は、作成されたAPEXページのサンプルスクリーンショットです。

以下に、いくつかのサンプルプロンプトを示します。

  1. 最もサイズが大きいファイルの詳細情報と、そのファイルのサイズ(GB単位)が必要です。
  2. ファイル拡張子にはどのような種類があり、それぞれの種類と合計ファイルサイズはどれくらいですか
  3. 過去6か月間に各バケットで毎月作成されたファイルの数を教えてください。また、ファイルの合計サイズ(GB単位)も必要です
  4. 過去11ヶ月間に0.5GBを超えるファイルが含まれているバケットはどれですか
  5. 過去11ヶ月間に0.5GBを超えるファイルが含まれているバケットはどれですか?また、ファイルの詳細も追加してください。

まとめ

上記のソリューションは、テナント内の複数のリージョンにまたがる複数のOCIオブジェクトストレージバケットを処理するように簡単に拡張できます。Select AIプロファイルパラメータ(注釈、コメント、object_list、enforce_object_list、modelなど)は実行時に更新できます。大量のオブジェクト詳細の表示や一覧表示が必要な場合はビューを直接使用し、その他の要件にはSelect AI + LLMを使用できます。必要に応じて、テーブル/列コメントや追加のガードレール(SQL結果を10行に制限するなど)を追加することも検討できます。これらはLLMと共有され、後続の処理に使用されます。

参考文献

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

OCIのカスタム・ルート表を使用した詳細なルーティング制御 (2025/02/27)