選択AIを使用した自然言語プロンプトからのSQLの生成

専用Exadataインフラストラクチャ上のAutonomous AI Database Select AIを使用すると、自然言語を使用してデータを問い合せることができます。

Select AI機能により、Autonomous AI Databaseは、大規模言語モデル(LLM)で生成AIを使用して、ユーザーの入力テキストをOracle SQLに変換できます。Select AIは、自然言語プロンプトを処理し、プロンプトにメタデータを補足してから、SQL問合せを生成して実行します。

サポートされているプラットフォーム

Select AIは、Autonomous AI DatabaseサーバーレスおよびAutonomous AI Database on Dedicated Exadata Infrastructure and Cloud at Customersでサポートされています。

  • Autonomous AI Database サーバーレス
  • 専用Exadataインフラストラクチャ上のAutonomous AI Database
  • 専用Exadataインフラストラクチャ上のAutonomous AI Databaseリージョン
  • Autonomous AI Database Cloud@Customer

SQL生成について

自然言語を使用したデータベース・データとの対話は、LLMで実現できるようになりました。つまり、プレーン英語などの自然言語を使用してデータベースを問い合せることができます。

Select AIを使用する場合、Autonomous AI Databaseは自然言語をSQLに変換するプロセスを管理します。これは、データと対話するためにSQLコードのかわりに自然言語プロンプトを提供できることを意味します。Select AIは、SQLユーザーと開発者の生産性向上ツールとして機能し、専門家でないSQLユーザーは、データ構造や技術言語を理解することなく、データから有用なインサイトを得ることができます。

Autonomous AI DatabaseDBMS_CLOUD_AIパッケージを使用すると、自然言語プロンプトを使用してSQLコードを生成するためのユーザー指定のLLMとの統合が可能になります。このパッケージは、LLMにデータベース・スキーマの知識を提供し、そのスキーマと一致するSQL問合せを記述するように指示するのに役立ちます。DBMS_CLOUD_AIパッケージは、OpenAI、Cohere、Azure OpenAI Service、Oracle Cloud Infrastructure Generative AIなどのAIプロバイダと連携します。

ノート:

ユーザーは、AIプロバイダを含むアカウントを持ち、Autonomous AI Databaseが使用するDBMS_CLOUD_AIオブジェクトを介して資格証明を提供する必要があります。

用語

Select AIで使用される様々な用語を理解してから使用することが重要です。

AIの選択機能に関連する用語は次のとおりです。

用語 定義

データベース資格証明

データベース資格証明は、データベースへのアクセスおよび対話に使用される認証資格証明です。通常、ユーザー名およびパスワードで構成され、セキュリティ・トークンなどの追加の認証ファクタによって補完されることがあります。これらの資格証明は、アプリケーションまたはユーザーとデータベース間のセキュアな接続を確立するために使用され、認可された個人またはシステムのみがデータベース内に格納されているデータにアクセスして操作できるようにします。

LLMの幻覚

大言語モデルの文脈における幻覚は、入力プロンプトに不正確、無意味、または無関係なテキストをモデルが生成する現象を指します。モデルの一貫性のあるテキストの生成の試みの結果であるにもかかわらず、これらのインスタンスには、作成、誤解を招く、または純粋に想像力のある情報を含めることができます。幻覚は、トレーニング・データのバイアス、適切なコンテキスト理解の欠如、またはモデルのトレーニング・プロセスの制限が原因で発生する可能性があります。

IAM Oracle Cloud Infrastructure Identity and Access Management (IAM)を使用すると、クラウド・リソースにアクセスできるユーザーを制御できます。ユーザーのグループが保持するアクセス権のタイプとアクセスの対象となる特定のリソースを制御できます。詳細は、Identity and Access Managementの概要を参照してください。

自然言語プロンプト

