13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Select AIを使ってデータベース内のデータと会話してみる

Last updated at Posted at 2024-05-27

はじめに

Autonomous Databaseで使用することの出来る機能、Select AIを使えば自然言語を使用してデータを問い合せることが出来ます。

Select AIで大規模言語モデル(LLM)を使用することで、ユーザーが入力したテキスト(自然言語)をSQLクエリに変換し、データベース内のデータを問合せることが出来ます。ユーザーは、自然言語を使ってデータベース内のデータと会話をすることが出来ます。

Configuring Generative AI in Oracle APEX using Select AIを参考に、Oracle APEX上で動く、Select AIを使用したアプリケーションを作成します。

【前提条件】

  • OCIのアカウントを作成済みであること
    (OCIのアカウントをお持ちでない場合は、こちらを参考にご作成下さい。)
  • OCIの中に使用可能なコンパートメントが作成済みであること
    (コンパートメントの作成方法はこちらをご参照ください。)

【所要時間】
40分程

1. OCI生成AIサービスのAPIキーの取得

Select AIでは、2024年10月現在、OpenAI、Cohere、Azure OpenAI Service、Google、Anthropic、Hugging Face、そしてOCI生成AIサービスの7つをAIプロバイダーとして使用することが出来ます。

Select AIでは、2024年9月現在、OpenAI、Cohere、Azure OpenAI Service、Google、そしてOCI生成AIサービスをAIプロバイダーとして使用することが出来ます。

本記事では、OCI生成AIサービスのAPIを使用したいと思います。

  1. OCIコンソールにアクセスして、右上のプロファイルからユーザー設定を選択します。
    image.png

  2. 左下のリソースからAPIキーを選択し、APIキーの追加をクリックします。
    image.png

  3. APIキー・ペアの生成(デフォルト)を選択し、秘密キーのダウンロードをした上で作成します。秘密キーは後程使用するので大切に保管しておきます。
    image.png

  4. 構成ファイルのプレビューも後程使用しますので、コピーしメモを取っておきます。
    image.png

OpenAIのAPIキー取得方法はこちら

OpenAIのアカウントを作成

  1. OpenAIのアカウントを未取得の方は、こちらからOpenAIのアカウントを作成します。既にOpenAIのアカウントを作成済みの方はログインします。
    image.png

  2. アカウントを作成/ログインしたら、こちらのページに移動します。
    image.png

クレジットカードを登録

  1. 画面左のナビゲーションメニューからSetting>Billingと遷移し、クレジットカードを登録します。
    credit.png

  2. 本記事のデモで使用するクレジットは1ドル以下となります。現時点ではチャージできる価格は最低5ドルなので、今回は5ドルチャージします。

本記事では一番価格がお手頃な、GPT-3.5 Turboを使用します
image.png

APIキーの取得

  1. OpenAIのAPIキーを取得します。API keys>Project API KeysCreate new seacret keyをクリックします。
    create-api.png

  2. 設定事項はそのままにして、Create secret keyをクリックします。
    api-window.png

  3. 作成したキーは再度確認する事が出来ないので、キーをコピーし、メモをしておきます。
    apikey.png

これで、OpenAIのAPIキーを取得する事が出来ました。

2. 環境設定

