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

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

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

Select AIについて

自然言語を使用して、SQLを通じてデータベースおよびLLMと対話し、ユーザーの生産性を向上させ、AIベースのアプリケーションを開発します。Select AIは、自然言語プロンプトからのSQLの生成、実行、説明、ベクトル・ストアによる検索拡張生成、合成データの生成、LLMとのチャットなど、生成AIの使用を簡素化および自動化します。

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

また、Select AIは、ベクトル埋込みの生成から、ベクトル・ストアを使用したセマンティック類似性検索によるプロンプトに基づく関連コンテンツの取得まで、検索拡張生成(RAG)プロセスを自動化します。その他の機能には、合成データの生成、会話のチャット履歴のサポート、SQLインタフェースからのその他の機能が含まれます。

DBMS_CLOUD_AIパッケージを使用すると、自然言語プロンプトを使用してSQLコードを生成するためのユーザー指定LLMとの統合が可能になります。自然言語からSQLへの生成の場合、このパッケージは、関連するデータベース・スキーマ・メタデータを含むLLMに拡張プロンプトを提供します。これにより、自然言語プロンプトに基づいてSQL問合せを生成、実行および説明できます。また、ベクトル・ストア、合成データ生成を使用した検索拡張生成を容易にし、LLMとのチャットも可能にします。DBMS_CLOUD_AIパッケージは、Select your AI Provider and LLMsに示されているAIプロバイダと連携します。

ノート:

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

  • 複数の言語でプロンプトを送信できます。結果の品質は、使用している特定のLLMまたは埋込みモデル(トランスフォーマ)の能力によって異なります。多言語サポートについては、LLMまたは埋込みモデルのドキュメントを確認してください。

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

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

関連する 用語

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

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

用語 定義
会話

Select AIでの会話は、ユーザーとシステム間の対話型交換を表し、ユーザーは一連の自然言語プロンプトを介してデータベースを問い合せたり、対話したりできます。Select AIは、セッションベースの短期的な会話を組み込んで、以前のインタラクションに基づいて現在のプロンプトに対してコンテキスト対応の応答を生成します。短期的な会話で現在のリクエストに最大10個のプロンプトが組み込まれ、LLMに送信される拡張プロンプトが作成されます。Select AIでは、カスタマイズ可能な長期会話の使用がサポートされており、コンテキストを混在させることなく、異なるトピックでSelect AIを使用でき、DBMS_CLOUD_AIパッケージの会話APIを介して構成できます。詳細は、会話の使用およびカスタマイズを参照してください。

データベース資格証明

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

LLMの幻覚

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

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

自然言語プロンプト

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

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

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

類似検索

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

ベクトル間隔

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

ベクトル索引

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

ベクトル・ストア

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

Select AIのユースケース

Select AIは、データ・インタラクションを強化し、開発者はSQLから直接AIドリブン・アプリケーションを構築し、自然言語プロンプトをSQLクエリやテキスト・レスポンスに変換し、LLMとのチャット・インタラクションをサポートし、RAGを使用して現在のデータでレスポンス精度を向上させ、合成データを生成できるようにします。

次のユース・ケースがあります。

  • 自然言語プロンプトからSQLを生成

    開発者の生産性: Select AIは、SQLクエリを迅速に開始することで、開発者の生産性を大幅に向上させます。開発者は自然言語プロンプトを入力でき、Select AIはデータベース・スキーマの表およびビューに基づいてSQLを生成します。これにより、複雑な問合せを最初から作成するために必要な時間と労力が削減されるため、開発者は、生成された問合せを特定のニーズに合せて調整および最適化することに集中できます。

    エンドユーザー向けの自然言語クエリ: Select AIは、エンドユーザーが自然言語クエリを使用してアプリケーションの基礎となるデータテーブルやビューと対話できるようにします。この機能により、SQLの専門知識を持たないユーザーは、質問をしたり、データを直接取得したりできるため、使用しているLLMの機能や使用可能なスキーマ・メタデータの品質と比較して、データへのアクセスがより直感的で使いやすいものになります。

    SQL生成のその他の機能: 自然言語からSQLへの生成では、次の強調表示された機能もサポートされています。

    • スキーマまたは表またはビューの指定: Select AIでは、スキーマと、オプションでそのスキーマ内の表またはビューで構成されるオブジェクト・リストを指定できます。

    • 関連する表メタデータを自動的に検出: Select AIは、Oracle Database 26aiで、関連する表を自動的に検出し、問合せに関連する特定の表に対してのみメタデータを送信します。

    • 表アクセスの制限: Select AIでは、SQL生成のAIプロファイル属性にリストされている表のみを考慮して、表アクセスを制限できます。
    • 列の大/小文字の区別を指定: Select AIでは、LLMがデータベースおよびLLMから大/小文字を区別しないレスポンスを生成するように、大/小文字の区別を指定できます。
  • 会話

    Select AIでチャットボットのような機能を有効にすることで、ユーザーはデータのクエリやアクションを実行するための自然な会話を行うことができます。これらのチャットは、コンテキストを追跡し、元の質問を明確化または拡張するフォローアップ回答を提供します。このシナリオはエンゲージメントを高め、会話を通じて複雑なクエリを簡単にします。

  • Select AI Agentを使用したエージェント・ワークフロー

    Select AI Agentを使用して、エージェント、ツール(SQL、RAG、Websearch、Notifications)、およびデータ取得、通知などのマルチステップ・シナリオのタスクを調整します。詳細は、Select AI Agentによる自律型エージェントの構築を参照してください。

  • カスタマイズされたメディア生成

    Select AIを使用して、個々の顧客の詳細に合せた電子メールなどのパーソナライズされたメディア・コンテンツを生成できます。たとえば、プロンプトでLLMに、顧客に推奨製品のセットを試すよう促す友好的でアップビートな電子メールを作成するように指示できます。これらの推奨事項は、顧客の人口統計またはデータベースで使用可能なその他の特定の情報に基づいている場合があります。このレベルのカスタマイズにより、関連性の高い魅力的なコンテンツを顧客に直接提供することで、顧客エンゲージメントが向上します。

  • コードの生成

    Select AI chatアクションを使用すると、Select AIを使用して、指定したLLMに自然言語プロンプトからコードを生成するように依頼できます。この機能では、SQL、Python、R、Javaなどの様々なプログラミング言語がサポートされています。次に例を示します。

    • Pythonコード: 「ACTUALおよびPREDICTED列を含むDataFrameに対する混同マトリックスを計算するためのPythonコードを記述します。」
    • SQL DDL: 列名、年齢、収入および国を含むSQL表のDDLを記述します。
    • SQL問合せ: CHURN_DT_MODELという名前のOracle Machine Learningのデータベース内モデルを使用して、どの顧客が解約し、どの確率で解約するかを予測するSQL問合せを記述します。
  • 検索拡張生成(RAG)

    ベクトル・ストア・コンテンツをセマンティック類似検索に使用して、LLMレスポンスのプロンプトの正確性と関連性を高めます。

  • 合成データ生成

    ソリューション・テスト、概念実証およびその他の用途のためにスキーマに準拠するLLMを使用して合成データを生成します。合成データは、実際のデータがない場合にアプリケーションのより適切なテストをサポートし、アプリケーションの全体的な品質につながります。

