Oracle APEXアプリケーションへの自然言語インタフェースの追加

イントロダクション

Database Expert Resources (DBExpert Toolkit)サイトを運用しています。このサイトでは、ユーザーがユース・ケースに最適なOracle Database Cloud Serviceを識別するのに役立つ比較情報と対話型ツールが提供されます。最近では、ユーザーがクラウド・サービスに関する質問もできるように、自然言語インタフェースをWebサイトに追加しました。

当社のWebサイトは、Oracle Autonomous Transaction Processing Serverlessデータベース上で実行されているOracle Application Express (Oracle APEX)インスタンスであり、新しいOracle Autonomous Database Select AIが利用可能で、自然言語によるデータとのやり取りを可能にしました。

コンテンツ関連の質問だけでなく、ヘルプのリクエストも正常に処理し、ユーザーのフィードバックを受け入れるために、自然言語問合せのフロントエンドとしてOracle Digital Assistantを選択しました。

このチュートリアルでは、自然言語インタフェースを追加するために実行したタスクの概要を示します。

oracle.com/dbexpertのAskDBExpert

目的

前提条件

タスク1: Oracle Autonomous Database Select AIとLLMの接続

APEXワークスペースの「SQLワークショップ」→「SQLコマンド」で、次のコードを実行して人工知能(AI)プロファイルを作成し、Select AIで使用されるスキーマおよびデータベース・オブジェクトを指定します。このプロファイルはタスク2で使用されます。

このチュートリアルでは、LLMとしてOpenAIを使用しました。

BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI',
password => '...' );
END;

BEGIN
    DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name => 'OPENAI_PROFILE',
        attributes => '{ "provider": "openai",
                        "credential_name": "OPENAI_CRED",
                        "comments":"true", 
                        "object_list": [{"owner": "DB_SCHEMA", "name":"OBJECT_NAME"}]
                    }',
        description => 'AI profile to use OpenAI for SQL translation'
    );
END;

Oracle Autonomous Database Select AI構成を確認するには、次を実行します

select dbms_cloud_ai.generate(
    prompt => 'How many employees work at Oracle?',
    action => 'SHOWSQL',
    profile_name => 'OPENAI_PROFILE'
)
FROM DUAL;

これから、SQL問合せを出力として受け取り、構成を検証する必要があります。

タスク2: REST APIの統合

Oracle Autonomous Database Select AIがデータベース・オブジェクトと連携したら、Oracle Digital Assistantと統合されるREST POSTエンドポイントを作成します。Oracle APEXでこれを作成するには、「SQLワークショップ」→「RESTfulデータ・サービス」を開き、POSTハンドラを使用してモジュールを作成します。モジュール名とPOSTハンドラ名は、タスク3でOracle Digital Assistantを構成するために使用されます。

POSTハンドラは、Oracle Digital Assistantから自然言語の質問を受信し、SQL問合せを取得します。結果のSQL問合せが実行され、出力がデジタル・アシスタントに戻されて表示されます。作成したモジュールのPOSTハンドラに次のコードを貼り付けます。

ヒント: Oracle APEXを使用したRESTfulサービスの詳細は、RESTfulサービスを使用したデータ交換の有効化を参照してください。

DECLARE
    l_response       CLOB;
    l_sql            CLOB;
    l_prompt         VARCHAR2 (4000);
    l_cursor         NUMBER := DBMS_SQL.open_cursor;
    l_profile_name   user_cloud_ai_profiles.profile_name%TYPE :=  'YOUR_PROFILE'; -- the LLM profile you created per (link to Select AI setup)
    p_refcursor      SYS_REFCURSOR;
    l_result         CLOB;
BEGIN

