Oracle Autonomous AI Database の目玉機能の一つである「Select AI」。
自然言語でデータベースに問い合わせると、LLM(大規模言語モデル)がその意図を解釈し、適切なSQLクエリを生成・実行してくれる非常に強力な機能です。
すでにチュートリアルなどを通じて「Select AI を使ってみた」という方は多いかもしれません。
しかし、実際に Select AI を利用可能にするまでの設定手順(ユーザー作成、権限付与、クレデンシャル作成、AIプロファイル作成など)を実施する中で、「なぜこの設定が必要なのか」と疑問に思ったことはありませんか。
本記事では、Select AI を利用するまでの設定について記載いたします。
なお、Select AI のチュートリアルに関しましては下記の公開情報をご参考ください。
目次
概要
Select AI を使うための典型的なセットアップのフローは以下の通りです。
- 実行用ユーザーの作成と権限付与
- クレデンシャル(LLMプロバイダへの認証情報)の作成
- AI プロファイルの作成
それぞれの手順がどのような役割を担っているのかを詳しく見ていきましょう。
Step 1: ユーザー(スキーマ)の作成と権限付与
セキュリティのベストプラクティスとして、Select AI を実行するための専用ユーザー(スキーマ)を作成し、必要最小限の権限を付与します。
-- 検証用スキーマ(AI_USER)の作成
-- ※ パスワードは要件に合わせて適切なものを設定してください
CREATE USER AI_USER IDENTIFIED BY "YourSecurePassword123#";
GRANT DWROLE TO AI_USER;
ALTER USER AI_USER QUOTA UNLIMITED ON DATA;
-- Select AI と関連機能の実行に必要なパッケージ権限の付与
-- DBMS_CLOUD_AI: Select AI のプロファイル作成や管理を行うためのメインパッケージ
GRANT EXECUTE ON DBMS_CLOUD_AI TO AI_USER;
-- DBMS_CLOUD: クラウド・リソース(オブジェクト・ストレージや外部API等)へのアクセス用
GRANT EXECUTE ON DBMS_CLOUD TO AI_USER;
-- 外部のLLMプロバイダ(OCI Generative AI や OpenAI など)のエンドポイントへのネットワーク通信を許可する ACL の設定
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*', -- 要件に応じて特定のホストに制限することも可能です
ace => xs$ace_type(privilege_list => xs$name_list('connect'),
principal_name => 'AI_USER',
principal_type => xs_acl.ptype_db));
END;
/
なぜこの作業が必要なのか
特に疑問に思いやすいのが、DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE による ACL (Access Control List) の設定です。
自然言語による問い合わせが行われると、Select AI はデータベース内部から外部の LLM API エンドポイントに対する HTTP コールアウト(通信)を実行して、SQL の生成を依頼します。そのため、データベース内から外部ネットワークへの適切なアクセス許可が必須となります。
Step 2: クレデンシャル情報の作成
自然言語から SQL を生成するためには、OCI Generative AI や OpenAI などの LLM を利用します。これらの外部サービスに安全にアクセスし、認証を通すための情報(クレデンシャル)を作成してデータベース内に保存しておく必要があります。
今回は、OCI Generative AI を利用する場合のクレデンシャル作成例をご紹介します。
BEGIN
-- OCI Generative AI 用の認証情報を生成 (OCID と API キーベース)
DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'OCI_GENAI_CRED',
user_ocid => 'ocid1.user.oc1..[あなたのユーザーOCIDを指定]',
tenancy_ocid => 'ocid1.tenancy.oc1..[あなたのテナンシOCIDを指定]',
-- API ダイレクトアクセスのための秘密鍵(以下の値はサンプルのプレースホルダーです)
private_key => '-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDR...
(中略)
-----END PRIVATE KEY-----',
fingerprint => '00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff'
);
END;
/
なぜこの作業が必要なのか
ここで作成したクレデンシャル(上記では OCI_GENAI_CRED)は、自身で直接使うのではなく、後述の AI プロファイルに紐付けて使用します。
これにより、Select AI のプロシージャがバックグラウンドで LLM にアクセスする際、このクレデンシャルを自動的に使って API の認証を行うことができます。
Step 3: AIプロファイルの作成
ここが Select AI の中核となる設定です。
AI プロファイルとは、「どの LLM プロバイダを使うか」「どのクレデンシャルを利用するか」「データベース内のどのテーブルに関する SQL を生成させるか」 といった振る舞いを定義した設定パッケージです。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'GENAI_PROFILE',
attributes => '{
"provider" : "oci",
"credential_name" : "OCI_GENAI_CRED",
"oci_compartment_id" : "ocid1.compartment.oc1..[OCI Generative AIの対象コンパートメントOCIDを指定]",
"conversation" : "TRUE",
"annotations" : "TRUE",
"object_list": [
{ "owner": "AI_USER", "name": "PRODUCTS" },
{ "owner": "AI_USER", "name": "AZ_ORDERS" },
{ "owner": "AI_USER", "name": "AZ_CUSTOMERS" },
{ "owner": "AI_USER", "name": "HISTORICAL_SALES" }
]
}'
);
END;
/
とくに注目していただきたいのが attributes パラメータの内容です。
-
provider: 使用する LLM プロバイダを指定します(例:oci,openaiなど)。 -
credential_name: Step 2 で作成したクレデンシャル名を指定します。 -
annotationsの設定 ("TRUE"): ここが非常に重要です。テーブルやカラムに設定された「アノテーション」情報を、システムプロンプトのコンテキストとして LLM に渡すかを制御します。これをTRUEに設定することで、LLM はカラムの物理名だけでなく、開発者が付与した論理的な意味も考慮して SQL を生成するようになります。-
【ハマりポイント】
annotationsの既定値はFALSEです。アノテーションをテーブルや列に一生懸命設定したのに、プロファイル側でこの値を変更し忘れていて「Select AI が期待通りにSQLを生成してくれない...」という事態がよく発生します。設定漏れに注意しましょう。 -
【補足】 アノテーションではなく、テーブルや列の「コメント」情報を LLM に渡したい場合は、
annotationsではなく"comments": "TRUE"というパラメータを設定する必要があります。
-
【ハマりポイント】
-
object_listの設定: LLM にスキーマのメタデータを連携させる際、対象とするテーブルを限定することができます。「AI に答えさせたい業務データ」に関連するテーブルのみをリスト化して設定することで、LLM に無駄なスキーマ情報を渡すことなく、セキュリティの担保と SQL 生成精度の向上が期待できます。
他にも色々な設定値があります。詳細はこちらをご参考ください。
まとめ
Select AI を使うための一連の作業は、単なる「おまじない」ではありません。
セキュアな外部通信の確立と、LLM に対して効率的かつ正確にコンテキスト(メタデータ)を渡すための重要なプロセスです。
特に AI プロファイルのチューニング(アノテーションの活用と、オブジェクトリストの絞り込み)は、ビジネス要件に合った正確な SQL を生成させるための要となります。ぜひ、ご自身の環境でもプロファイルの設定を工夫してみてください。
参考資料
- Select AIについて
-
Select AIの使用例
- こちらには、例えば Azure OpenAI や Anthropic などと連携する場合の設定方法や、DB Link を用いた別データベースと連携するパターンの設定方法等が記載されています。
- 個人的におすすめです。