使用ガイドライン

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
  • 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モデルは、堅牢なマルチモーダル機能を提供します。

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

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

Autonomous AI Databaseは、AIプロファイルを使用して、LLMへのアクセスを容易におよび構成し、自然言語プロンプトに基づいてSQLを生成、実行および説明するための設定を行います。また、埋込みモデルとベクトル索引を使用して検索拡張生成を容易にし、LLMとのチャットを可能にします。

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サービスへのアクセスを許可できます。詳細については、Examples of Using Select AIの例を参照してください。
    • 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を構成するには:
  1. DBMS_CLOUD_AIパッケージに対するEXECUTE権限を、Select AIを使用するユーザーに付与します。

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

    次の例では、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;
    /
    
  2. Select AIを使用するユーザーおよびAIプロバイダ・エンドポイントにネットワークACLアクセス権を付与します。

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

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

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

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

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

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の作成に関する項を参照してください。

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)によって異なります。詳細は、を参照してください。

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ビューを参照してください。

会話の使用とカスタマイズ

Select AIでの会話は、ユーザーとシステム間の対話型対話を参照します。この対話では、ユーザー提供の自然言語プロンプトのシーケンスが格納および管理され、LLMインタラクションの長期メモリーがサポートされます。

Select AIは、AIプロファイルで有効になっている短期的なセッションベースの会話と、特定のプロシージャまたはファンクションおよび会話IDを使用して有効になっている長期の名前付き会話をサポートします。

ノート:

Select AI会話のサポートは、Oracle Database 19c (バージョン19.30以降)およびOracle Database 26ai (バージョン23.26.1以降)で使用できます。

会話のタイプ

Select AIは、セッションベースの短期的な会話とカスタマイズ可能な会話をサポートします。

セッションベースの短期会話: Select AIには、セッションベースの短期会話が含まれており、以前の対話に基づいて現在のプロンプトに対してコンテキスト対応のレスポンスを生成します。

これを有効にするには、AIプロファイルでconversation属性をtrue|falseに設定します。複数会話機能とは異なり、セッション・ベースの会話には、セッション中のみプロンプトが格納されます。プロンプトは一時表に格納され、セッションが終了すると自動的に削除され、会話間で再利用および切り替えることはできません。

カスタマイズ可能な長期会話: Select AIは、カスタマイズ可能な会話の作成と使用をサポートしており、コンテキストを混在させることなく、さまざまなトピックでSelect AIを使用できるため、柔軟性と効率性が向上します。DBMS_CLOUD_AI会話プロシージャおよびファンクションを使用して、会話を作成、設定、削除および更新できます。会話を有効にすると、Select AIによってプロンプト履歴が取得され、LLMに送信されて現在のプロンプトに対するレスポンスが生成されます。これらのレスポンスは、将来使用するために永続表に格納されます。

ノート:

Select AI Conversationsでは、runsqlshowsqlexplainsqlnarrateおよびchatアクションがサポートされます。

カスタマイズ可能な会話の使用方法

カスタマイズ可能な会話には、次の方法でSelect AIを使用できます。

  • DBMS_CLOUD_AI.SET_CONVERSATION_IDプロシージャを使用してセッションの会話IDを設定し、SELECT AI <ACTION> <PROMPT>を実行します。

  • DBMS_CLOUD_AI.GENERATE関数のparams引数にconversation_idを渡します。

ノート:

複数の会話とconversation: [true|false]設定の両方を使用する場合、conversation設定は無視されます。

SQL問合せ生成(NL2SQL)のコンテキストでは、会話により、より直感的でアクセスしやすい方法でデータを操作できるため、ユーザーはSQLに関する深い技術的知識を必要とせずに、インサイトを抽出してタスクを実行することが容易になります。会話は、Select AIのチャットおよびRAG機能でも使用できます。

たとえば、会話は直感的にデータを分析する方法を提供します。
  • 「合計顧客数」などの質問
  • 次のようなコンテキスト対応の質問をフォロー・アップします。
    • 「国別の顧客数の増加」
    • 「どの年齢層が最も一般的か」
    • 「購入によって上位5の顧客とその国を維持し、結果にランクを含める」

会話を有効にするには、完全な例について、例: Select AIでの会話の有効化を参照してください。

セッションベースの会話とカスタマイズ可能な会話

次の表に、Select AIでのセッションベースの会話とカスタマイズ可能な会話を比較します。

質問 セッションベースの短期会話 カスタマイズ可能な長期会話

いつ使用しますか?

1回のセッションでモデルに最近の質問と回答を記憶させるための、迅速で一時的なチャットに最適です。これは、後で会話を保存または再利用する必要がない場合に役立ちます。

複数のセッションにまたがる可能性のある、より長くまたは進行中の会話用に設計されています。これは、会話履歴を追跡、レビューまたは管理する場合、またはアプリケーションの様々な部分が時間の経過とともに同じ会話コンテキストにアクセスする必要がある場合に役立ちます。

有効化する方法を教えてください。

AIプロファイルに{"conversation": true or false}を設定します。

DBMS_CLOUD_AI.SET_CONVERSATION_IDプロシージャまたはDBMS_CLOUD_AI.GENERATEの使用

いくつの会話が許可されますか。

1つ。

複数の会話を作成できます。

会話IDを明示的に指定した場合、必要に応じてプロンプトを適切な会話に関連付けるために、会話IDを交互に交互に関連付けることができます。

プロンプトはどこに保存され、どのくらいの期間保存されますか。

プロンプトは一時表に格納され、セッションが終了すると削除されます。

プロンプトは永続テーブルに格納されます。

プロンプトは、DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャのretention_daysパラメータで指定された日数の間、データベースに保持されます。保存期間を過ぎると、会話とそのプロンプトが自動的に削除されます。プロンプトは、DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPTプロシージャを使用して手動で削除することもできます。

格納されるプロンプトの数と、LLMに送信されるプロンプトの数。

最大10のプロンプトが格納され、LLMに送信されます。この制限はカスタマイズできません。

すべてのプロンプトが保存されます。

デフォルトでは、最新のプロンプトが10個LLMに送信されます。これは、conversation_lengthパラメータを使用してカスタマイズできます。「CREATE_CONVERSATION属性」を参照してください。

個々のプロンプトは削除できますか。

いいえ。個々のプロンプトを手動で削除することはできません。

特定の個々のプロンプトを削除するには、USER_CLOUD_AI_CONVERSATION_PROMPTSビューで指定されているプロンプトIDを使用し、DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPTプロシージャを使用します。

AIプロファイルは会話の取得に使用されますか。

はい、Select AIは、同じAIプロファイルを使用して以前に生成されたプロンプトおよびレスポンスを取得します。

