はじめに
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プロバイダーとして使用することが出来ます。
本記事では、OCI生成AIサービスのAPIを使用したいと思います。
OpenAIのAPIキー取得方法はこちら
OpenAIのアカウントを作成
-
OpenAIのアカウントを未取得の方は、こちらからOpenAIのアカウントを作成します。既にOpenAIのアカウントを作成済みの方はログインします。
-
アカウントを作成/ログインしたら、こちらのページに移動します。
クレジットカードを登録
-
本記事のデモで使用するクレジットは1ドル以下となります。現時点ではチャージできる価格は最低5ドルなので、今回は5ドルチャージします。
APIキーの取得
これで、OpenAIのAPIキーを取得する事が出来ました。
2. 環境設定
2-1. ADBインスタンスとAPEXワークスペースの作成
-
Select AIはADBの機能なので、使用にはADBインスタンスが必要です。ADBのインスタンスが未作成の場合は101: ADBインスタンスを作成してみようを参考に、ADBインスタンスを作成します。
ADBインスタンス作成時に、以下の点に注意してください。
- 名前:任意(同一コンパートメント内に、同じ名前のADBインスタンスは作成不可のため注意)
- データベース・バージョンの選択:23ai(19cでも問題ありませんが、23aiの方が新機能を使える為)
- Always Free:オン(無償でお試しいただく場合)
-
コピーしたURLにアクセスし、APEXの管理サービスにログインします。パスワードはADBの管理者パスワードと同じです(本記事の場合はWelcome12345#)。
-
以下の通りに入力し、ワークスペースを作成します。
APEXのワークスペースを作成し、ログインする事が出来ました。
2-2. データセットのダウンロード
次に、使用するデータセットをダウンロードします。APEXにはサンプルデータセットが準備されているので、それをダウンロードします。
これでデータの準備が出来ました。
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コールを許可する必要があります。
ネットワーク・アクセス制御リスト(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コマンドをクリックします。
3. DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、OCI生成AIサービスに接続するためのクレデンシャルを作成します。
以下の通りに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. アプリケーション・ビルダーで、インポートをクリックします。
2. 作成済みのAPEXアプリをインポートします。こちらをクリックし、chat-db.sqlというSQLファイルをダウンロードします。
3. ダウンロードしたsqlファイルをドラッグアンドドロップし、次へをクリックします。
5. サポートするオブジェクトのインストールもクリックし、表をインポートします。
6. アプリケーションの実行をクリックし、SELECT AIをAPEXのアプリケーション上で使用してみます。
3.Select AIを使ってみる
このアプリケーションでは、インターネットの情報を基に回答してもらうか、データベースのデータを基に回答してもらうかを選択することができます。
【インターネットの情報を基に回答】
- Ask your Databaseのチェックボックスをオフにする
- AIプロファイル作成時に選択したLLMが、インターネットの情報を基に回答を提供
【データベースのデータを基に回答】
- Ask your Databaseのチェックボックスをオンにする
- AIプロファイル作成時に選択したLLMが、メタデータをもとにSQLクエリを作成
- LLMが作成したSQLクエリを実行し、データベースが回答を提供
今回は、インターネットの情報を基に回答してもらう場合とデータベースのデータを基に回答してもらう場合のそれぞれで同じ質問を聞いてみます。
まずは、インターネットの情報を基に回答してもらう場合です。
3. Ask your Databaseのチェックボックスをオフにし、「フレンチトーストのレシピを教えてください。」とお願いしてみます。
LLMが事前に学習したインターネット上の情報を基に、フレンチトーストのレシピを教えてくれました。
4. 次に、「従業員は何名いますか?」と Ask your Databaseのチェックボックスをオフにしたまま質問してみます。
Ask your Databaseのチェックボックスをオフにしてあるので、データベース上のデータを参照せずに回答を生成しました。
5. それではデータベースのデータを基に回答してもらいます。Ask your Databaseのチェックボックスをオンにし、同じ質問をしてみます。
14と答えが返ってきました。EMP表には従業員のデータが14列格納されているので、正しい回答が返ってきたことが分かります。
6. 次に、「京都のオフィスで働いている従業員一覧」と指示を送ってみます。
すると、京都のオフィスで働いている従業員一覧が従業員の名前・社員番号・部署名と共に表示されました。
7. 回答の下にあるExplainをクリックすると、生成されたSQLとその説明が表示されます。
8. 次に、「給与が2000以上の従業員」と指示を送ってみます。結果の下にあるExploreをクリックします。
10. 以下の通りに設定し、保存します。
11. 自然言語でデータベース内のデータを問い合わせ、その結果をビジュアライズすることも出来ました。
以上で終了です。他にも色々と試してみて下さい。