自然言語プロンプトは、大規模言語モデルなどの生成AIモデルをガイドするために提供される、人間が読める手順またはリクエストです。ユーザーは、特定のプログラミング言語やコマンドを使用するかわりに、より会話型または自然言語形式でプロンプトを入力することで、これらのモデルを操作できます。モデルは、指定されたプロンプトに基づいて出力を生成します。

ネットワーク・アクセス制御リスト(ACL)

ネットワーク・アクセス制御リストは、ルーター、ファイアウォール、ゲートウェイなどのネットワーク・デバイスを通過できるネットワーク・トラフィックを定義するルールまたは権限のセットです。ACLは、IPアドレス、ポート番号、プロトコルなどの様々な基準に基づいて、受信トラフィックおよび送信トラフィックを制御およびフィルタするために使用されます。管理者がネットワーク・トラフィックを管理および制限して不正アクセス、潜在的な攻撃およびデータ漏洩を防止できるようにすることで、ネットワーク・セキュリティにおいて重要な役割を果たします。

類似検索

類似検索では、ベクトル・ストア内のフィーチャ・ベクトルを比較することで、特定の問合せに厳密に一致するデータ・ポイントを識別および取得します。

ベクトル間隔

ベクトル距離は、多次元空間におけるフィーチャベクトルの間の距離を計算することによって、フィーチャベクトルの間の類似性または非類似性を測定します。

ベクトル索引

ベクトル索引は、機能ベクトルを編成および格納して、関連するデータの効率的な類似検索および取得を可能にします。

ベクトル・ストア

ベクトル・ストアには、ベクトル埋込みを含むセマンティック類似検索を格納、管理および有効化するシステムが含まれています。これには、スタンドアロン・ベクトル・データベースおよびOracle Database 23ai AI Vector Searchが含まれます。

使用ガイドライン

SQL生成の自然言語プロンプトを有効かつ適切に使用して、ユーザー・エクスペリエンスを向上させるための使用ガイドラインを提供します。

使用目的

この機能は、ユーザー指定の自然言語プロンプトによって生成されるSQL問合せの生成および実行を目的としています。ユーザーが選択した大規模言語モデル(LLM)と組み合せてスキーマ・メタデータに基づいて手動で実行できる操作を自動化します。

SQL問合せ結果の生成に関連しないプロンプトを含め、任意のプロンプトを指定できますが、Select AIはSQL問合せの生成に重点を置きます。「AI」を選択すると、chatアクションを使用して一般的なリクエストを送信できます。

プロンプト拡張データ

データベースは、ユーザー指定のプロンプトをデータベース・メタデータで補強し、LLMからの幻覚を軽減します。次に、拡張プロンプトがユーザー指定のLLMに送信され、問合せが生成されます。

データベースは、スキーマ・メタデータのみを使用してプロンプトを拡張します。このメタデータには、スキーマ定義、表および列のコメント、およびデータ・ディクショナリおよびカタログから使用可能なコンテンツが含まれる場合があります。SQL生成では、プロンプトを拡張する際に、テーブルまたはビューの内容(実際の行または列の値)は提供されません。

ただし、narrateアクションは、問合せの結果(データベース・データを含む可能性がある)を、問合せ結果を記述する自然言語テキストを生成するユーザー指定のLLMに提供します。

警告:

大規模言語モデル(LLM)は、一般的にインターネットから、幅広いテキスト・ドキュメントとコンテンツに関するトレーニングを受けています。その結果、LLMは、SQLインジェクションを含む無効または悪意のあるコンテンツからのパターンを組み込んだ可能性があります。したがって、LLMは有用で関連性の高いコンテンツの生成に精通していますが、不正確な結果を生成したり、データのセキュリティを損なうSQLクエリなどの誤った情報や誤った情報を生成することもできます。

ユーザー指定のLLMプロバイダによってかわりに生成された問合せは、データベースで実行されます。この機能の使用はお客様ご自身の責任においてのみ行われ、Oracleが提供するサービスに関連するその他の条件にかかわらず、お客様がそのリスクを受諾したことと、その使用によって生じるいかなる損害についても、Oracleの責任または責任を明示的に除外することになります。