いいえ。Select AIは、プロンプトとレスポンスの格納時に使用されるAIプロファイルを追跡しますが、そのプロファイルに基づいて取得を制限しません。すべての会話履歴をLLMに送信し、レスポンスの生成に使用されるプロファイルに関係なく、レスポンスの生成をガイドします。

プロンプトの履歴はどこで確認できますか。

プロンプトはCLOUD USERの下の一時表に保存されますが、問合せではアクセスできません。

DBMS_CLOUD_AI会話ビューを使用して、会話およびプロンプトを問い合せて確認できます。詳細は、DBMS_CLOUD_AIビューを参照してください。

LLMを改善するためのフィードバックの提供

Select AIを使用すると、選択したLLMがより正確なSQLクエリを生成する機能を改善するために、フィードバックを提供できます。

ノート:

この機能は、Oracle Database 23aiでのみ使用可能です。これは、既存のSelect AIアクション(runsqlshowsqlおよびexplainsql)とともに使用できます。AIプロファイルがRAGではなくNL2SQL生成用に構成されていることを確認します。

feedbackアクションまたはDBMS_CLOUD_AI.FEEDBACKプロシージャを使用して、生成されたSQLの精度を向上させるフィードバックを提供できます。Select AIは、フィードバック機能を初めて使用するときに、デフォルトの属性を持つ<profile_name>_FEEDBACK_VECINDEXという名前のデフォルトのベクトル索引を作成します。この索引は、提供されたフィードバックに基づいて将来生成されたSQLを絞り込むのに役立ちます。詳細は、「FEEDBACKのベクトル索引」を参照してください。

ヒント :

DBMS_CLOUD_AI.FEEDBACKプロシージャは、指定したLLMが正しいSQL問合せの生成に失敗した場合、またはNL2SQL SELECT AIアクションのいずれかから予想される結果を返さない場合に使用します。DBMS_CLOUD_AI.FEEDBACKプロシージャを使用して、正しいSQLをベクトル表に直接追加することもできます。これは、同様のプロンプトの参照として機能することで、将来のSQL生成をガイドするのに役立ちます。

次のタイプのフィードバックが受け入れられます。
  • 肯定的なフィードバック: 生成されたSQLの精度を承認および確認します。将来の参照のために、確認済みクエリーが保存されます。

  • ネガティブ・フィードバック: NL2SQL SELECT AIアクションの結果が正しいSQLの生成に失敗した場合は、SELECT AI feedback <feedback>またはDBMS_CLOUD_AI.FEEDBACKプロシージャを使用して、問合せのエラーを識別するか、proseで想定された内容に関するガイダンスを提供することで、必要なSQL問合せの改善を提供できます。システムはLLMを使用してクエリーを絞り込み、将来の Select AIクエリー生成用に洗練されたバージョンを格納します。格納された洗練された問合せは、ヒントとして使用され、拡張プロンプトの一部としてLLMに送信されます。

フィードバックを使用する利点

Select AIのフィードバック・アクションおよびプロシージャには、SQL問合せ生成の精度を高めるプロンプト・チューニング・メカニズムが導入されています。

AIプロファイルの所有者は、生成されたSQL問合せに対するフィードバックを提供でき、Select AIシステムは時間の経過とともにユーザー・インタラクションから学習します。この学習では、現在のプロンプトと同様のプロンプトを識別するためにベクトル検索が使用されるプロンプトおよびフィードバック・コンテンツのリポジトリを収集します。上位の一致例は、拡張プロンプトの一部としてLLMへのメタデータとして提供されます。利点は次のとおりです。
  • SQL問合せの精度を向上できます。
  • AIプロファイルの所有者は、正しい問合せを確認するか、セマンティックの意図またはビジネス定義を指定して正しい問合せを生成することで修正を提案することで、フィードバックを提供できます。
  • 履歴フィードバックを将来の問合せ生成のヒントとして使用して、ニーズに適応させます。

フィードバックの提供方法

Select AIでは、feedbackアクションを使用するか、DBMS_CLOUD_AI.FEEDBACKプロシージャをコールして、フィードバックを入力できます。

注意:

AIプロファイルを所有する単一のデータベース・ユーザーで複数のユーザーがデータベース・セッションを共有するアプリケーションでは、フィードバック・アクションを使用しないでください。AIプロファイルの所有者は、修正されたクエリーがそのプロファイルのすべてのユーザーに適切であることを確認したあとでのみ、フィードバックを提供するようにしてください。

フィードバックは、次を含めることで提供できます。
  • SQL_TEXT: 現在のSQL問合せのフィードバックを引用符で囲みます。または、V$MAPPED_SQLビューを問い合せることで、特定の問合せのSQL_TEXTを取得できます。

  • SQL_ID: V$MAPPED_SQLビューを問い合せることで、SQL_IDを取得できます。

  • 前回生成されたSQLの使用: 自然言語でフィードバックを入力します。

    ノート:

    最後のsqlを使用するには、Oracle SQL*PlusまたはOracle SQLclでサーバーの出力をオフに設定してください。sys.v_$session表およびv_$mapped_sql表に対するREAD権限が必要です。
    GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER;
    GRANT READ ON SYS.V_$SESSION TO ADB_USER;

詳細は、FEEDBACKプロシージャおよび例: Select AIフィードバックを参照してください。

プロパティ・グラフを使用したグラフ・データの問合せ

Select AIは、自然言語を使用してOracleプロパティ・グラフにプロパティ・グラフ問合せ(PGQ)を生成します。これにより、ユーザーは最小限のSQL知識でGRAPH_TABLE演算子を使用してグラフ・データを問い合せることができます。

Select AIは、自然言語をSQL (NL2SQL)機能に拡張してグラフ構造を実現し、自然言語を使用してSQLプロパティ・グラフを問い合せることができます。Select AIでは、GRAPH_TABLE演算子を適用して、グラフ構造化データの関係および属性を解釈します。AIプロファイルで定義されたデータ・オブジェクトに基づいて、SQLまたはPGQグラフ問合せを生成します。AIプロファイルにプロパティ・グラフが含まれている場合、Select AIは生成AIを使用して、GRAPH_TABLE演算子を介してグラフを参照するPGQ問合せを構築します。LLMは、正確な問合せを生成するために、グラフ・オブジェクトのメタデータ(CREATE PROPERTY GRAPH文など)を自動的に受信します。表、ビューまたはリレーショナル・オブジェクトを指定すると、Select AIによってSQL問合せが生成されます。この機能により、Oracle AI Databaseに格納されたグラフ・データに対するパターン一致問合せが簡素化され、SQL問合せの手動作成への依存性が軽減されます。

object_list属性に1つ以上のプロパティ・グラフが定義されたAIプロファイルを作成すると、AIプロファイルに定義されたLLMは、指定されたプロパティ・グラフのコンテキストを使用してプロンプトを解釈します。Select AIは、次を含む拡張プロンプトを構築します。
  • PGQ問合せを作成する手順。

  • 指定されたプロパティ・グラフ(CREATE PROPERTY GRAPH文)を記述するメタデータ。

