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

Autonomous Database on Dedicated Exadata Infrastructure Select AIを使用すると、自然言語を使用してデータを問い合せることができます。

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

用語

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

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

用語 定義

データベース資格証明

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

LLMの幻覚

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

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

大型言語モデル(LLM)

大言語モデルは、人間のような言語、ソフトウェア・コードおよびデータベース問合せを理解および生成するために大量のテキスト・データに基づいてトレーニングされた高度な人工知能モデルを指します。これらのモデルは、テキスト生成、翻訳、要約、質問回答、センチメント分析など、幅広い自然言語処理タスクを実行できます。LLMは通常、入力データからパターン、コンテキストおよびセマンティクスを学習するニューラル・ネットワークベースのアーキテクチャであり、一貫性のあるコンテキスト関連テキストを生成できます。

自然言語プロンプト

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

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

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

Select AIの使用例

OracleのSelect AIを、OpenAI、Cohere、Azure Open AI、OCI Generative AIなどの様々なAIプロバイダーと統合して、自然言語から直接SQLクエリを生成する方法をご紹介します。

これらの例では、一般的なSelect AIアクションを紹介し、それらのアクションを活用するために様々なAIプロバイダでプロファイルを設定する手順を示します。

例: AIアクションの選択

次の例は、SELECT AIで実行できるrunsqlshowsqlnarratechatexplainsqlなどのアクションを示しています。これらの例では、DBMS_CLOUD_AI.CREATE_PROFILE関数で設定されたAIプロバイダおよびプロファイル属性でshスキーマを使用します。

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.

使用ガイドライン

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

使用目的

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

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

プロンプト拡張データ

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

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

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

警告:

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

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

SQL生成について

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

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

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

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

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

Autonomous 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 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サービスを使用するには、次のステップを実行します:

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

        ヒント:

        • これらのパラメータを使用してネットワーク・アクセス権限を提供し、DBMS_CLOUD_AI.CREATE_PROFILEプロシージャを使用してAzure OpenAIサービス・プロファイルを作成するため、リソース名およびデプロイメント名に注意してください。
        • モデルの1分当たりのトークンのレート制限の詳細は、Azure OpenAIサービスの割当て制限および制限を参照してください。
      3. Azure OpenAIサービスへのアクセスを許可:
        • Azure OpenAIサービスへのアクセスを許可するには、シークレットAPIキーを使用できます。詳細は、Select AIの使用例の例を参照してください。
    • OCI生成AI。API署名キーの生成方法を参照してください。
  • 外部AIプロバイダにアクセスするためのネットワークACL権限。
    ノート

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

DBMS_CLOUD_AIパッケージの構成

DBMS_CLOUD_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アクセス権を付与できます。詳細は、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の詳細は、「プロファイル属性」を参照してください。

ace

アクセス制御エントリ(ACE)。ACLの各ACEエントリを作成するために、XS$ACE_TYPEタイプが提供されています。詳細は、Creating ACLs and ACEsを参照してください。

次に、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サービス)に依存します。詳細は、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

パラメータ

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はハルシネーションの対象となり、結果が常に正しいとはかぎりません。

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

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

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

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

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