Autonomous Database: Oracle LiveLabs ワークショップ の Select AI のAPEXデモ環境を作成してみた

■ はじめに
--
:::note warn
本記事は2024年1月時点の作業を元に記載しています
:::
Select AI 機能の情報収集していたところ、Oracle が無償提供している Oracle LiveLabs で Select AI とAPEXデモを作成するワークショップが公開されていたので試してみました。

参考資料:
Oracle LiveLabs: Run Workshop - Chat with Your Data in Autonomous Database Using Generative AI

https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3831

■ 事前に準備するもの
----
- OCIアカウント ※以下のOCI Cloud Free Tier アカウントも可

https://www.oracle.com/jp/cloud/free/

■ 作業の流れ
----
1. OpenAI のアカウント作成とセキュリティ・キーの取得
1. Select AI のデモ・アプリケーション(APEX)を含む ADB の作成
1. LLM(OpenAI)の利用設定 
1. APEXに接続



■ 1. OpenAI のアカウント作成とセキュリティ・キーの取得
---
Lab 1: Start up for Access to Large Langage Model(LLM): Task1: Sign up for Access to a Large Language Model (LLM) を参考に作業をします。

以下のリンクにアクセスして、OpenAIのアカウントを作成します。
https://platform.openai.com/signup?launch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/0be5edb6-3f24-7c6f-409b-68f472e4a14c.png)
※筆者はGoogleアカウントに紐づけしました。

アカウント作成後にOpenAIにログインし、APIページに遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/47442afd-2ecb-4efb-0675-b9f7772c2e48.png)


LiveLabsの画面ショットを参考に画面左のメニューから Setting > Billing にナビゲートして支払情報としてクレジット・カードを登録します。

無料で5ドル分のクレジットが付与されますが、初期費用として最小で5ドルチャージする必要があります。
※単純な検証では十分なクレジットになります。筆者が1か月程度、簡単な検証に使用して$0.33 消費しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/b0f6b51e-218b-515f-4917-c414ff5aa4ee.png)


チャージが完了したら、画面左のメニュー: API Keys に遷移し、"Create new secret key" より OpenAI のシークレット・キーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/7661bae4-9055-3f4f-e766-b6fccf4051a5.png)

任意の名前で登録後、OpenAIのシークレット・キー をコピーし、保存します。

■ 2. Select AI のデモ・アプリケーション(APEX)を含む Autonomous Database の作成
---
・コンパートメントを作成

Lab 1: Start up for Access to Large Langage Model(LLM): Task2: Create an OCI Compartment を参考に、デモ環境を構築するコンパートメントを作成します。

・ADB デモ環境を作成

Lab 1: Start up for Access to Large Langage Model(LLM): Task3: Provision an ADB Instance, Load Data, and Install the Select AI Demo Application を参照しながら、ADBデモ環境を作成します。

最初に"Deploy workshop"のボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/0fa541b0-c248-68ac-5718-2d01badf6a44.png)

クリックすると利用中のOCIアカウントで、Resource Manager の Stack が起動され、"Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration-RM.zip"がロードされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/92f79548-1672-7781-aa97-2d2224f457e4.png)

LiveLabsのガイドに従ってパラメータを設定していきます。"Secret API key to used to connect to AI model"にOpenAIで作成したシークレット・キーを登録することで、ADBがOpenAIに接続することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/29e3c7c6-f8b1-a636-17df-0234e7048181.png)

確認画面で問題がなければ、スタックを適用してデモ環境の作成を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/81db1d63-e019-fe70-3c66-69d8dd2ab24a.png)

リソースマネージャのジョブが起動しますので、完了するのを待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/575cf525-9fda-ee25-435f-131a69c60e0c.png)

完了後、"出力"より以下の情報をコピーし、保存します。
- adb_user_name
- adb_user_password
- select_ai_demo_url

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/466eea64-9b77-b33b-d05e-de911c6c334d.png)


■ 3. LLM(OpenAI)の利用設定 
---
LiveLabsを参考に作成したOCIコンソールからデモ用ADBにアクセスし、Database Actions > SQL を開き、ナビゲータより"MOVIESTREAM"ユーザーを選択し、作業を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/7bb35d70-aaeb-b38e-e2b3-45a08e9bbf8f.png)

- ネットワークACLの設定

以下を実行し、api.openai.com にREST呼び出しを行うためのネットワークACLに "MOVIESTREAM" のプリンシパルを追加します 

```
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;
/
```

- DBMS_CLOUD_AI の権限の付与

以下を実行し、DBMS_CLOUD_AI の実行権限を付与します
```
GRANT EXECUTE ON DBMS_CLOUD_AI TO moviestream
```
- クレデンシャルの作成

dbms_cloud.create_credentialを実行して、LLM APIリクエストのためのクレデンシャルを作成します。
```
BEGIN
    dbms_cloud.create_credential (
        credential_name  => 'OPENAI_CRED',
        username => 'OPENAI',
        password => 'OpenAIで作成したシークレット・キー'
    );
END;
/
```

- AIプロファイルの作成

DBMS_CLOUD_AI.CREATE_PROFILEを実行して、LLM, クレデンシャル, LLMに共有するオブジェクトのリストを含むAIプロファイルを作成します。
```
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;
/
```
※オブジェクトを追加後に、編集して実行することで、AIプロファイルを追加でき、プロファイルを切り替えることでデモで使用するオブジェクトを変更させることができます。

■ 4. APEXに接続
---

ブラウザで select_ai_demo_url にアクセスし、adb_user_name / adb_user_password を使用してログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/d1cdb344-15b4-3338-bf4a-1f92bf763f4d.png)

使用するAIプロファイルの設定が完了するとAPEXデモ環境の"ChatDB"が使用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/ef00d2d1-1355-0714-d4fa-d4ced3ef82f3.png)

Ask a question のプロンプトに質問を入れて実行することで、Select AIを実行することができます。挙動はAsk Database にチェックの有無で変わります。

チェック有: AIプロファイルのオブジェクト・リストを利用してSQL文を作成され実行結果を返してくれます。ExporeやExplaineのリンクで詳細な情報にアクセスできます。

例: What are our top 10 streamed movies

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/1ee4c1df-b0db-f3c2-3102-0e1ffb857449.png)

チェック無: AIプロファイルに選択されてるLLMに対話形式で質問をし、LLMが学習済みの情報を使用して回答を返してくれます。

例: give me a recipe for french toast
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521239/e6152c2e-9568-c064-6363-280393f0cfcd.png)

■ 最後に
――――
LiveLabsをベースに実行した内容でAPEXデモの作成方法としてまとめました、LLMにOpenAIを使用しているので日本語でのやりとりもできことを確認できると思います。

次回は Select AI のデモデータを元にSQL生成結果やその制御についてまとめていきます。