/* 
    The variable name for the 'prompt' parameter below must match the variable used in the 
    Oracle Digital Assistant Flow, in the State that calls the REST endpoint
*/

    l_sql :=
        dbms_cloud_ai.generate (prompt         =>  :l_prompt, 
                                action         => 'showsql',
                                profile_name   => l_profile_name);

    -- check if SQL could be generated.
    BEGIN
        DBMS_SQL.PARSE (l_cursor, l_sql, DBMS_SQL.native);
        l_response := l_sql;
        parse_cursor (l_sql, p_refcursor, l_result);
        if l_result is not null then
            :status := 200;
        else
            raise_application_error(-20987,'No records found');
        end if;
    EXCEPTION
        WHEN OTHERS
        THEN
            :status := 400;
            l_result := 'Something went wrong while processing...'; 
    END;

    APEX_UTIL.PRN (l_result, FALSE);
END;

Oracle APEXの「SQLワークショップ」→「SQLコマンド」で次を実行して、Oracle Autonomous Database Select AIから受信したSQL問合せを実行するプロシージャを作成します。

CREATE OR REPLACE PROCEDURE parse_cursor (p_query    IN     VARCHAR2,
                                          cur        IN OUT SYS_REFCURSOR,
                                          p_result   OUT CLOB)
AS
    curs          INT;
    cols          INT;
    d             DBMS_SQL.desc_tab2;
    val           VARCHAR2 (32767);
    l_row_count   INTEGER := 0;
BEGIN
    OPEN cur FOR p_query;
    curs := DBMS_SQL.to_cursor_number (cur);
    DBMS_SQL.describe_columns2 (curs, cols, d);
    p_result := p_result || '<table> <tr>';
    FOR i IN 1 .. cols
    LOOP
        DBMS_SQL.define_column (curs,
                                i,
                                val,
                                32767);
        p_result := p_result || '<th>' || d (i).col_name || '</th>';
    END LOOP;
    p_result := p_result ||'</tr>';
    WHILE DBMS_SQL.fetch_rows (curs) > 0
    LOOP
        p_result := p_result ||'<tr>';

        FOR i IN 1 .. cols
        LOOP
            DBMS_SQL.COLUMN_VALUE (curs, i, val);
            p_result := p_result ||'<td>' || val || '</td>';
        END LOOP;

        p_result := p_result ||'</tr>';
        l_row_count := l_row_count + 1;
    END LOOP;
    p_result := p_result ||'</table>';
    IF l_row_count = 0
    THEN
        p_result := NULL;
    END IF;

    DBMS_SQL.close_cursor (curs);
END;
/

出力は、Oracle Digital Assistantで使用するために表にフォーマットされます。JSON出力は、アプリケーションごとに別のオプションです。

ノート:このエンドポイントは、複数のOracleデジタル・アシスタント(または同様のアプリケーション)から使用して、Oracle Autonomous Database Select AIによって実行されるデータと処理を活用できます。

タスク3: Oracle Digital Assistantの構成

Oracle Digital Assistantインスタンスでは、データに関する質問を処理するフローを作成しました。追加フローでは、ヘルプ、小規模トークおよびフィードバックの要求を処理します。次のスクリーンショットは、チャットボットをRESTサービスに接続するためにタスク2で作成したRESTエンドポイントに関する情報を使用したOracle Digital Assistantの場所を示しています。

ヒント:このチュートリアルでは、Oracle Digital Assistantの作成および構成は説明しません。詳細は、Oracle Digital Assistantを参照してください。

このフローは、処理のためにユーザー入力をRESTエンドポイントに渡します。

Oracle Digital Assistant APIサービスの構成

Oracle Digital Assistant - RESTサービスのコール用の変数の設定

Oracle Digital Assistant - 変数の詳細の設定

Oracle Digital Assistant - コールRESTサービス

Oracle Digital Assistant - RESTサービス・レスポンスの取得

タスク4: Oracle Autonomous Database Select AIのデータの準備

スキーマには、マッピング表と結合された複数の表が含まれています。これらすべてをLLMに渡すのではなく、ドメイン知識を使用して、必要なすべてのデータ(およびのみ)を含む表を送信し、関連する表を結合するビューを作成しました。このビューは、最新の状態に保つために、ソース表から定期的にリフレッシュされます。