AIプロバイダとLLMの選択

セキュリティ標準を満たし、テキスト生成やコード生成などの特定のニーズに合せたAIプロバイダおよびLLMを選択します。

異なるLLMは、トレーニング・データや意図した目的に基づいて様々なタスクに優れています。一部のモデルはテキスト生成に優れていますが、コード生成ではうまく機能しない場合がありますが、コーディング・タスク用に特別に最適化されているモデルもあります。お客様のニーズに最適なLLMを選択してください。

AIプロバイダ LLM RAGの埋込みモデル 目 的

OCI生成AI

  • meta.llama-3.3-70b-instruct (デフォルト)
  • meta.llama-3.2-90b-vision-instruct
  • meta.llama-3.2-11b-vision-instruct
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k (非推奨)
  • cohere.command–r-plus (非推奨)
  • xai.grok-3
  • xai.grok-3-fast
  • xai.grok-3-mini
  • xai.grok-3- ミニファスト
  • cohere.embed-english-v3.0 (デフォルト)
  • cohere.embed- 多言語-v3.0
  • cohere.embed- 英語- ライト-v3.0
  • cohere.embed- 多言語-light-v3.0

生成AIでのモデルの埋込みについてを参照してください。

OCI生成AIチャット・モデルは、runsqlshowsqlexplainsqlnarratechatなど、すべてのSELECT AIアクションでサポートされています。

OCIテキスト・モデルの生成は、SELECT AI chatアクションでのみサポートされています。

プロファイル属性を構成するには、を参照してください。

Azure OpenAIサービス

  • GPT-4o
  • GPT-4
  • GPT-4ターボとビジョン
  • GPT-3.5- ターボ

text-embedding-ada-002

自然言語プロンプト、chatアクションおよびSelect AI RAGからSQLを生成するのに最適です。

OpenAI

  • gpt-3.5-turbo (デフォルト)
  • gpt-4o
  • gpt-4o-mini
  • gpt-4
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0613
  • gpt-3.5-turbo-16k
  • gpt-3.5-turbo-16k-0613

text-embedding-ada-002

自然言語プロンプト、chatアクションおよびSelect AI RAGからSQLを生成するのに最適です。

OpenAI- 互換

次のようなOpenAI互換プロバイダのモデル:
  • 花火AI
  • xAI
  • 他のユーザー
OpenAIコンピテンシ・プロバイダからのモデルの埋込みたとえば、Fireworks AI埋込みモデルを参照してください。

幅広いユースケースをサポートします。

Cohere

  • コマンド(デフォルト)
  • command-nightly (実験的)
  • コマンド-r
  • コマンド-r-plus
  • コマンドライト
  • command-light-nightly (実験的)
  • カスタムモデル

embed-english-v2.0

chatアクションに最適です。

Google

  • gemini-1.5フラッシュ(デフォルト)
  • gemini-1.5プロ
  • gemini-1.0-pro
text-embedding-004 (デフォルト)

自然言語プロンプト、chatアクションおよびSelect AI RAGからSQLを生成するのに最適です。

Anthropic

  • claude-3-5-sonnet-20240620 (デフォルト)
  • クロード3- オパス-20240229
  • クロード3- ソネット-20240229
  • クロード3- 俳句-20240307
NA

自然言語プロンプト、chatアクションおよびSelect AI RAGからSQLを生成するのに最適です。

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1 (デフォルト)
  • Meta-Llama-3-70B-Instruct
  • クウェン1.5-1.8B
  • その他のチャット・モデル
NA

自然言語プロンプト、chatアクションおよびSelect AI RAGからSQLを生成するのに最適です。

AWS

  • amazon.titan-embed-text-v1
  • amazon.titan-embed-text-v2:0
  • cohere.embed- 英語-v3

