新增 Oracle APEX 應用程式的自然語言介面

簡介

我們經營資料庫專家資源 (DBExpert Toolkit) 網站,提供比較資訊和互動式工具,協助使用者找出最適合其使用案例的 Oracle Database Cloud Service。我們最近在網站新增了自然語言介面,因此使用者也可以詢問有關雲端服務的問題。

我們的網站是在 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」。

本教學課程使用 OpenAI 作為 LLM。

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 處理程式中:

秘訣:請參閱使用 RESTful 服務啟用資料交換,瞭解 RESTful 服務與 Oracle APEX 的進一步詳細資訊。

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 Digital Assistants (或類似的應用程式) 使用,以利用 Oracle Autonomous Database Select AI 所執行的資料與處理。

工作 3:設定 Oracle Digital Assistant

在我們的 Oracle Digital Assistant 執行處理中,我們建立了處理資料相關問題的流程。其他流程會處理協助、小對話及意見回饋的要求。下方的螢幕擷取畫面顯示 Oracle Digital Assistant 中的位置,我們使用任務 2 中建立的 REST 端點相關資訊,以便將聊天機器人連線至 REST 服務。

提示:此教學課程不涵蓋建立和設定 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,而建立了結合相關表格的檢視。此檢視會定期從來源表格重新整理,以保持最新狀態。

波蘭取得擴增世代 (RAG) 的經驗

我們很快發現,雖然我們正在將完整且值得信賴的資料傳送至 LLM,但我們的應用程式需要更多資訊才能產生良好結果。(瞭解提示工程不代表快速編碼!)透過使用檢索增強生成 (RAG) ,我們能夠改善成果。例如,我們資料中呈現的 Oracle 套裝應用系統以各種縮寫和縮寫為名,現在提供相關資料欄的註解。您可以考慮此類型的動作來改善結果。

作業 5:將 Oracle Digital Assistant 整合至 Oracle APEX 應用程式

此應用程式是由 Oracle Autonomous Database 執行處理代管的 Oracle APEX 執行處理。將 Oracle Digital Assistant 整合至應用程式。

  1. 在 Oracle APEX 應用程式中,前往共用元件靜態應用程式檔案

    這些靜態應用程式檔案用於設定和調用聊天機器人。

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

    注意:請從此處下載下列 Oracle Digital Assistant 範本:Oracle Digital Assistant (ODA) 和 Oracle Mobile Cloud (OMC) 下載

    • settings.js此檔案用於 Oracle Digital Assistant 組態。更新下列值。

      • URL:輸入 Oracle Digital Assistant 執行處理的 URL。
      • 名稱:輸入第 0 頁之 Oracle APEX Application On Page Load 事件參照的機器人名稱。
      • 通路 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.jsweb-sdk.js 的 URL。

    更新應用程式的使用者介面屬性 - JavaScript

  3. 前往 CSS 頁籤,輸入 CSS 檔案的 URL。

    更新應用程式的使用者介面屬性 - CSS

  4. 在應用程式的全域頁面 0 中,新增在頁面載入時觸發的事件,以呼叫 settings.js 檔案中的 initSdk 函數。

    聊天機器人初始化的 APEX 應用程式事件

    聊天機器人初始化的 APEX 應用程式事件代碼

執行您的 Oracle APEX 應用程式,它應該在畫面右下方顯示聊天機器人圖示。使用者可以隨時提出自然語言問題!

接下來的步驟

啟用自然語言查詢以將值新增至您的資料

藉由結合三種策略性的 Oracle 技術,您將在應用程式中快速導入實用且可擴充的 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