向 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 Workshop(SQL 工作室)-> SQL Commands(SQL 命令)中,运行以下代码以创建人工智能 (Artificial Intelligence,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 Workshop(SQL 工作室)-> RESTful Data Services(数据服务),然后创建一个包含 POST 处理程序的模块。在任务 3 中,模块名称和 POST 处理程序名称用于配置 Oracle Digital Assistant。
POST 处理程序从 Oracle Digital Assistant 接收自然语言问题并检索 SQL 查询。将执行生成的 SQL 查询,并将输出返回给数字助手以供显示。将以下代码粘贴到您创建的模块的 POST 处理程序中:
提示:有关使用 Oracle APEX 的 RESTful 服务的更多详细信息,请参见 Enabling Data Exchange with RESTful Services 。
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 Workshop(SQL 工作室)-> SQL Commands(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 实例中,我们创建了一个流来处理有关数据的问题。其他流处理请求帮助、小谈话和反馈。下面的屏幕截图显示了 Oracle Digital Assistant 中的位置,我们使用在任务 2 中创建的 REST 端点的相关信息将聊天机器人连接到 REST 服务。
提示:本教程不介绍如何创建和配置 Oracle Digital Assistant。有关更多信息,请参见 Oracle Digital Assistant 。
此流将用户输入传递到 REST 端点进行处理。
任务 4:为 Oracle Autonomous Database Select AI 准备数据
我们的方案包括多个与映射表联接的表。与其将所有这些数据传递给 LLM,不如创建联接相关表的视图,使用我们的领域知识发送包含所有(且仅)必要数据的表。此视图会定期从源表中刷新以保持最新状态。
波兰经验与检索增强生成 (RAG)
我们很快发现,虽然我们向 LLM 发送了完整且可信的数据,但我们的应用程序需要更多信息才能产生良好的结果。(我们了解到, prompt engineering 并不意味着快速编写代码!)通过使用 retrieval augmented Generation (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 应用程序页加载时事件引用的机器人名称。
- 渠道 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 文件以定制聊天机器人图标。
-
要配置要使用的应用程序,请将文件上载到静态应用程序文件。转到 Shared Components(共享组件)、 User Interface Attributes(用户界面属性)、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 流。
转到数据库专家资源并尝试自然语言界面并提供反馈。
相关链接
确认
-
Authors -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 帮助中心。
Add a Natural Language Interface to Oracle APEX Application
G11971-04
October 2024