幅広いユースケースをサポートします。

ノート:

  • providerパラメータのかわりに、provider_endpointを使用してOpenAI互換プロバイダを指定します。参照してください。

  • イメージを受け入れるモデルの場合は、meta.llama-3.2-90b-vision-instructを使用します。このモデルは、特にビジョンとイメージのトレーニングを受けています。テキスト生成およびSQL生成に使用できますが、このモデルはイメージに最適です。詳細は、OCI生成AIのチャットを参照してください。

    meta.llama-3.2-11b-vision-instructモデルは、堅牢なマルチモーダル機能を提供します。

  • 埋込みモデルは、トランスフォーマ・モデルとも呼ばれます。

Select AIの概念

Select AIに関連する概念および用語を確認します。

SQL生成について

自然言語を使用したデータベース・データとの対話が、LLMで実現できるようになりました。つまり、自然言語(標準英語など)を使用してデータベースを問い合せることができます。

Select AIを使用する場合、Autonomous AI Databaseは自然言語をSQLに変換するプロセスを管理します。これは、データと対話するためにSQLコードのかわりに自然言語プロンプトを提供できることを意味します。Select AIは、SQLユーザーと開発者の生産性向上ツールとして機能し、専門家でないSQLユーザーは、データ構造や技術言語を理解することなく、データから有用なインサイトを得ることができます。

Autonomous AI DatabaseDBMS_CLOUD_AIパッケージを使用すると、自然言語プロンプトを使用してSQLコードを生成するためのユーザー指定のLLMとの統合が可能になります。このパッケージは、LLMにデータベース・スキーマの知識を提供し、そのスキーマと一致するSQL問合せを記述するように指示するのに役立ちます。DBMS_CLOUD_AIパッケージは、OpenAI、Cohere、Azure OpenAI Service、Oracle Cloud Infrastructure Generative AIなどのAIプロバイダと連携します。

ノート:

ユーザーは、AIプロバイダを含むアカウントを持ち、Autonomous AI Databaseが使用するDBMS_CLOUD_AIオブジェクトを介して資格証明を提供する必要があります。

DBMS_CLOUD_AIを使用したAIプロファイルの構成

Autonomous AI Databaseは、AIプロファイルを使用して、LLMへのアクセスを容易におよび構成し、自然言語プロンプトからSQL文を生成するように設定します。

AIプロファイルには、自然言語問合せのターゲットとなるデータベース・オブジェクトが含まれます。これらのターゲットから使用されるメタデータには、データベース表名、列名、列のデータ型およびコメントを含めることができます。AIプロファイルは、DBMS_CLOUD_AI.CREATE_PROFILEおよびDBMS_CLOUD_AI.SET_PROFILEプロシージャを使用して作成および構成します。

DBMS_CLOUD_AIパッケージを構成するための要件