この拡張プロンプトはLLMに送信されます。Select AIは問合せを実行し、結果を返します。AIプロファイル内のテーブル、スキーマ、ビューなどの他のオブジェクトタイプとともにプロパティーグラフが指定されている場合は、Select AIによってエラーが発生します。

SQLとPGQ

Select AIでは、生成される問合せのタイプは、AIプロファイルのobject_list属性で定義されたオブジェクトによって異なります。
  • SQL問合せ: スキーマ、表、ビューなどのリレーショナル・データを使用します。

  • PGQ問合せ: プロパティ・グラフを使用し、パターン一致にGRAPH_TABLE演算子を適用します。

詳細は、「SQLプロパティ・グラフ」および「SQL GRAPH問合せ」を参照してください。

プロパティ・グラフでSelect AIを使用する利点

データベース・ユーザーは、Select AIを使用してプロパティ・グラフを問い合せて、自然言語からグラフ問合せを生成できるため、手動作業が削減され、グラフ関係の理解が向上します。

主なメリットは次のとおりです。
  • NL2SQL: Select AIのNL2SQL機能がグラフ問合せに拡張され、ユーザーが「ドレスを購入した顧客の検索」などの自然言語プロンプトを記述できるようになりました。

  • SQLまたはPGQ: データ・オブジェクトに応じて、Select AIによってSQLまたはPGQ問合せが自動的に生成されます。

  • 生産性: GRAPH_TABLE演算子を使用したグラフ問合せの作成にかかる時間と労力を削減します。

  • 会話: 会話コンテキストを保持し、プロパティ・グラフを問い合せます。

制限事項

プロパティ・グラフのSelect AIでは、次の機能はサポートされません。

プロパティグラフでSelect AIを使用する方法

Select AIでは、DBMS_CLOUD_AI.GENERATE関数またはSelect AI <action> <prompt>を使用してグラフ・データを探索できます。

AIプロファイルのobject_list属性にプロパティ・グラフを定義したら、次を使用できます:
  • 出力を生成するSQLコマンドラインのSELECT AI <ACTION> <PROMPT>

  • DBMS_CLOUD_AI.GENERATEファンクションを使用して、ファンクション内にプロンプトを指定します。

サポートされているアクションは、runsqlshowsqlexplainsqlnarrateおよびshowpropmtです。Select AI for Property Graphでは、セッションベースの短期およびカスタマイズ可能な長期会話もサポートされています。

さらに学習するには、例: プロパティ・グラフのSelect AIおよび例: プロパティ・グラフのプロンプトのサンプルを参照してください。

Select AIの使用例

OracleのSelect AIをさまざまなサポート対象AIプロバイダーと統合して、自然言語プロンプトからSQLを生成、実行、説明したり、LLMとチャットしたりする方法をご紹介します。

例: 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を使用して自然言語プロンプトからSQLを生成、実行、および説明したり、AWSで使用可能なモデルを使用してチャットしたりする方法を示します。

次の例は、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.

例: Select AIでの会話の有効化

次の例は、Select AIでの会話の有効化を示しています。

ノート:

管理者権限(ADMIN)を持つユーザーは、EXECUTEを付与し、ネットワーク・アクセス制御リスト(ACL)を有効にする必要があります。

セッションベースの会話

AIプロファイルを作成します。プロファイルでconversation属性をtrueに設定すると、このアクションには、スキーマ・メタデータを含む可能性のある以前の相互作用またはプロンプトからのコンテンツが含まれ、プロファイルが設定されます。プロファイルを有効にすると、データとの会話を開始できます。自然言語を使用して質問し、必要に応じてフォローアップします。


--Grants EXECUTE privilege to ADB_USER
--
SQL> grant execute on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for OpenAI endpoint
--
SQL> 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;
    /
 
PL/SQL procedure successfully completed.
 
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME   => 'OPENAI_CRED', 
username          =>  'OPENAI', 
password          =>  '<your_api_token>');
 
PL/SQL procedure successfully completed.
 
--
-- Create AI profile
--
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
  profile_name   => 'OPENAI',
  attributes     =>'{"provider": "openai",                                                                   
        "credential_name": "OPENAI_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"}],
        "conversation": "true"                
       }');                                                                  
     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.
 
--
-- Get Profile in current session
--
SQL> SELECT DBMS_CLOUD_AI.get_profile() from dual;
 
DBMS_CLOUD_AI.GET_PROFILE()
--------------------------------------------------------------------------------
"OPENAI"
 
--
-- Use AI
--
what are the total number of customers;
 
CUSTOMER_COUNT
--------------
         55500
 
break out count of customers by country;   
 
RESPONSE
-----------------
COUNTRY_NAME 			CUSTOMER_COUNT
Italy 				7780
Brazil 				832
Japan 				624
United Kingdom 			7557
Germany 			8173
United States of America 	18520
France 				3833
Canada 				2010
Spain 				2039
China 				712
Singapore 			597
New Zealand 			244
Poland 	708
Australia 			831
Argentina 			403
Denmark 			383
South Africa 			88
Saudi Arabia 			75
Turkey 				91

  
what age group is most common;
 
RESPONSE
--------------------------------------------------------------------------------
AGE_GROUP 	CUSTOMER_COUNT
65+ 		28226
 
select ai keep the top 5 customers and their country by their purchases and include a rank in the result;
 
RESPONSE
--------------------------------------------------------------------------------
RANK 	CUSTOMER_NAME 		COUNTRY 	PURCHASES
1 	Abigail Ruddy 		Japan 		276
2 	Abigail Ruddy 		Italy 		168
3 	Abigail Ruddy 		Japan 		74
3 	Abner Robbinette 	Germany 	74
5 	Abner Everett 		France 		68
 
 
SQL> EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.

カスタマイズ可能な会話

次の例は、カスタマイズ可能な会話をサポートする会話管理APIの使用を示しています。複数の会話にSelect AIを使用するには:
  1. 会話の作成
  2. 現在のユーザー・セッションでの会話の設定
  3. Select AI <action> <prompt>の使用
会話は、次の方法で作成および設定できます。
  • DBMS_CLOUD_AI.CREATE_CONVERSATIONファンクションを使用し、DBMS_CLOUD_AI.SET_CONVERSATION_IDを使用して会話を設定します。
  • DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャを直接コールして、会話を1ステップで作成および設定します。
例: カスタマイズ可能な会話の作成および設定

次の例は、DBMS_CLOUD_AI.CREATE_CONVERSATIONファンクションを使用して会話を作成し、DBMS_CLOUD_AI.SET_CONVERSATION_IDプロシージャを使用して会話を設定する方法を示しています。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;  -- in 19c, run SELECT DBMS_CLOUD_AI.create_conversation FROM dual;
  
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
 
 
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed

次の例は、DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャを実行して、conversation_idを直接作成および設定する方法を示しています。

EXEC DBMS_CLOUD_AI.create_conversation;
 
PL/SQL procedure successfully completed.

titledescriptionretention_daysconversation_length属性などの会話属性をカスタマイズすることもできます。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
            attributes => '{"title":"My first conversation", 
			"description":"this is my first conversation", 
			"retention_days":5, 
			"conversation_length":5}');
  
 
CREATE_CONVERSATION
------------------------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A

DBA/USER_CLOUD_AI_CONVERSATIONSビューを問い合せると、特定の会話が存在するかどうかを確認できます。

-- Verify the setup
SELECT conversation_id, conversation_title, description, retention_days, 
conversation_length FROM DBA_CLOUD_AI_CONVERSATIONS WHERE 
conversation_id = '38F8B874-7687-2A3F-E063-9C6D4664EC3A';
 
CONVERSATION_ID                      	CONVERSATION_TITLE                              DESCRIPTION                        RETENTION_DAYS                 CONVERSATION_LENGTH
------------------------------------ 	----------------------------------------------- ---------------------------------- ------------------------------ -------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A 	My first conversation                           this is my first conversation     +00005 00:00:00.000000         5

DBMS_CLOUD_AI.GET_CONVERSATION_IDファンクションをコールして、会話が設定されているかどうかを確認することもできます。

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
 
 
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92
例: Select AIでのカスタマイズ可能な会話の使用

会話を作成して設定し、AIプロファイルを有効にした後、データとの対話を開始できます。自然言語を使用して質問し、必要に応じてフォローアップします。

SELECT AI <ACTION> <PROMPT>を使用します。

SELECT AI CHAT What is the difference in weather between Seattle and San Francisco?;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco are both located on the West Coast of the United State
s, but they have distinct weather patterns due to their unique geography and cli
mate conditions. Here are the main differences:
 
1. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco, on the other hand, recei
ves significantly less rainfall, with an average of around 20 inches (51 cm) per
 year.
2. **Cloud Cover**: Seattle is often cloudy, with an average of 226 cloudy days
per year. San Francisco is also cloudy, but to a lesser extent, with an average
of 165 cloudy days per year.
 
......
 
 
SELECT AI CHAT Explain the difference again in one paragraph only.;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.
例: GENERATEファンクションを使用した2つの会話の比較

次の例は、2つの会話を同じ意味で使用して質問し、正確な応答を確認する方法を示しています。各会話は、比較に焦点を当てた別の質問から始まります。後で、両方の会話で同じフォローアップ質問をすると、それぞれが前のコンテキストに基づいて異なる回答を返します。

-- First conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92



-- Second conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'What is the difference in weather between Seattle and San Francisco?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco, both located in the Pacific Northwest and Northern Ca
lifornia respectively, experience a mild oceanic climate. However, there are som
e notable differences in their weather patterns:
 
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, espe
cially during the summer months. San Francisco's average temperature ranges from
 45?F (7?C) in winter to 67?F (19?C) in summer, while Seattle's average temperat
ure ranges from 38?F (3?C) in winter to 64?F (18?C) in summer.
 
2. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, w
ith an average of around 20 inches (51 cm) per year. However, San Francisco's ra
infall is more concentrated during the winter months, while Seattle's rainfall i
s more evenly distributed throughout the year.
 
......

-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'How does the cost of living compare between New York and Los Angeles?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York and Los Angeles is relatively high compared to ot
her cities in the United States. However, there are some differences in the cost
 of living between the two cities. Here's a comparison of the cost of living in
New York and Los Angeles:
 
1. Housing: The cost of housing is significantly higher in New York than in Los
Angeles. The median home price in New York is around $999,000, while in Los Ange
les it's around $849,000. Rent is also higher in New York, with the average rent
 for a one-bedroom apartment being around $3,000 per month, compared to around $
2,400 per month in Los Angeles.
 
2. Food: The cost of food is relatively similar in both cities, with some variat
ion in the cost of certain types of cuisine. However, eating out in New York can
 be more expensive, with the average cost of a meal at a mid-range restaurant be
ing around $15-20 per person, compared to around $12-18 per person in Los Angele
s.
 
......


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.


-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York is approximately 20-30% higher than in Los Angele
s, mainly due to the higher cost of housing and transportation. New York has a m
edian home price of around $999,000 and average rent of $3,000 per month for a o
ne-bedroom apartment, compared to Los Angeles' median home price of $849,000 and
 average rent of $2,400 per month. While the cost of food and utilities is relat
ively similar in both cities, the cost of transportation is higher in Los Angele
s due to its car-centric culture, but the cost of public transportation is highe
r in New York. Overall, the total monthly expenses for a single person in New Yo
rk can range from $4,600, compared to around $4,050 in Los Angeles, making New Y
ork the more expensive city to live in.

会話を指定せずにDBMS_CLOUD_AI.GENERATEファンクションをコールできますが、このような場合、意味のあるレスポンスは想定されません。

-- Ask SELECT AI using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
There is no previous explanation to draw from, as this is the beginning of our c
onversation. If you would like to ask a question or provide a topic, I would be
happy to explain the differences related to it in one paragraph.
例: DBMS_CLOUD_AIビューを使用した会話の検証

DBMS_CLOUD_AI会話ビューを問い合せて、会話およびプロンプトの詳細を確認できます。詳細については、を参照してください。

ノート:

この

接頭辞がDBA_のビューは、管理者権限(ADMIN)を持つユーザーのみが使用できます。

SELECT conversation_id, conversation_title, description FROM dba_cloud_ai_conversations;
 
CONVERSATION_ID
------------------------------------
CONVERSATION_TITLE
----------------------------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
Seattle vs San Francisco Weather
The conversation discusses the comparison of weather patterns between Seattle an
d San Francisco, focusing on the differences in temperature, rainfall, fog, suns
hine, and seasonal variation between the two cities.
 
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
NY vs LA Cost Comparison
The conversation discusses and compares the cost of living in New York and Los A
ngeles, covering housing, food, transportation, utilities, and taxes to provide
an overall view of the expenses in both cities.

SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
     GROUP BY conversation_id;
 
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92          2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2
例: 会話詳細の更新

DBMS_CLOUD_AI.UPDATE_CONVERSATIONプロシージャを使用して、会話のtitledescriptionおよびretention_daysを更新できます。DBMS_CLOUD_AI対話ビューを問い合せることで、更新を確認できます。

-- Update the second conversation's title, description and retention_days
SQL> EXEC DBMS_CLOUD_AI.update_conversation(conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
											attributes => '{"retention_days":20, 
														"description":"This a description", 
														"title":"a title", 
														"conversation_length":20}');
 
PL/SQL procedure successfully completed.
 
 
-- Verify the information for the second conversation
SQL> SELECT conversation_title, description, retention_days
FROM dba_cloud_ai_conversations
WHERE conversation_id = '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92';
 
