LoginSignup
13
10

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

Last updated at Posted at 2024-05-27

はじめに

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

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

LiveLabsのChat with Your Data in Autonomous Database Using Generative AIを参考に、Oracle APEX上で動く、Select AIを使用したアプリケーションを作成します。

【前提条件】

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

【所要時間】
40分程

1. OpenAIでAPIキーの取得

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

本記事では、OpenAIのAPIを使用したいと思います。

1-1. OpenAIのアカウントを作成

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

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

1-2. クレジットカードを登録

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

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

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

1-3. 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. 環境設定

Select AIはADBの機能なので、使用にはADBインスタンスが必要です。

OCI上に使用可能なコンパートメントがない場合は、こちらを参考に、コンパートメントを作成します。

2-1. ADBインスタンスの作成

今回はリソース・マネージャのスタックを使用して、ADBインスタンスを作成します。

リソース・マネージャは、OCI上のリソースのプロビジョニング処理を自動化するサービスです。リソース・マネージャを使用することで、ADBインスタンスの他にも、必要となる全てのリソースをすぐに作成する事が出来ます。

リソース・マネージャーを使用して行うアクション:

  • ADBの作成
  • moviestreamユーザの作成
  • moviestreamスキーマに映画関連の表とビューの作成
  • 様々なアクションを実行するために必要な権限の付与
  • Select AIを試すことの出来るAPEXアプリケーションのダウンロード
  1. こちらをクリックしてスタックを作成する際に使うzipファイルをダウンロードします。

  2. OCIコンソールにログインし、ナビゲーションメニューから開発者サービス>スタックをクリックします。
    スクリーンショット 2024-05-27 112821.png

  3. スタックの作成をクリックすると、スタック作成の画面が表示されます。
    スクリーンショット 2024-05-27 112935.png

  4. 立ち上がったスタックの作成画面の入力欄に以下を入力します。

    • マイ構成>.Zipファイル - 先程ダウンロードした.Zipファイルをドラッグアンドドロップ
      スクリーンショット 2024-05-27 113058.png
    • 「コンパートメントに作成」- 任意(有効な管理権限を持つコンパートメントを選択)
      compartment.png
  5. をクリックします。

  6. 変数の構成の入力欄に以下を入力します。

    • リージョン - 任意(ホーム・リージョン、または、サブスクライブしているリージョンを選択)

    • コンパートメント - 任意(有効な管理権限を持つコンパートメントを選択)
      region.png

    • データベース名 - 任意(同じコンパートメント内に同じ名前のデータベースが既にある場合には、エラーとなるので注意)

    • Always Free Oracle Autonomous Instance - true(Always Freeのリソースを使用して、無償でADBを使用したい場合はtrueに)
      always free.png

    • パスワード - Training4ADW(ADBの管理者ユーザ(adminユーザ)のパスワードとなります。メモを取っておきます)
      password.png

    • Secret API key - OpenAIのAPIキー(「1-3. APIキーの取得」で取得したAPIキー)
      secretkey-oci.png

  7. をクリックします。

  8. 運用の実行 - チェック
    unyou.png

  9. 作成をクリックし、スタックを作成します。
    スタックを作成し、ADBインスタンス等を作成するジョブが終わるまで5~10分程かかります。ジョブのステータスが成功になればOKです。

8.左側のリソースの下から、出力をクリックします。

出力に表示されている以下の情報は後程使用するのでメモを取ります。

  • adb_user_name
  • adb_user_password
  • select_ai_demo_url
    output.png

2-2. ADBとLLMを接続

1.ナビゲーションメニューからOracle database>Autonomous Databaseをクリックします。
navi-menu.png
2.MovieStreamWorkshopという名前のADBが作成されています。作成したADBをクリックし、ADBの詳細ページへ遷移します。
adb.png
3.データベース・アクション>SQLをクリックします。
db-action.png
4.ADMINとしてログインしている事を確認し、ナビゲータからMOVIESTREAMを選択します。
sql.png
5.先ずは、作成された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;