DBMS_CLOUD_AIを実行するには、次のものが必要です。

  • Oracle Cloud Infrastructureクラウド・アカウントおよびAutonomous AI Databaseインスタンスへのアクセス。
  • サポートされているAIプロバイダの有料APIアカウント。次のいずれかです。
    • OpenAI: OpenAIが自然言語プロンプトからSQLを生成できるようにするには、OpenAI有料アカウントからAPIキーを取得します。

      秘密APIキーはユーザー設定にあります。

    • Cohere: Cohereで自然言語プロンプトからSQLを生成できるようにするには、Cohere有料アカウントからAPIキーを取得します。

      「ダッシュボード」をクリックし、左側のナビゲーションで「APIキー」をクリックします。デフォルトのAPIキーをコピーするか、別のキーを作成します。詳細は、API-Keysを参照してください。

    • Azure OpenAIサービス: Azure OpenAIサービスが自然言語プロンプトからSQLを生成できるようにするには、AIプロバイダを構成してアクセスを提供します。

      Azure OpenAI Serviceを使用するには、次のステップを実行します:

      1. 秘密APIキーを取得します。APIキーは、Azureポータルの「Resource Management」セクションにあります。Azure OpenAIサービス・リソース・ページで、「キーおよびエンドポイント」をクリックします。KEY1またはKEY2をコピーできます。
      2. Azure OpenAI Serviceリソースを作成し、モデルをデプロイします: Azure OpenAIサービス・リソースを作成してデプロイします

        ヒント :

        • これらのパラメータを使用してネットワーク・アクセス権限を提供し、DBMS_CLOUD_AI.CREATE_PROFILEプロシージャを使用してAzure OpenAI Serviceプロファイルを作成する場合は、リソース名およびデプロイメント名に注意してください。
        • モデルの1分当たりのトークンのレート制限の詳細は、Azure OpenAIサービスの割当て制限および制限を参照してください。
      3. Azure OpenAIサービスへのアクセスを許可:
        • 秘密キーを使用して、Azure OpenAIサービスへのアクセスを許可できます。詳細は、の例を参照してください。
    • OCI生成AI: API署名キーの生成方法を参照してください。
    • Google: Google AI Studioで自然言語プロンプトに対するSQLおよびテキスト・レスポンスを生成できるようにするには、Google AI Studio有料アカウントからAPIキーを取得します。
      1. Google AI Studioに移動します。
      2. 「Sign In to Google AI Studio」をクリックします。
      3. プロンプト画面で「Get API key」をクリックします。
      4. 次のページで、該当するオプションをすべて選択します。
      5. 「Create API key」をクリックします。
      6. 「Create API key in new project」をクリックします。

        画面に進行状況が表示され、APIキーが生成されます。キーをコピーして保存します。

    • Anthropic: Anthropic開発者コンソールで自然言語プロンプトに対するSQLおよびテキスト・レスポンスを生成できるようにするには、Anthropic開発者コンソールの有料アカウントからAPIキーを取得します。
      1. Anthropic開発者コンソールに移動します。
      2. まだアカウントがない場合はサインアップします。
      3. ログインしたら、APIセクションまたはダッシュボードに移動します。
      4. APIキーを生成または表示するオプションを探します。
      5. クリックして新しいAPIキーを作成します。
      6. 生成されたAPIキーをコピーして保存します。

        Claude APIは有料サービスです。APIキーを使用する前に、アカウントにクレジットを追加する必要があります。

    • Hugging Face: AIプロバイダとしてHugging Faceを有効にして、自然言語プロンプトに対するSQLおよびテキスト・レスポンスを生成するには、Hugging Face有料アカウントからAPIキーを取得します。
      1. Hugging Faceに移動します。
      2. まだアカウントがない場合はサインアップします。
      3. アカウント設定に移動します。
      4. ナビゲーション・メニューで、「アクセス・トークン」を見つけます。
      5. クリックして新しいAPIキーを作成します。
      6. 生成されたAPIキーをコピーして保存します。
    • AWS: AWSを有効にするには、APIキーおよびモデルIDを取得します。

      APIキーを取得し、それを使用してDBMS_CLOUD.CREATE_CREDENTIALを介して資格証明を作成します。

      次のプロセスに従って、APIキーおよびモデル名を取得します:

      1. AWSアカウントをお持ちでない方は、登録してください。
      2. AWS Bedrock Consoleからアクセス・キーと秘密キーを作成します。
      3. 生成されたキーをコピーして保存します。
      4. 基本モデルへのアクセスをリクエストします。Amazon Bedrockの基盤モデルへのアクセスを参照してください。
      5. モデルIDを取得します。DBMS_CLOUD_AI.CREATE_PROFILEプロシージャでモデルIDが必要です。モデルIDは、使用するリソースによって異なります。使用する場合:

        ノート:

        インポートされたモデルは、Bedrock Converse APIではサポートされていません。

      AWSをプロバイダとして使用するには、例: AWSを使用したSelect AIを参照してください。

  • 外部AIプロバイダにアクセスするためのネットワークACL権限。

    ノート:

    ネットワークACLはOCI生成AIには適用できません。
  • AIプロバイダへのアクセスを提供する資格証明。