CONVERSATION_TITLE         DESCRIPTION                          RETENTION_DAYS         LENGTH
-------------------------- ------------------------------------ -------------- --------------
a title                    This a description                   20                         20
例: プロンプトの削除

会話から個々のプロンプトを削除し、DBMS_CLOUD_AI会話ビューを問い合せて変更を検証できます。

-- Find the latest prompt for first conversation
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
     WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92'
     ORDER BY created DESC
     FETCH FIRST ROW ONLY;
 
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA61-AFBA-E063-9C6D46644B92
 
 
-- Delete the prompt
EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the prompt is deleted
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92';
 
-- Only one prompt now
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA5A-AFBA-E063-9C6D46644B92
例: 会話の削除

会話全体を削除でき、それに関連付けられたすべてのプロンプトも削除されます。

-- Delete the first conversation
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the conversation and its prompts are removed
SELECT conversation_id FROM dba_cloud_ai_conversations;
 
-- We only have the second conversation now
CONVERSATION_ID
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
 
 
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts GROUP BY conversation_id;
 
-- We only have prompts in the second conversation
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2

例: Select AI Feedback

これらの例は、DBMS_CLOUD_AI.FEEDBACKプロシージャの使用方法と、フィードバックを提供するための様々なシナリオを使用して、後続のSQL問合せの生成を改善する方法を示しています。

ノート:

プロンプトが以前に実行されていない場合でも、Select AI SQLプロンプトにフィードバックを入力できます。Select AIでは、フィードバックを送信する前にSQLプロンプトを問合せで使用する必要はありません。有効なプロンプトに対していつでもフィードバックを入力できます。

例: マイナスのフィードバックの入力

次の例では、feedback_typenegativeとして使用し、SQL問合せを指定することで、生成されたSQLをフィードバック(ネガティブ・フィードバック)として修正する方法を示します。

プロンプトを含むsql_textパラメータを指定してDBMS_CLOUD_AI.FEEDBACKプロシージャをコールすることにより、OCI_FEEDBACK1という名前のAIプロファイルにフィードバックを追加します。属性について学習するには、を参照してください。次に、<profile_name>_FEEDBACK_VECINDEX$VECTAB表からcontent列およびattributes列を取得します。この表は、特定のSQL問合せにリンクされています。フィードバック機能を初めて使用すると、Select AIによってこのベクトル表が自動的に作成されます。詳細は、を参照してください。

SQL> select ai showsql how many movies;
 
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_text=> 'select ai showsql how many movies', feedback_type=> 'negative', response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"');
 
PL/SQL procedure successfully completed.
SQL> select CONTENT, ATTRIBUTES from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
例: 肯定的なフィードバックの提供

次の例では、feedback_typepositiveとして使用して、生成されたSQL (正のフィードバック)に同意し、確認するという承認を示します。

この例では、問合せによって、指定されたプロンプトのv$mapped_sqlビューからsql_idが取得されます。詳細は、V_MAPPED_SQLを参照してください。

OCI_FEEDBACK1という名前のAIプロファイルにフィードバックを追加するには、sql_idパラメータを指定してDBMS_CLOUD_AI.FEEDBACKプロシージャをコールします。次に、<profile_name>_FEEDBACK_VECINDEX$VECTAB表からcontent列およびattributes列を取得します。この表は、特定のSQL問合せにリンクされています。フィードバック機能を初めて使用すると、Select AIによってこのベクトル表が自動的に作成されます。詳細は、を参照してください。

SQL> select ai showsql how many distinct movie genres?;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT g."GENRE_NAME") AS "Number of Movie Genres" FROM "ADB_USER"."GENRES" g
 
SQL> SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
 
SQL_ID
-------------
852w8u83gktc1
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
 
PL/SQL procedure successfully completed.
 
SQL> SELECT content, attributes FROM OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB WHERE JSON_VALUE(attributes, '$.sql_id') ='852w8u83gktc1';
 
 CONTENT                                               
---------------------------------------------------------------------------------------------------- 
how many distinct movie genres?
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT COUNT(DISTINCT g.\"GENRE_NAME\") AS \"Number of Movie Genres\" FROM \"ADB_USER\".\"GENRES\" g","feedback_type":"positive","sql_id":"852w8u83gktc1","sql_text":"select ai showsql how many distinct movie genres?","feedback_content":null}
例: 以前に使用したことのないフィードバックの実行

プロンプトが以前に使用されていない場合でも、SQLプロンプトにフィードバックを入力できます。たとえば:

BEGIN
  DBMS_CLOUD_AI.FEEDBACK(
    profile_name=>'AI_PROFILE',
    sql_text=>'select ai runsql how many products named PAD', -- Prior usage not required
    feedback_type=>'negative',
    response=>'SELECT COUNT(*) AS "Num" FROM "PRODUCTS"."CATG" o WHERE UPPER(o."NAME") LIKE ''%PAD%''',
    feedback_content=>'Use LIKE instead of ='
  );
END;
/

この場合、プロンプトselect ai runsql how many products named PADに対するフィードバックは、事前にプロンプトを使用せずに発行されます。

例: 生成されたSQLに対するフィードバックの追加または削除
次の例は、DBMS_CLOUD_AI.FEEDBACKプロシージャのパラメータを指定して、生成されたSQLに対するフィードバックを追加または削除する方法を示しています。この例では、sql_idおよびsql_textを他のパラメータとともに使用する方法を示します。

ノート:

Select AIでは、sql_idごとに1つのフィードバック・エントリのみが許可されます。同じsql_idに対して追加のフィードバックを入力すると、Select AIによって前のエントリが新しいエントリに置き換えられます。

パラメータの詳細については、を参照してください。

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');
例: 最後のAI SQLでのフィードバック処理を使用したマイナスのフィードバックの提供

この例では、自然言語を使用した変更を提案して、feedbackアクションを使用して生成されたSQLを改善する方法を示します。

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_FEEDBACK1',
    attributes=>'{"provider": "oci",                                                                 
      "credential_name": "GENAI_CRED",
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "object_list": [{"owner": "ADB_USER", "name": "users"},
                      {"owner": "ADB_USER", "name": "movies"},
                      {"owner": "ADB_USER", "name": "genres"},
                      {"owner": "ADB_USER", "name": "watch_history"},
                      {"owner": "ADB_USER", "name": "movie_genres"},
                      {"owner": "ADB_USER", "name": "employees1"},
                      {"owner": "ADB_USER", "name": "employees2"}
                        ]
      }');
END;
/
 
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_FEEDBACK1');

 
PL/SQL procedure successfully completed.
 

select ai showsql rank movie duration;
 
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
 
select ai feedback use ascending sorting;
 
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
 
 
select ai showsql rank the movie duration;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
例: 最後のAI SQLでのフィードバック処理を使用したポジティブ・フィードバックの提供

この例では、feedbackアクションを使用して、自然言語を使用して生成されたSQLを受け入れる方法を示します。

--Positive feedback