2-1. ADBインスタンスとAPEXワークスペースの作成

  1. Select AIはADBの機能なので、使用にはADBインスタンスが必要です。ADBのインスタンスが未作成の場合は101: ADBインスタンスを作成してみようを参考に、ADBインスタンスを作成します。

    ADBインスタンス作成時に、以下の点に注意してください。

    • 名前:任意(同一コンパートメント内に、同じ名前のADBインスタンスは作成不可のため注意)
    • データベース・バージョンの選択:23ai(19cでも問題ありませんが、23aiの方が新機能を使える為)
    • Always Free:オン(無償でお試しいただく場合)
  2. ADBの詳細画面からツール構成をクリックしAPEXのURLをコピーします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f66303331363261652d393165382d346566322d633731372d3034336131353235616134312e706e67.png

  3. コピーしたURLにアクセスし、APEXの管理サービスにログインします。パスワードはADBの管理者パスワードと同じです(本記事の場合はWelcome12345#)。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f31663761643561392d613635382d346531392d653430392d6162346231373435373930642e706e67.png

  4. ワークスペースの作成をクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f34653464323136382d643431342d393534622d346234352d3165636662633162326134352e706e67.png

  5. 新規のスキーマをクリックし、新規のスキーマにワークスペースを作成します。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f65633862613631302d353632372d623163302d303237302d3062326536653332323762322e706e67.png

  6. 以下の通りに入力し、ワークスペースを作成します。

    • ワークスペース名:APEXDEV
    • ワークスペース・ユーザー名:APEXDEV
    • ワークスペース・パスワード:Welcome12345#
      68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f62616336633332622d333236342d316436632d376637322d3965626566333939663163322e706e67.png
  7. 画面上部にメッセージが表示されます。APEXDEVをクリックし、ワークスペースのサインイン画面へ移動します。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37633366326437642d623635322d383236652d656335612d6262333261643363323665302e706e67.png

  8. 先ほど設定したワークスペースのパスワードを入力します(本記事の場合はWelcome12345#)。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f33633237316261372d336465642d376631392d633564342d3138386536306664623139362e706e67.png

APEXのワークスペースを作成し、ログインする事が出来ました。

2-2. データセットのダウンロード

次に、使用するデータセットをダウンロードします。APEXにはサンプルデータセットが準備されているので、それをダウンロードします。

  1. SQLワークショップ>ユーティリティ>サンプル・データセットをクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37323036616432392d326536642d343866362d353830392d3431356364643965356139362e706e67.png

  2. EMP/DEPTというデータセットをインストールします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f31393461613164372d376437342d303434382d656136362d6364356363636431643832392e706e67.png

  3. 言語で日本語を選択し、へをクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f65343538663630312d396634622d613464612d386435392d6135666362343738336161382e706e67.png

  4. データセットのインストールをクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f31636564613961322d316562392d633164342d666366362d6163303337393763303136612e706e67.png

  5. 終了をクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f33386361663264312d333636322d313735382d666631392d6633303538623138343937662e706e67.png

  6. SQLワークショップ>オブジェクト・ブラウザをクリックします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f38656331616638362d656632352d363833662d623563332d6138343135363933363836302e706e67.png

  7. 表からインストールしたEMP表・DEPT表をクリックし、表を確認します。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f39366164623238342d313062302d336333372d653132312d6230376636363464356637662e706e67.png

これでデータの準備が出来ました。

2-3. SELECT AIを利用するための準備

一旦OCIコンソールに戻って、SELECT AIを利用するための準備を行います。

1.101: ADBインスタンスを作成してみよう3-3. データベース・ユーザーを作成してみよう(コマンドライン)を参考に、Database ActionsのSQLワークシートから以下のSQLを実行し、権限を付与します。

-- SELECT AI機能の利用に必要なパッケージの実行権限を付与
GRANT EXECUTE ON DBMS_CLOUD_AI TO WKSP_APEXDEV;
GRANT EXECUTE ON DBMS_CLOUD TO WKSP_APEXDEV;
OpenAIをAIプロバイダーとして利用する場合

OpenAIをAIプロバイダーとして利用する場合

OpenAIをAIプロバイダーとして利用する場合は、作成されたmoviestreamというユーザーにapi.open.comへのRESTコールを許可する必要があります。
network_acl_admin.png

ネットワーク・アクセス制御リスト(ACL)にアクセス制御エントリ(ACE)を追加し、LLMのRESTエンドポイントへのアクセスを許可します。詳細は、こちらをご参照ください。

以下のコードをコピーし、ワークシートに貼り付けます。ツールバーのスクリプト実行(F5)アイコンをクリックし、コードを実行します。

BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
  HOST         => 'api.openai.com',
  LOWER_PORT   => 443,
  UPPER_PORT   => 443,
  ACE          => xs$ace_type(
      PRIVILEGE_LIST => xs$name_list('http'),
      PRINCIPAL_NAME => 'MOVIESTREAM',
      PRINCIPAL_TYPE => xs_acl.ptype_db));
END;

2. もう一度APEXのワークスペースに戻り、SQLワークショップ>SQLコマンドをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f35373064393264382d336333302d663365352d353764382d3062303738646139366335332e706e67.png

3. DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、OCI生成AIサービスに接続するためのクレデンシャルを作成します。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37393536353365302d333935362d666432352d623336352d3262663333633932336438332e706e67.png

以下の通りにOCID等を置き換え、プロシージャを実行します。

  • credential_name:任意(本チュートリアルではOCI_GENAI_CREDとしています)

  • user_ocid:先ほどメモを取った構成ファイルを参照し、ユーザーのOCIDを入力

  • tenancy_ocid:先ほどメモを取った構成ファイルを参照し、使用しているテナンシーのOCIDを入力

  • private_key:先程取得した秘密キーの内容をコピー&ペースト

  • fingerprint:先ほどメモを取った構成ファイルを参照し、フィンガープリントを入力

    BEGIN
        DBMS_CLOUD.CREATE_CREDENTIAL(
            credential_name => 'OCI_GENAI_CRED',
            user_ocid       => 'ocid1.user.oc1..axxxxxxxxxxxxxxxxq',
            tenancy_ocid    => 'ocid1.tenancy.oc1..aaxxxxxxxxxxxxa',
            private_key     => '-----BEGIN PRIVATE KEY-----
            MIIEvAIBADANBgkqhkiGQEFA<中略>1D3iheu1ct50SB0aIQz9Ow==
            -----END PRIVATE KEY-----',
            fingerprint     => 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx'
        );
    END;
    /
    

これでクレデンシャルを作成する事が出来ました。このクレデンシャルは、この後プロファイルを作成する際に繰り返し使用しますので、credential_nameをメモしておきます。


4. DBMS_CLOUD_AI.CREATE_PROFILEプロシージャを使用して、AIプロファイルを作成します。
  • プロファイル名:GENAI_COHERE_COMMAND_R(任意)

  • provider:oci(本チュートリアルではOCI生成AIサービスをAIプロバイダーとして使用)

  • credential_name:OCI_GENAI_CRED(先ほど作成したクレデンシャル名を指定)

  • model:cohere.command-r-16K(プロバイダーをOCIとし、モデルを指定しない場合は、llama-3が使用されます)

  • oci_apiformat:COHERE(OCIチャットモデルを使用し、Cohereのモデルを指定する場合はoci_apiformatとしてCOHEREと指定)

  • object_list:このプロファイルで使用するスキーマ・オブジェクトの所有者(本チュートリアルではselect_ai_user)とオブジェクト名(本チュートリアルではhighschools_view)を指定

    BEGIN
        DBMS_CLOUD_AI.CREATE_PROFILE(
            'GENAI_COHERE_COMMAND_R',
            '{
                "provider": "oci",
                "credential_name": "OCI_GENAI_CRED",
                "model":"cohere.command-r-16K",
                "oci_apiformat":"COHERE",
                "object_list": [
                        {"owner": "WKSP_APEXDEV", "name": "EMP"},
                        {"owner": "WKSP_APEXDEV", "name": "DEPT"}
                ]
            }'
        );
    END;
    /
    