DBMS_CLOUD_AIパッケージの構成

「AIの選択」を使用する前に、DBMS_CLOUD_AIを有効にするステップを次に示します。

DBMS_CLOUD_AIを構成するには:
  1. DBMS_CLOUD_AIパッケージに対するEXECUTE権限を、Select AIを使用するユーザーに付与します。

    デフォルトでは、ADMINユーザーのみがEXECUTE権限を付与されます。ADMINユーザーは、他のユーザーにEXECUTE権限を付与できます。

  2. Select AIを使用するユーザーおよびAIプロバイダ・エンドポイントにネットワークACLアクセス権を付与します。

    ADMINユーザーは、ネットワークACLアクセス権を付与できます。詳細は、『Oracle Database 19c PL/SQLパッケージおよびタイプ・リファレンス』または『Oracle Database 26ai PL/SQLパッケージおよびタイプ・リファレンス』APPEND_HOST_ACEプロシージャを参照してください。

  3. AIプロバイダへのアクセスを有効にする資格証明を作成します。

    詳細は、CREATE_CREDENTIALプロシージャに関する項を参照してください。

次の例では、ADB_USEREXECUTE権限を付与します。
grant execute on DBMS_CLOUD_AI to ADB_USER;

次の例では、api.openai.comエンドポイントを使用する権限をADB_USERに付与します。

BEGIN  
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'api.openai.com',
         ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'ADB_USER',
                             principal_type => xs_acl.ptype_db)
   );
END;
/

APPEND_HOST_ACEファンクションのパラメータ

パラメータ 説明

host

hostには、ホストの名前またはIPアドレスを指定できます。ワイルドカードを使用すると、ドメインやIPサブネットを指定できます。ホストまたはドメイン名は大/小文字が区別されません。

OpenAIには、api.openai.comを使用します。

Cohereの場合は、api.cohere.aiを使用します。

Azure OpenAI Serviceの場合は、<azure_resource_name>.openai.azure.comを使用します。azure_resource_nameの詳細は、「プロファイル属性」を参照してください。

Googleの場合は、generativelanguage.googleapis.comを使用します。

Anthropicの場合は、api.anthropic.comを使用します。

Hugging Faceの場合は、api-inference.huggingface.coを使用します。

ace

アクセス制御エントリ(ACE)。ACLの各ACEエントリを作成するために、XS$ACE_TYPEタイプが提供されています。詳細は、『Oracle Database 19c Real Application Security管理者ガイド』または『Oracle Database 26ai Real Application Security管理者ガイド』ACLおよびACEの作成に関する項を参照してください。

次に、OpenAIへのアクセスを有効にする資格証明の作成方法の例を示します。

EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');

DBMS_CLOUD.CREATE_CREDENTIALパラメータ

パラメータ 説明

credential_name

格納する資格証明の名前。credential_nameパラメータは、スペースやハイフンを使用できないOracleオブジェクトのネーミング規則に準拠している必要があります。

username

username引数とpassword引数の両方で、AIプロバイダの資格証明を指定します。

usernameは、ユーザー指定のユーザー名です。

password

username引数とpassword引数の両方で、AIプロバイダの資格証明を指定します。

passwordはAIプロバイダのシークレットAPIキーで、プロバイダ(OpenAI、Cohere、Azure OpenAI Service、OCI、Google、AnthropicまたはHugging Face)に依存します。詳細は、DBMS_CLOUD_AIパッケージを構成するための要件を参照してください。

AIプロファイルの作成と設定

AIプロファイルを作成して有効にする手順について説明します。

