新增 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 APEX 應用程式內設定 Oracle Digital Assistant 介面,以提供自然語言介面來查詢應用程式 Oracle Autonomous Database 中的資料。
必要條件
-
安裝並熟悉 Oracle Digital Assistant 和 Oracle APEX。
-
Oracle APEX 應用程式必須是支援 Oracle Autonomous Database Select AI 的 Oracle Database 版本。
-
具有「大型語言模型 (LLM)」之證明資料的帳戶,該帳戶會根據使用者輸入產生 SQL。如需此先決條件的指引,請參閱 Mark Hornick 的部落格 Introducing Select AI - Natural Language to SQL Generation on Autonomous Database 。
工作 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 端點進行處理。
工作 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 整合至應用程式。
-
在 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
.
- userId:
-
web-idk.js
:此檔案不需要任何變更,但必須針對每個新版本的 Oracle Digital Assistant 平台進行更新,以符合 Oracle Digital Assistant 的版本。 -
chatbot_style.css
:從頭建立 CSS 檔案以自訂聊天機器人圖示。
-
若要設定要使用的應用程式,請將檔案上傳至靜態應用程式檔案。前往共用元件、使用者介面屬性、JavaScript ,然後輸入
settings.js
和web-sdk.js
的 URL。 -
前往 CSS 頁籤,輸入 CSS 檔案的 URL。
-
在應用程式的全域頁面 0 中,新增在頁面載入時觸發的事件,以呼叫
settings.js
檔案中的initSdk
函數。
執行您的 Oracle APEX 應用程式,它應該在畫面右下方顯示聊天機器人圖示。使用者可以隨時提出自然語言問題!
接下來的步驟
啟用自然語言查詢以將值新增至您的資料
藉由結合三種策略性的 Oracle 技術,您將在應用程式中快速導入實用且可擴充的 AI 功能,並搭配可用於其他應用程式和網站的新聊天機器人。您可以擴展使用 Oracle Autonomous Database Select AI 處理的資料範圍,並整合其他資訊來源,以處理新的 Oracle Digital Assistant 流程。
請前往資料庫專家資源,試用自然語言介面並提供意見回饋給我們。
相關連結
認可
-
作者 - Burt Clouse,Omar Gallardo
-
貢獻者 - Marty Gubar,Mark Hornick,Yuoko Watari
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Add a Natural Language Interface to Oracle APEX Application
G11972-04
October 2024