これでSELECT AIの準備は完了です。

2-4.APEXアプリをインポート

最後にAPEXのアプリをインポートして、SELECT AIをAPEX上で使用できる様にします。

1. アプリケーション・ビルダーで、インポートをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f61353965363934302d373336662d396461302d346531662d6439396566343462333834312e706e67.png

2. 作成済みのAPEXアプリをインポートします。こちらをクリックし、chat-db.sqlというSQLファイルをダウンロードします。

3. ダウンロードしたsqlファイルをドラッグアンドドロップし、次へをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37336135383163392d373165392d653836372d303964632d3433393134333833303961382e706e67.png

4. アプリケーションのインストールをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f62386262663833332d623537642d623361652d666138622d3533343738623832633632622e706e67.png

5. サポートするオブジェクトのインストールもクリックし、表をインポートします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37393439356437362d306233612d386436322d373364322d6364336231666235666165372e706e67.png

6. アプリケーションの実行をクリックし、SELECT AIをAPEXのアプリケーション上で使用してみます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f38353562663538382d353464302d353830382d313139352d3933613130363530646436342e706e67.png

3.Select AIを使ってみる

  1. ワークスペースのユーザー名とパスワードを入力し、ログインします。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f37323134613530392d353038382d653962662d336431622d3038656563343334383462372e706e67.png

  2. 作成したAIプロファイルを選択します。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f31323737636466652d343063322d313765322d646434662d6431646563656130616237322e706e67.png

