はじめに
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のアカウントを作成
-
OpenAIのアカウントを未取得の方は、こちらからOpenAIのアカウントを作成します。既にOpenAIのアカウントを作成済みの方はログインします。
-
アカウントを作成/ログインしたら、こちらのページに移動します。
1-2. クレジットカードを登録
-
本記事のデモで使用するクレジットは1ドル以下となります。現時点ではチャージできる価格は最低5ドルなので、今回は5ドルチャージします。
1-3. APIキーの取得
これで、OpenAIのAPIキーを取得する事が出来ました。
2. 環境設定
Select AIはADBの機能なので、使用にはADBインスタンスが必要です。
OCI上に使用可能なコンパートメントがない場合は、こちらを参考に、コンパートメントを作成します。
2-1. ADBインスタンスの作成
今回はリソース・マネージャのスタックを使用して、ADBインスタンスを作成します。
リソース・マネージャは、OCI上のリソースのプロビジョニング処理を自動化するサービスです。リソース・マネージャを使用することで、ADBインスタンスの他にも、必要となる全てのリソースをすぐに作成する事が出来ます。
リソース・マネージャーを使用して行うアクション:
- ADBの作成
- moviestreamユーザの作成
- moviestreamスキーマに映画関連の表とビューの作成
- 様々なアクションを実行するために必要な権限の付与
- Select AIを試すことの出来るAPEXアプリケーションのダウンロード
-
こちらをクリックしてスタックを作成する際に使うzipファイルをダウンロードします。
-
立ち上がったスタックの作成画面の入力欄に以下を入力します。
-
次をクリックします。
-
変数の構成の入力欄に以下を入力します。
-
次をクリックします。
-
作成をクリックし、スタックを作成します。
スタックを作成し、ADBインスタンス等を作成するジョブが終わるまで5~10分程かかります。ジョブのステータスが成功になればOKです。
8.左側のリソースの下から、出力をクリックします。
出力に表示されている以下の情報は後程使用するのでメモを取ります。
2-2. ADBとLLMを接続
1.ナビゲーションメニューからOracle database>Autonomous Databaseをクリックします。
2.MovieStreamWorkshopという名前のADBが作成されています。作成したADBをクリックし、ADBの詳細ページへ遷移します。
3.データベース・アクション>SQLをクリックします。
4.ADMINとしてログインしている事を確認し、ナビゲータからMOVIESTREAMを選択します。
5.先ずは、作成されたmoviestreamというユーザーにapi.open.comへのRESTコールを許可します。
ネットワーク・アクセス制御リスト(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のデモアプリケーションへログイン
-
select_ai_demo_url(「2-1. ADBインスタンスの作成」でメモを取ったURL)をWebブラウザに貼り付け、APEXのアプリケーションへアクセスします。
以下のユーザーネームとパスワードを入力し、アプリケーションへログインします。
これで準備が出来ました。
3-2.質問をしてみる
このアプリケーションでは、インターネットの情報を基に回答してもらうか、データベースのデータを基に回答してもらうかを選択することができます。
【インターネットの情報を基に回答】
- Ask your Databaseのチェックボックスをオフにする
- AIプロファイル作成時に選択したLLMが、インターネットの情報を基に回答を提供
【データベースのデータを基に回答】
- Ask your Databaseのチェックボックスをオンにする
- AIプロファイル作成時に選択したLLMが、メタデータをもとにSQLクエリを作成
- LLMが作成したSQLクエリを実行し、データベースが回答を提供
今回は、インターネットの情報を基に回答してもらう場合とデータベースのデータを基に回答してもらう場合のそれぞれで同じ質問を聞いてみます。
まずは、インターネットの情報を基に回答してもらう場合です。
-
Ask your Databaseのチェックボックスをオフにし、「最も配信された映画ランキング上位10作品は何ですか?」と質問をしてみます。
以下の様な結果が表示されました。
次に、データベースのデータを基に回答してもらう場合です。 -
Ask your Databaseのチェックボックスをオンにし、「最も配信された映画ランキング上位10作品は何ですか?」と質問をしてみます。
以下の様な結果が表示されました。インターネットの情報を基に回答を得る場合と同じ様に質問をする事が出来ます。
結果の下にあるExplainをクリックすると、自然言語での質問から生成されたSQLクエリと、その説明を確認する事が出来ます。
結果の下にあるExploreをクリックすると、結果を対話モードレポートで確認する事が出来ます。結果のソート、ダウンロード、フォーマットの変更等をする事が出来ます。
例えば、Actions>チャートと選択すると、チャート形式で結果を表示する事が出来ます。
以上で終了です。他にも色々と試してみて下さい。