select ai showsql which movies are comedy?;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT m."TITLE" AS "Movie Title" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" WHERE g."GENRE_NAME" = 'comedy'
 
select ai feedback this is correct;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you for your positive feedback. The SQL query for prompt "which movies are comedy?" is correctly implemented and delivering the expected results. It will be referenced for future optimizations and improvements.


Select AI Feedback Action Referring SQL_ID
例: フィードバック・アクションをSQL_IDとともに使用してフィードバックを提供

この例では、SQL_IDfeedbackアクションとともに使用して、生成された特定のSQL問合せに対するフィードバックを提供する方法を示します。SQL_IDは、v$MAPPED_SQL表を問い合せることで取得できます。

-- Query mentioned with SQL_ID

select ai showsql how many movies are in each genre;
 
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" GROUP BY g."GENRE_NAME"
 
select sql_id from v$cloud_ai_sql where sql_text = 'select ai showsql how many movies are in each genre';
 
SQL_ID
-------------
8azkwc0hr87ga
 
select ai feedback for query with sql_id = '8azkwc0hr87ga', rank in descending sorting;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many movies are in each genre" is successfully refined. The refined SQL query as following:
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies"
FROM "ADB_USER"."MOVIES" m
INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID"
INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID"
GROUP BY g."GENRE_NAME"
ORDER BY COUNT(m."MOVIE_ID") DESC
例: フィードバック・アクションと問合せテキストの使用

この例は、Select AIプロンプトを引用符で囲み、その後にフィードバックを続けることによって、特定のSelect AI問合せに対するfeedbackアクションを示しています。

-Query mentioned with SQL_TEXT

select ai showsql how many watch history in total;
 
RESPONSE
----------------------------------------------------------------------------------
SELECT COUNT(w."WATCH_ID") AS "Total Watch History" FROM "ADB_USER"."WATCH_HISTORY" w
 
select ai feedback for query "select ai showsql how many watch history in total", name the column as total_watch;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many watch history in total" is successfully refined. The refined SQL query as following:
SELECT COUNT(w."WATCH_ID") AS "total_watch" FROM "ADB_USER"."WATCH_HISTORY" w

例: プロパティ・グラフのSelect AI

この例では、DBMS_CLOUD_AI.GENERATEプロシージャおよび自然言語プロンプトを使用してPGQグラフ問合せを生成し、グラフ・データを問い合せる方法を示します。

例: AIプロファイルでの複数のグラフの指定

この例では、サンプルクエリーとその出力など、AIプロファイルで複数のプロパティーグラフを定義する方法を示します。

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name =>'OPENAI',
      attributes   =>'{"provider": "openai",
        "model": "gpt-4o",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "ADB_USER", "name": "LDBC_GRAPH"},
                        {"owner": "ADB_USER", "name": "G"}]
       }');                                                                  
END;                                                                         
/

SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'OPENAI');

PL/SQL procedure successfully completed.

SQL> select ai who bought a dress;

CUSTOMER_N
----------
Kate

1 row selected.

例: プロパティ・グラフのプロンプトの例

これらの例は、特定のプロンプトに対してshowsqlアクションを使用してサンプル・データを作成し、生成されたSQLを表示する方法を示しています。

例: プロパティ・グラフ表の作成

次の例では、サンプル表およびプロパティ・グラフを作成します。

CREATE TABLE Person
(
    id         NUMBER PRIMARY KEY,
    firstName  VARCHAR2(20 CHAR),
    lastName   VARCHAR2(20 CHAR),
    age        NUMBER,
    jsonProp   VARCHAR2(40 CHAR)
);

CREATE TABLE Post
(
    id         NUMBER PRIMARY KEY,
    content    VARCHAR2(20 CHAR)
);

CREATE TABLE personLikesPost
(
    idPerson NUMBER REFERENCES Person (id),
    idPost   NUMBER REFERENCES Post (id)
);

CREATE TABLE personKnowsPerson
(
    idPerson1 NUMBER REFERENCES Person (id),
    idPerson2 NUMBER REFERENCES Person (id)
);

CREATE PROPERTY GRAPH person_graph
  VERTEX TABLES (
    Person KEY (id) LABEL Person
      PROPERTIES (firstName, lastName, age, jsonProp),
    Post KEY (id) LABEL Post
      PROPERTIES(content)
  )
  EDGE TABLES (
    personLikesPost
      KEY(idPerson, idPost)
      SOURCE KEY (idPerson) REFERENCES Person (id)
      DESTINATION KEY (idPost) REFERENCES POST (id)
      LABEL Likes NO PROPERTIES,
    personKnowsPerson
      KEY(idPerson1, idPerson2)
      SOURCE KEY (idPerson1) REFERENCES Person (id)
      DESTINATION KEY (idPerson2) REFERENCES Person (id)
      LABEL Knows NO PROPERTIES
  );

insert into Person values (1, 'John', 'Doe',23, '{"key1":"value1","key2":"value2"}');
insert into Person values (2, 'Scott', 'Tiger', 25, '{"key1":"value3","key2":"value4"}');
insert into Person values (3, 'Max', 'Power', 27, '{"key1":"value5","key2":"value6"}');
insert into Person values (4, 'Jane', 'Doe', 22, '{"key1":"value7","key2":"value8"}');
insert into Person (id, Firstname, age) values (5, 'Hans', 23);
insert into Person (id, Firstname, age) values (6, 'Franz', 24);
 
INSERT INTO Post VALUES (10, 'Lorem ipsum...');
INSERT INTO Post VALUES (11, 'Nulla facilisi...');
INSERT INTO Post VALUES (12, 'Vestibulum eget ..');
INSERT INTO Post VALUES (13, 'Sed fermentum...');
INSERT INTO Post VALUES (14, 'Fusce at ...');
INSERT INTO Post VALUES (15, 'Pellentesque sit ...');
INSERT INTO Post VALUES (16, 'Integer...');
INSERT INTO Post VALUES (17, 'Curabitur luctus ...');
INSERT INTO Post VALUES (18, 'Nam in ...');
INSERT INTO Post VALUES (19, 'Etiam ac ...');
 
insert into personKnowsPerson values (1, 2);
insert into personKnowsPerson values (2, 3);
insert into personKnowsPerson values (3, 4);
insert into personKnowsPerson values (4, 5);
insert into personKnowsPerson values (5, 6);
insert into personKnowsPerson values (6, 2);
insert into personKnowsPerson values (5, 3);
 