このアプリケーションでは、インターネットの情報を基に回答してもらうか、データベースのデータを基に回答してもらうかを選択することができます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f34353365313535302d633863312d326164332d303061612d6662393664366466656663632e706e67.png

【インターネットの情報を基に回答】

  • Ask your Databaseのチェックボックスをオフにする
  • AIプロファイル作成時に選択したLLMが、インターネットの情報を基に回答を提供

【データベースのデータを基に回答】

  • Ask your Databaseのチェックボックスをオンにする
  • AIプロファイル作成時に選択したLLMが、メタデータをもとにSQLクエリを作成
  • LLMが作成したSQLクエリを実行し、データベース回答を提供

今回は、インターネットの情報を基に回答してもらう場合データベースのデータを基に回答してもらう場合のそれぞれで同じ質問を聞いてみます。

まずは、インターネットの情報を基に回答してもらう場合です。

3. Ask your Databaseのチェックボックスをオフにし、「フレンチトーストのレシピを教えてください。」とお願いしてみます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f63633338613235372d383061642d363164612d373936302d6633363364633164363063382e706e67.png

LLMが事前に学習したインターネット上の情報を基に、フレンチトーストのレシピを教えてくれました。

4. 次に、「従業員は何名いますか?」と Ask your Databaseのチェックボックスをオフにしたまま質問してみます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f30333934346336642d623437382d363139332d636432332d6261393861343435313536642e706e67.png

Ask your Databaseのチェックボックスをオフにしてあるので、データベース上のデータを参照せずに回答を生成しました。

5. それではデータベースのデータを基に回答してもらいます。Ask your Databaseのチェックボックスをオンにし、同じ質問をしてみます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f65383038393163382d633336622d323463652d646563392d3861626530353034326634322e706e67.png

14と答えが返ってきました。EMP表には従業員のデータが14列格納されているので、正しい回答が返ってきたことが分かります。

6. 次に、「京都のオフィスで働いている従業員一覧」と指示を送ってみます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f62653762343531662d613832332d666431662d343366322d6330316430376538373462622e706e67.png

すると、京都のオフィスで働いている従業員一覧が従業員の名前・社員番号・部署名と共に表示されました。

7. 回答の下にあるExplainをクリックすると、生成されたSQLとその説明が表示されます。
image.png

8. 次に、「給与が2000以上の従業員」と指示を送ってみます。結果の下にあるExploreをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f31326361643431382d346133312d376131312d323537362d6161626431636164386132392e706e67.png

9. Actions>Chartをクリックします。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f64646130373232382d613061642d663432652d643234382d6365656138396632663536622e706e67.png

10. 以下の通りに設定し、保存します。

  • Type:Bar
  • Label:EMPLOYEE_NAME
  • Value:SALARY
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333736323230312f39613964386365652d333338322d386431312d666536312d3133646437343530323436352e706e67.png

11. 自然言語でデータベース内のデータを問い合わせ、その結果をビジュアライズすることも出来ました。
image.png

以上で終了です。他にも色々と試してみて下さい。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?