Retrieval Augmented Generation(RAG)の経験を磨く

完全で信頼できるデータをLLMに送信していましたが、アプリケーションが良い結果を生み出すためには、より多くの情報が必要であることがすぐにわかりました。(プロンプト・エンジニアリング迅速にコーディングすることを意味しないことがわかりました。)取得拡張生成(RAG)を使用することで、結果を改善できました。たとえば、データに表されるOracleパッケージ・アプリケーションは、様々な略語および頭字語によって認識され、関連する列についてコメントとして提供されるようになりました。結果を改善するために、このタイプのアクションを検討できます。

タスク5: Oracle APEXアプリケーションへのOracle Digital Assistantの統合

アプリケーションは、Oracle Autonomous DatabaseインスタンスでホストされるOracle APEXインスタンスです。Oracle Digital Assistantをアプリケーションに統合します。

  1. Oracle APEXアプリケーションで、「共有コンポーネント」および「静的アプリケーション・ファイル」に移動します。

    これらの静的アプリケーション・ファイルは、チャットボットの構成および起動に使用されます。

    • settings.js
    • web-sdk.js
    • chatbot_style.css

    ノート: Oracle Digital Assistant (ODA)およびOracle Mobile Cloud (OMC)のダウンロードから、次のOracle Digital Assistantテンプレートをダウンロードします。

    • settings.js:このファイルは、Oracle Digital Assistant構成用です。次の値を更新します。

      • URL: Oracle Digital AssistantインスタンスのURLを入力します。
      • 名前: Oracle APEXアプリケーションのページ・ロード時イベントから参照されるボットの名前をページ0に入力します。
      • チャネルID: Oracle Digital AssistantアプリケーションからコピーされたチャネルIDを入力します。
      • Oracle APEXアプリケーション・ユーザー・セッションを、ユーザーがナビゲートするときに異なるアプリケーション・ページにわたって維持されるボット・インスタンスに結び付けます。
        • userId: document.getElementById("pInstance").value.
    • web-idk.js:このファイルは変更する必要はありませんが、Oracle Digital Assistantのバージョンと一致するように、Oracle Digital Assistantプラットフォームの新しいリリースごとに更新する必要があります。

    • chatbot_style.css: CSSファイルを最初から作成して、チャットボット・アイコンをカスタマイズします。

  2. 使用するようにアプリケーションを構成するには、ファイルを静的アプリケーション・ファイルにアップロードします。「共有コンポーネント」「ユーザー・インタフェース属性」JavaScriptに移動し、settings.jsおよびweb-sdk.jsのURLを入力します。

    アプリケーションのユーザー・インタフェース属性の更新- JavaScript

  3. 「CSS」タブに移動し、CSSファイルのURLを入力します。

    アプリケーションのユーザー・インタフェース属性の更新- CSS

  4. アプリケーションのグローバル・ページ0で、ページ・ロード時に起動するイベントを追加して、settings.jsファイルのinitSdk関数を呼び出します。

    チャットボット初期化用のAPEXアプリケーション・イベント

    チャットボット初期化用のAPEXアプリケーション・イベント・コード

Oracle APEXアプリケーションを実行すると、画面の右下にチャットボット・アイコンが表示されます。ユーザーが自然言語の質問をする準備ができています!

次のステップ

自然言語問合せによるデータへの値の追加の有効化

3つの戦略的なOracleテクノロジを組み合せることで、他のアプリケーションやWebサイトで使用できる新しいチャットボットを使用して、有用で拡張可能なAI機能をアプリケーションにすばやく導入しました。Oracle Autonomous Database Select AIを使用して処理されるデータの範囲を拡大し、新しいOracle Digital Assistantフローを処理するための追加の情報ソースを統合できます。

データベース・エキスパート・リソースにアクセスし、自然言語のインタフェースを試してフィードバックをお寄せください。

oracle.com/dbexpertのAskDBExpert

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。