INSERT INTO personLikesPost VALUES (1, 10);
INSERT INTO personLikesPost VALUES (1, 11);
INSERT INTO personLikesPost VALUES (1, 12);
INSERT INTO personLikesPost VALUES (2, 10);
INSERT INTO personLikesPost VALUES (2, 13);
INSERT INTO personLikesPost VALUES (2, 14);
INSERT INTO personLikesPost VALUES (3, 11);
INSERT INTO personLikesPost VALUES (3, 15);
INSERT INTO personLikesPost VALUES (3, 16);
INSERT INTO personLikesPost VALUES (4, 12);
INSERT INTO personLikesPost VALUES (4, 17);
INSERT INTO personLikesPost VALUES (4, 18);
INSERT INTO personLikesPost VALUES (5, 13);
INSERT INTO personLikesPost VALUES (5, 14);
INSERT INTO personLikesPost VALUES (5, 19);
INSERT INTO personLikesPost VALUES (6, 15);
INSERT INTO personLikesPost VALUES (6, 16);
INSERT INTO personLikesPost VALUES (6, 17);
INSERT INTO personLikesPost VALUES (1, 18);
INSERT INTO personLikesPost VALUES (2, 19);

commit;
例: ラベルのない頂点の照合

プロンプト: Find all the people IDs

SELECT person_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v IS "PERSON")
    COLUMNS (VERTEX_ID(v) AS person_id))
例: ラベルのないエッジの照合

プロンプト: Find all the edge IDs

SELECT edge_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v1) -[e]-> (v2)
    COLUMNS (EDGE_ID(e) AS edge_id))
例: ラベルによるエッジの照合

プロンプト: Find all the knows relationship IDs

SELECT knows_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e IS "KNOWS"]-> (p2 IS "PERSON")
    COLUMNS (EDGE_ID(e) AS knows_id))
例: 1つまたは複数のホップを含むパスパターンの照合

プロンプト: List all people who know someone who liked the post 'Sed fermentum...'

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e1 IS "KNOWS"]-> (p2 IS "PERSON") -[e2 IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(post."CONTENT") = UPPER('Sed fermentum...')
    COLUMNS (VERTEX_ID(p1) AS person_id, p1."FIRSTNAME" AS person_firstname, p1."LASTNAME" AS person_lastname))
例: 頂点とエッジのプロパティへのアクセス

プロンプト: Find first name and last name of all people

SELECT first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS first_name, p."LASTNAME" AS last_name))
例: データのフィルタリング

プロンプト: Find post contents liked by John Doe

SELECT post_content
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(p."FIRSTNAME") = UPPER('John') AND UPPER(p."LASTNAME") = UPPER('Doe')
    COLUMNS (post."CONTENT" AS post_content))
例: 関数と式

プロンプト: Show all people (full name) and display their key1 value from jsonProp property

SELECT person_fullname, json_key1
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (
	(p."FIRSTNAME" || ' ' || p."LASTNAME") AS person_fullname,
	JSON_QUERY(p."JSONPROP", '$.key1') AS json_key1
    )
)
例: データのソート

プロンプト: Find friends of Scott Tiger ordered by their last name

SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
    WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
    COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastname
例: 行制限

プロンプト: Find all people ordered by first name. Skip one result and return 2 results only

SELECT person_firstname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS person_firstname))
ORDER BY person_firstname
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY

サポートされていない問合せ

次の問合せでは、特定のLLMで有効なNL2SQLが生成されますが、結果のSQLではOracle AI Database 26aiでまだサポートされていない機能が使用されます。

例: 特定のパターンに一致しない問合せ

プロンプト: Find people that do not know Scott.

EXISTS副問合せはサポートされていません。

SELECT person_id, first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON")
    WHERE NOT EXISTS (
	SELECT 1
	FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
	    MATCH (p2 IS "PERSON") -[e IS "PERSONKNOWSPERSON"]-> (p3 IS "PERSON"
)
	    WHERE p2."ID" = p1."ID" AND UPPER(p3."FIRSTNAME") = UPPER('Scott')
	    COLUMNS (1 AS dummy_value))
    )
    COLUMNS (p1."ID" AS person_id, p1."FIRSTNAME" AS first_name, p1."LASTNAME" A
S last_name))
例: 特定のパターンにオプションで一致させる必要がある問合せ

プロンプト: Show all people and how many posts they have liked (show people even if they have not liked a post).

OPTIONALの一致はサポートされていません。

SELECT person_id, person_firstname, person_lastname, liked_post_ids
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p is "PERSON") OPTIONAL MATCH (p) -[l is "PERSONLIKESPOST"]-> (post is "POST")
COLUMNS(
    VERTEX_ID(p) as person_id,
    p."FIRSTNAME" as person_firstname,
    p."LASTNAME" as person_lastname,
    JSON_ARRAYAGG(VERTEX_ID(post)) as liked_post_ids
))
例: バインドなしの再帰的パス・パターン

プロンプト: Find all people that Scott can reach.

バインドなし数量詞を使用する問合せはサポートされていません。

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
    MATCH (src IS "PERSON") -[e IS "PERSONKNOWSPERSON"]->* (dst IS "PERSON")
    WHERE src."FIRSTNAME" = 'Scott'
    COLUMNS (
	VERTEX_ID(dst) AS person_id,
	dst."FIRSTNAME" AS person_firstname,
	dst."LASTNAME" AS person_lastname
    )
)

断続的な問合せ

LLMは、複数のGRAPH_TABLE演算子を必要とする問合せを変換する際に苦労することが示されています。そのような例を次に示します。

プロンプト: Show people who have liked all the same posts as Hans

SELECT person_id, person_name
FROM GRAPH_TABLE("PERSON_GRAPH"
  MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST"),
	(other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post)
  WHERE hans."FIRSTNAME" = 'Hans'
  COLUMNS (VERTEX_ID(other_person) as person_id, other_person."FIRSTNAME" AS person_name)
)
WHERE NOT EXISTS (
  SELECT 1
  FROM GRAPH_TABLE("PERSONGRAPH"
    MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST")
    WHERE hans."FIRSTNAME" = 'Hans'
    COLUMNS (VERTEX_ID(post) as post_id)
  ) hans_posts
  LEFT JOIN GRAPH_TABLE("PERSONGRAPH"
    MATCH (other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post
 is "POST")
    COLUMNS (VERTEX_ID(post) as post_id)
  ) other_posts
  ON hans_posts.post_id = other_posts.post_id
  WHERE other_posts.post_id IS NULL
)
例: 境界が定義された再帰パス・パターンの照合。

プロンプト: Find all names of the people that can be reached in a 1 to 3 edge path

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") -[e IS "KNOWS"]->{1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
例: 再帰パスに沿ったノードのデータのフィルタ処理

プロンプト: Find all names of the people that can be reached in a 1 to 3 edge path where each person is younger than the next one

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") ((v1 IS "PERSON") -[e IS "KNOWS"]-> (v2 IS"PERSON") WHERE v1."AGE" < v2."AGE"){1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
例: グループ化と集計

LLMは、グループ化と集計が必要な問合せの変換に苦労することがよくあります。よくある間違いは、SELECT句ではなくCOLUMNS句に集計を配置することです。

プロンプト: Find the average number of posts liked by all the users

SELECT AVG(COUNT(post)) AS average_liked_count
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "PERSONLIKESPOST"]-> (post IS "POST")
COLUMNS (VERTEX_ID(p) AS person, VERTEX_ID(post) AS post))
GROUP BY person;