6.moviestreamユーザに、DBMS_CLOUD_AI PL/SQLパッケージを使用するために必要な権限を与えます。以下のコードをコピーし、ワークシートに貼り付けます。

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

GRANT EXECUTE ON DBMS_CLOUD_AI TO moviestream

7.DBMS_CLOUDパッケージを使用して、LLMのAPIリクエストの署名に使用するクレデンシャルを作成します。詳細は、こちらをご参照ください。

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

BEGIN
    dbms_cloud.create_credential (
        credential_name  => 'OPENAI_CRED',
        username => 'OPENAI',
        password => '先程取得したOpenAIのAPIキーを入力'
    );
END;
/

8.DBMS_CLOUD_AIパッケージを使用してAIプロファイルを作成します。LLMプロバイダーと、自然言語クエリで使用できる表などのメタデータを記述します。詳細は、こちらをご参照ください。

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

BEGIN
    DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name => 'openai_gpt35',
        attributes =>
            '{"provider": "openai",
            "credential_name": "OPENAI_CRED",
            "object_list": [{"owner": "MOVIESTREAM", "name": "movies"},
                            {"owner": "MOVIESTREAM", "name": "streams"},
                            {"owner": "MOVIESTREAM", "name": "customer_extension"},
                            {"owner": "MOVIESTREAM", "name": "pizza_shop"},
                            {"owner": "MOVIESTREAM", "name": "actors"},
                            {"owner": "MOVIESTREAM", "name": "genre"},
                            {"owner": "MOVIESTREAM", "name": "customer_segment"},
                            {"owner": "MOVIESTREAM", "name": "customer_contact"}]
            }'
        );
END;
/

9.複数のSelect AIプロファイルを持つことができるので、使用するプロファイルを設定する必要があります。DBMS_CLOUD_AI.SET_PROFILEプロシージャを使用して、セッションで使用するプロファイルを指定します。

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

BEGIN
    DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'openai_gpt35');
END;
/

これで、LLMとADBを接続する事が出来ました。

3.APEX上で試してみる

環境設定が終わったので、APEXのアプリケーション上でSelect AIを試してみたいと思います。

3-1. APEXのデモアプリケーションへログイン

  1. select_ai_demo_url(「2-1. ADBインスタンスの作成」でメモを取ったURL)をWebブラウザに貼り付け、APEXのアプリケーションへアクセスします。

    以下のユーザーネームとパスワードを入力し、アプリケーションへログインします。

    • ユーザーネーム - adb_user_name(「2-1. ADBインスタンスの作成」でメモを取ったユーザーネーム)
    • パスワード - adb_user_password(「2-1. ADBインスタンスの作成」でメモを取ったパスワード)
      image.png
  2. AI settingで、サービスとしてOPENAI_GPT35を選択します。
    openaigpt35.png

これで準備が出来ました。

3-2.質問をしてみる

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

adbchat.png

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

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

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

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

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

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

  1. Ask your Databaseのチェックボックスをオフにし、「最も配信された映画ランキング上位10作品は何ですか?」と質問をしてみます。
    image.png
    以下の様な結果が表示されました。
    image.png

    次に、データベースのデータを基に回答してもらう場合です。
  2. Ask your Databaseのチェックボックスをオンにし、「最も配信された映画ランキング上位10作品は何ですか?」と質問をしてみます。
    image.png

    以下の様な結果が表示されました。インターネットの情報を基に回答を得る場合と同じ様に質問をする事が出来ます。
    image.png

    結果の下にあるExplainをクリックすると、自然言語での質問から生成されたSQLクエリと、その説明を確認する事が出来ます。
    image.png

    結果の下にあるExploreをクリックすると、結果を対話モードレポートで確認する事が出来ます。結果のソート、ダウンロード、フォーマットの変更等をする事が出来ます。
    image.png

    例えば、Actions>チャートと選択すると、チャート形式で結果を表示する事が出来ます。
    image.png

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

13
10
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
10