AIプロファイルを作成するには、DBMS_CLOUD_AI.CREATE_PROFILEを使用します。次に、DBMS_CLOUD_AI.SET_PROFILEを起動してAIプロファイルを有効にし、自然言語プロンプトでSELECT AIを使用できるようにします。

ノート:

SELECT AIを使用する前に、新しいデータベース・セッション(接続)ごとにDBMS_CLOUD_AI.SET_PROFILEを実行する必要があります。

次の例では、OpenAIプロバイダを使用して、OPENAIというAIプロファイルを作成し、現在のユーザー・セッションのOPENAIプロファイルを設定します。

-- Create AI profile
--
SQL> BEGIN
  DBMS_CLOUD_AI.create_profile(
      'OPENAI',
      '{"provider": "openai",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
 
PL/SQL procedure successfully completed.

AIキーワードを使用したプロンプトの入力

SELECT文のキーワードとしてAIを使用し、自然言語プロンプトを使用してデータベースと対話します。

SELECT文のAIキーワードは、アクティブなAIプロファイルで識別されたLLMを使用して自然言語を処理し、SQLを生成するようにSQL実行エンジンに指示します。

AIキーワードは、SQL Developer、OML Notebooks、サード・パーティ・ツールなどのOracleクライアントとの問合せで使用して、自然言語でデータベースと対話できます。

ノート:

AIキーワードを使用して、PL/SQL文、DDL文またはDML文を実行することはできません。

構文

AIプロンプトを実行するための構文は次のとおりです。
SELECT AI action natural_language_prompt

Parameters

actionパラメータで使用可能なパラメータは、次のとおりです。
パラメータ 説明

runsql

自然言語プロンプトを使用して、指定されたSQLコマンドを実行します。これはデフォルトのアクションであり、このパラメータの指定はオプションです。

showsql

自然言語プロンプトのSQL文を表示します。

narrate

プロンプトの出力は自然言語で説明します。このオプションにより、SQL結果がAIプロバイダに送信され、自然言語のサマリーが生成されます。

chat

プロンプトに基づいてLLMから直接応答を生成します。DBMS_CLOUD_AI.CREATE_PROFILEファンクションのconversationtrueに設定されている場合、このオプションには、スキーマ・メタデータを含む可能性のある以前の相互作用またはプロンプトからのコンテンツが含まれます。

explainsql

プロンプトから生成されたSQLは、自然言語で説明します。このオプションにより、生成されたSQLがAIプロバイダに送信され、自然言語の説明が生成されます。

使用上のノート

  • AIは、データベース・アクションまたはAPEXサービスではサポートされていません。DBMS_CLOUD_AI.GENERATEファンクションのみを使用できます。

  • AIキーワードは、SELECT文でのみサポートされます。

  • AIキーワードを使用して、PL/SQL文、DDL文またはDML文を実行することはできません。

  • 順序は、SELECTの後にAIが続きます。これらのキーワードの大/小文字は区別されません。DBMS_CLOUD_AI.SET_PROFILEの構成後、SELECT AIの後のテキストは自然言語プロンプトです。AIプロファイルが設定されていない場合、SELECT AIは次のエラーを報告します。

    ORA-00923: FROM keyword not found where expected
    00923. 00000 -  "FROM keyword not found where expected"
  • Oracleのガイドラインに従って、特殊文字の使用規則が適用されます。たとえば、1つの文でアポストロフィを使用している場合は、一重引用符を2回使用します。

    select ai how many customers in SF don''t own their own home
  • LLMは hallucinationsの対象となり、結果が常に正しいとはかぎりません。

    • SELECT AIは、生成されたSQLを特定の自然言語プロンプトに対して実行できない場合があります。

    • SELECT AIが特定の自然言語プロンプトに対してSQLを生成できない場合があります。

    このようなシナリオでは、SELECT AIは、有効なSQLの生成に役立つ情報で応答します。

  • SQL構造についてさらに学習するには、chatアクションをSELECT AI chatとともに使用します。chatアクションでより適切な結果を得るには、データベース・ビューまたはコンテキスト列名を持つ表を使用するか、列に格納されている値を説明する列コメントを追加することを検討してください。

  • DBAビューまたはUSERビューにアクセスするには、DBMS_CLOUD_AIビューを参照してください。

例: AIアクションの選択

これらの例は、一般的な Select AIアクションを示しています。

次の例では、SELECT AIで実行できるrunsql (デフォルト)、showsqlnarratechatexplainsqlfeedbacksummarizeなどのアクションを示します。これらの例では、AIプロバイダおよびDBMS_CLOUD_AI.CREATE_PROFILE関数で指定されたプロファイル属性を持つshスキーマを使用します。現在のセッションでDBMS_CLOUD_AI.SET_PROFILEプロシージャを使用して、AIプロファイルの設定後にSelect AIアクションを使用します。

テキストのサマリーを生成するには、SELECT AI SUMMARIZE <TEXT>を使用します。

SQL> select ai how many customers exist;
 
CUSTOMER_COUNT
--------------
         55500
 
SQL> select ai showsql how many customers exist;
 
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
 
 
SQL> select ai narrate how many customers exist;
 
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
 
SQL> select ai chat how many customers exist;
 
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.


SQL> select ai explainsql how many customers in San Francisco are married;
 
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
 
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
  - 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
  - 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
 
Remember to adjust the table and column names based on your actual schema if they differ from the example.
 
Feel free to ask if you have more questions related to SQL or database in general.

-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
 
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id  1v1z68ra6r9zf;
 
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;

SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
 
... (skipped 1000 rows in the middle)
 
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
 
 
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.

例: AWSを使用したSelect AI

この例では、AWSを使用して、AWSで使用可能なモデルを使用して、自然言語プロンプトまたはチャットからSQLを生成、実行および説明する方法を示します。

次の例は、Amazon Bedrockとその基盤モデルでAWSをAIプロバイダとして使用する方法を示しています。この例では、AWS資格証明の作成、ネットワーク・アクセスの提供、AIプロファイルの作成、およびSelect AIアクションを使用した自然言語プロンプトからのSQL問合せの生成、およびAWS基盤モデルを使用したチャットを示しています。

AWSを使用するには、アクセス・キー、秘密キーおよびモデルIDを取得します。参照してください。DBMS_CLOUD_AI.CREATE_PROFILEプロシージャで、モデルIDをmodel属性として使用します。デフォルト・モデルが指定されていないため、model属性を明示的に指定する必要があります。

--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--
-- Create Credential for AI provider
--
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'AWS_CRED',
        username    => '<your_AWS_access_key>',
        password    => '<your_AWS_secret_key>'
      );
END;
/
 
PL/SQL procedure successfully completed.
 
 
--
-- Grant Network ACL for AWS
--
BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'bedrock-runtime.us-east-1.amazonaws.com',
        ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                    principal_name => 'ADB_USER',
                    principal_type => xs_acl.ptype_db)
       );
END;
/
 
PL/SQL procedure successfully completed.
 


--
-- Create AI profile 
--
BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =>'AWS',
        attributes   =>'{"provider": "aws",
          "credential_name": "AWS_CRED",
          "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
           "model" : "anthropic.claude-v2",
           "conversation" : "true"
          }');
END;
/
 
 
PL/SQL procedure successfully completed.


--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');

PL/SQL procedure successfully completed.
 
--
-- Use AI
--

SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500


SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46

SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"

SELECT AI explainsql how many customers in San Francisco are married;

"RESPONSE""SELECT 
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'

Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes 
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""

SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:

1. Bert Katz
2. Madallyn Ladd  
3. Henrietta Snodgrass

SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:

- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.

- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.

- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.

- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands. 

- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.

- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.

- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.

- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.

- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.

So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."

--
--Clear the profile
--
BEGIN
   DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.

--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
 
PL/SQL procedure successfully completed.