将生成式AI与APEX应用集成,实现RAG驱动的对话体验

Oracle 云基础设施(OCI)生成式 AI 智能体是一项全托管服务,它将大语言模型(LLM)与检索增强生成(RAG)相结合,从您的企业数据中提供准确、实时的答案。它使用户能够以自然的方式与多样化的知识库进行交互,并为智能虚拟智能体提供支持,提供个性化、上下文感知的客户体验。

Oracle APEX 是全球最受欢迎的低代码应用平台,旨在帮助开发者快速构建和部署安全、可扩展的 Web 和移动应用。它简化了开发流程,让您可以专注于解决业务问题,而 APEX 则处理底层复杂性。

将 OCI 生成式 AI 智能体Oracle APEX 集成,使开发者能够为其应用添加智能的 AI 驱动聊天界面。通过连接到存储在 OCI 对象存储或 Oracle Database 23ai 中的知识库,应用可以为用户提供源自企业数据的准确、上下文感知的回复。

什么是 OCI 生成式 AI 智能体?

OCI 生成式 AI 智能体是一项全托管服务,它将大语言模型与 AI 工具相结合,创建智能虚拟智能体。主要功能包括多轮对话、上下文保留、自定义指令、数据安全防护机制以及可选的人工介入。它支持多种工具,如即用型 SQL 工具、与知识库配合使用的即用型 RAG 工具以及自定义函数调用工具。典型用例涵盖客户支持、财务分析和旅行规划等领域,提供从企业数据源提取的 AI 驱动、上下文感知的回复。更多详情,请访问官方文档

什么是即用型 RAG 工具?

生成式 AI 智能体中的 RAG 工具可从知识库中检索信息,并以自然语言返回相关且上下文感知的回复。

OCI 生成式 AI 智能体 RAG 工具使应用能够通过从知识库中检索信息并生成自然语言答案,提供准确、上下文感知的回复。它支持多种数据接入方式和交互渠道,包括聊天界面和 API。主要功能包括混合搜索能力(词汇和语义)、多轮对话、内容审核选项,以及解释 PDF 中双轴图表和参考表格数据的能力。此外,它还为每个答案提供来源归属,确保透明度和可追溯性。

RAG 工具支持多种知识库数据类型:

  • 服务管理选项:OCI 对象存储文件,最多支持 1,000 个文本和 PDF 文件,每个文件最大 100 MB。

  • 自带(BYO)选项:Oracle Database 23ai 向量搜索和已摄入并建立索引的 OCI Search with OpenSearch 数据。

本文介绍如何通过 OCI 对象存储文件作为知识库,将 OCI 生成式 AI 智能体 RAG 工具与 Oracle APEX 集成。

构建此应用的先决条件

  1. 一个 Oracle 云基础设施账户。
  2. 一个 OCI 分区。您可以使用预配置的租户根分区或创建自己的分区。
  3. 登录用户应具有在此分区中创建和管理自治数据库实例所需的权限。您可以通过 OCI IAM 策略配置这些权限。

集成步骤

  1. 在 OCI 生成式 AI 智能体中创建智能体
  2. 在 OCI 控制台中添加 API 密钥。
  3. 在 Oracle APEX 中创建 Web 凭证。
  4. 使用 Invoke API 在 OCI 对象存储中管理文档
  5. 使用 OCI Ingestion Job REST API 创建摄入作业。
  6. 配置并调用 Create Session REST API
  7. 为聊天界面创建和定制经典报表。
  8. 创建与 OCI 生成式 AI 智能体集成的动态操作

1. 在 OCI 生成式 AI 智能体中创建智能体

要在生成式 AI 智能体服务中创建智能体,请按照以下步骤操作。开始前请确保您具有管理该服务的必要权限。

  1. 导航到 OCI 控制台:打开控制台并选择生成式 AI 智能体可用的区域,如美国中西部(芝加哥)或英国南部(伦敦)。进入智能体列表页面并点击创建智能体。

  2. 在基本信息下,提供以下详细信息:

    • 名称:必须以字母或下划线开头。您可以使用字母、数字、连字符或下划线(1-255 个字符)。
    • 分区:选择存储智能体的位置。
    • 描述:(可选)添加简短描述。
    • 欢迎消息:(可选)设置用户开始聊天时看到的问候语。如果留空,将显示默认消息。
    • 路由指令:(可选)指导如何使用工具。例如:”始终首先使用 SQL 工具。”
    • 标签:(可选)根据需要添加标签。您必须具有标记权限。

    创建智能体第 1 步

    图 1:输入创建智能体的基本信息

  3. 为智能体设置 RAG 工具。

    选择 RAG 工具

    图 2:选择 RAG 工具

    注意:此步骤不会创建工具本身——工具是在智能体设置后创建的。您稍后可以根据需要添加更多工具。

  4. 设置端点(可选):您现在可以为智能体自动创建端点。如果选择这样做,可以启用以下功能:

    • 人工介入:在最终确定回复之前需要人工审核。
    • 内容审核:对输入和输出进行阻止、通知或禁用审核。
    • 提示注入(PI)保护:阻止或通知用户可疑提示。
    • PII 保护:保护用户提示和回复中的个人身份信息。

    设置智能体端点第 1 步

    图 3:设置智能体端点 – 安全防护机制

    设置智能体端点第 2 步

    图 4:设置智能体端点 – 其他

  5. 查看并创建:检查所有详细信息。如果需要更改,请使用上一步按钮更新任何部分。

    查看并创建智能体

    图 5:查看创建智能体详细信息

  6. 准备就绪后,点击创建智能体,接受 Llama 3 许可协议和可接受使用政策,然后提交。

    接受 llama3 协议

    图 6:接受 Llama 3 许可协议

注意:创建生成式 AI 智能体后,要查看智能体详细信息并复制智能体端点 OCID,请转到智能体列表,选择一个智能体,打开资源下的端点选项卡,然后从端点信息部分复制 OCID。

2. 在 OCI 控制台中添加 API 密钥

在 Oracle 云基础设施(OCI)中,API 密钥用于通过 API 安全地访问资源。每个密钥对包括公钥和私钥。您可以在 OCI 控制台中生成密钥对,或上传现有的公钥。

当您通过控制台添加密钥时,它会提供一个配置文件片段,其中包含密钥详细信息:用户 OCID、密钥指纹、租户 OCID、选定区域以及私钥文件的本地保存路径(您需要根据本地保存位置更新此路径)。

点击此处了解如何生成 API 签名密钥对。

3. 在 Oracle APEX 中创建 Web 凭证

要将 OCI 生成式 AI 智能体与 APEX 集成,我们在 APEX 中创建 Web 凭证。Web 凭证用于安全地存储和加密连接到外部 REST 服务或 REST 启用 SQL 服务的认证凭证。

这些凭证存储在工作区级别,可供所有应用访问。我们将使用这些凭证与 OCI 文档理解 API 进行交互。

点击此处了解如何创建 Web 凭证。

创建 web 凭证

图 7:创建 Web 凭证

4. 使用 Invoke API 在 OCI 对象存储中管理文档

在本文中,由于我们使用 OCI 对象存储文件作为知识库,因此在将 APEX 与 OCI 生成式 AI 智能体集成之前,必须先将文档上传到 OCI 对象存储。您可以使用多种方法将文件发送到 OCI 对象存储。我在下面简要介绍两种最有效的方法。

如果您在自治数据库上使用 APEX,可以利用 DBMS_CLOUD 包中提供的 PUT_OBJECT 过程。此过程已重载。该过程以某种形式将文件从 Oracle 数据库或 APEX 复制到云对象存储。

另一种适用于 APEX 实例托管位置的选项是使用 OCI 提供的 REST API。我们必须创建一个页面流程来处理文件上传到对象存储的逻辑。

要处理文件上传逻辑,请导航到应用页面的处理选项卡并使用 Invoke API 流程类型创建新流程。设置以下配置:

  • 流程类型:Invoke API
  • 设置 > 类型:PL/SQL 包
  • 包:OCI_OBJECT_STORAGE_UTILS
  • 过程或函数:UPLOAD_FILE

UPLOAD_FILE 过程接受一个输入参数并返回三个输出参数。确保将每个参数映射到表单中的相应页面项。点击 此处 下载 OCI_OBJECT_STORAGE_UTILS 包。

上传文档流程

图 8:上传文档流程

5. 使用 OCI Ingestion Job REST API 创建摄入作业

创建数据源时,您需要指定数据文件的位置。要使这些文件可供智能体使用,必须将它们下载到智能体关联的知识库中,这个过程称为数据摄入。数据摄入是一个从数据源文档中提取数据、将其转换为适合分析的结构化格式,然后存储到知识库中的过程。

您可以通过聊天界面或 API 与服务交互,并使用 生成式 AI 智能体 API 管理所有关键组件,如智能体、数据源、知识库和端点。

要了解有关如何创建数据摄入作业的更多信息,请参阅 API 文档页面。

在前面的步骤中,我们了解了 OCI 生成式 AI 智能体数据摄入 REST API 的工作原理。现在,我们可以继续在 Oracle APEX 中创建一个 REST 数据源,该数据源连接到 OCI 数据摄入 REST API 端点

REST 数据源将使用以下参数设置:

对 OCI 生成式 AI 智能体数据摄入作业 CreateDataIngestionJob 的请求是 HTTP POST 请求。因此,请使用以下设置更新 POST 操作:

  1. 使用适当的替换标签编写请求正文模板。

    1
    2
    3
    4
    5
    6
    {
    "dataSourceId": "#DATASOURCEID#",
    "compartmentId": "#COMPARTMENTID#",
    "displayName": "#DISPLAYNAME#",
    "description": "#DESCRIPTION#"
    }
  2. 对于操作参数,使用 与正文同步 按钮获取请求正文模板中定义的所有替换作为参数。

  3. 此外,创建两个操作参数:

    1. RESPONSE(响应正文)——用于保存 POST 请求的 JSON 响应
    2. Content-Type(HTTP 头)——可以是静态值,默认为 application/json

成功配置 REST 数据源后,就可以在发票上传时从页面流程调用它。

创建 Ingestion Job API 1

图 9:创建 IngestionJob REST API

创建 ingestion job API 第 2 步

图 10:为 IngestionJob API 配置 POST 操作

5.1. 通过页面流程调用数据摄入作业 REST 数据源

文档安全存储在对象存储中后,我们将使用 OCI 生成式 AI 智能体数据摄入 REST 数据源,使这些文件可供智能体使用。为此,我们可以使用 Invoke API 流程类型。

创建第二个名为 Invoke Data Ingestion REST API 的流程,具有以下属性:

  1. 流程类型:Invoke API
    设置 > 类型:REST 源
    REST 源:(选择上面创建的 REST 数据源)
    操作:POST。为此 REST 数据源定义的所有操作参数都显示在左侧窗格中,适当的项会自动默认分配。选择每个参数并验证它们。对于 Response,按如下方式分配值:

    • RESPONSE:OCI 生成式 AI 智能体数据摄入 REST 数据源调用将返回 JSON 响应,可以使用 OUT 参数捕获。您应该关闭”忽略输出”属性以实现这一点。这样做可以将输出存储到页面项中,例如 P5_ING_RESPONSE,并访问响应以进行进一步处理。
  2. 创建第三个流程,解析响应,该流程现在可以解析存储在页面项 P5_ING_RESPONSE 上的响应,并使用从数据摄入作业 REST API 返回的会话 ID 更新页面项。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT jt.Status, jt.job_id
    into :P5_INGESTION_RESPONSE, :P5_DATA_ING_JOB_ID
    FROM JSON_TABLE(
    :P5_ING_RESPONSE,
    '$'
    COLUMNS (
    Status VARCHAR2(50) PATH '$.lifecycleState',
    job_id varchar2(300) PATH '$.id'
    )
    ) jt

调用 Ingestion Job

图 11:从页面流程调用 Ingestion Job API

专业提示: 使用 Oracle APEX 自动化通过 GetDataIngestionJob API 定期检查摄入作业状态,并自动更新您的数据库表。

6. 了解用于聊天会话的 OCI 生成式 AI 客户端 API

OCI 生成式 AI 智能体支持多种数据接入方式,然后允许您和您的客户使用聊天界面或 API 与数据进行交互。使用生成式 AI 智能体客户端 API 创建和管理客户端聊天会话。

会话是通过 API 在用户和智能体之间发起的交互式对话。它由一系列交换组成,其中用户提交提示,智能体以相关信息或操作响应。会话在整个交互过程中保持上下文,以确保连贯和持续的回复,有效支持无缝的用户体验。

本指南涵盖聊天工作流中涉及的两个主要 API:

  1. 创建聊天会话
  2. 向智能体发送消息

6.1. 创建聊天会话

聊天会话有助于保持用户和智能体之间对话的上下文。这对于用户提出后续问题的多轮交互至关重要。

要创建会话,请使用以下端点:

1
POST /20240531/agentEndpoints/{agentEndpointId}/sessions

请求正文:

1
2
3
4
{
"displayName": "Support Chat",
"description": "Session for customer support"
}
  • 将 {agentEndpointId} 替换为您的智能体端点 OCID。
  • 您可以在 OCI 控制台的 智能体端点 信息选项卡中找到 OCID
  • 响应将包含 sessionId,这是发送带有上下文的消所需的。

6.2. 向生成式 AI 智能体发送消息

创建会话后,您可以使用以下 API 开始与智能体聊天:

1
POST /20240531/agentEndpoints/{agentEndpointId}/actions/chat

请求正文:

1
2
3
4
5
{
"sessionId": "ocid1.generativeai.session.oc1..example",
"shouldStream": true,
"userMessage": "What are the latest project updates?"
}
  • sessionId 是可选的。如果省略,聊天将是无状态的,不会保留任何先前的上下文。
  • shouldStream 让您控制是否实时流式传输响应。
  • userMessage 是发送给智能体的输入。

要了解有关生成式 AI 智能体客户端 API 的更多信息,您可以参阅此处的文档。

7. 配置并调用 Create Session REST API

在前面的步骤中,我们了解了 OCI 生成式 AI 智能体 Create Session REST API 的工作原理。现在,我们可以继续在 Oracle APEX 中创建一个 REST 数据源,该数据源连接到 OCI Create Session REST API 端点

REST 数据源将使用以下参数设置:

REST 数据源类型:Oracle 云基础设施(OCI)
URL 端点https://agent-runtime.generativeai.us-chicago-1.oci.oraclecloud.com/20240531/agentEndpoints/:agentEndpointId/sessions
认证:使用上一篇博客文章中创建的 web 凭证。

对 OCI 生成式 AI 智能体客户端 CreateSession 的请求是 HTTP POST 请求。因此,请使用以下设置更新 POST 操作:

  1. 使用适当的替换标签编写请求正文模板。

    1
    2
    3
    4
    {
    "displayName": "#AGENT_NAME#",
    "description": "#DESCRIPTION#"
    }
  2. 对于操作参数,使用 与正文同步 按钮获取请求正文模板中定义的所有替换作为参数。

  3. 此外,创建两个操作参数:

    1. RESPONSE(响应正文)——用于保存 POST 请求的 JSON 响应
    2. Content-Type(HTTP 头)——可以是静态值,默认为 application/json

成功配置 REST 数据源后,就可以从预渲染页面流程调用它。

创建智能体会话 API

图 12:创建生成式 AI 智能体会话 REST API

7.1. 通过页面流程调用 OCI 生成式 AI 智能体 Create Session REST 数据源

要直接从 APEX 页面与 OCI 生成式 AI 智能体创建会话,您将创建一个预渲染 -> 页头之前流程,类型为 Invoke API。首先,确保我们有 Create Session API。然后,在预渲染 > 页头之前下添加新流程,选择 Invoke API,将类型设置为 REST 源,并选择 Create Session API 作为源,操作为 POST。对于 RESPONSE 参数,取消选中 忽略输出 以捕获响应,并将其映射到页面项,如 P2_RESPONSE_SESSION

要从 JSON 响应中提取会话 ID,创建一个隐藏页面项 P2_SESSION_ID,并使用此 SQL 查询作为其默认值:

1
2
3
4
5
6
7
8
SELECT
ID
FROM
JSON_TABLE(:P2_RESPONSE_SESSION, '$'
COLUMNS (
ID VARCHAR2(4000) PATH '$.id'
)
) JT;

此查询从 JSON 响应中提取 ID 字段并将其存储在 P2_SESSION_ID 中,允许您的应用重复使用会话与生成式 AI 智能体聊天 API 交互。

调用会话 API BH

图 13:从预渲染流程调用 Create Session API

8. 为聊天界面创建和定制经典报表

要在 Oracle APEX 中创建聊天机器人风格的界面,请使用经典报表区域,在经典报表属性下,将 外观 > 模板 设置为 评论。此模板将每行格式化为聊天消息,带有用户图标和消息气泡。

以下是一个驱动聊天界面的示例 SQL 查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT
CONV_ID, -- 对话 ID
USER_NAME, -- 评论者姓名
COMMENT_TEXT, -- 消息/AI 回复内容
COMMENT_DATE, -- 评论时间戳
-- 用户头像首字母
APEX_STRING.GET_INITIALS(USER_NAME) AS USER_ICON,
-- 为 AI 智能体回复显示查看引用
CASE IS_OWN
WHEN 'Yes' THEN NULL
ELSE 'View Citations'
END AS ACTIONS,
-- 为自己的评论显示"编辑"链接以编辑用户提示
CASE IS_OWN
WHEN 'Yes' THEN
'<a href="#" class="set-value" data-ct="'
|| REPLACE(COMMENT_TEXT, '"', '"')
|| '">Edit</a>'
ELSE NULL
END AS ACTIONS_2,
NULL AS ATTRIBUTE_1,
NULL AS ATTRIBUTE_2,
NULL AS ATTRIBUTE_3,
NULL AS ATTRIBUTE_4,
-- 自己评论的 CSS 类
CASE IS_OWN
WHEN 'Yes' THEN 't-Chat--own'
ELSE NULL
END AS COMMENT_MODIFIERS
FROM
RAG_CHATBOT
WHERE
SESSION_ID = :P2_SESSION_ID
ORDER BY
COMMENT_DATE ASC

此查询从 RAG_CHATBOT 表中提取消息并添加一些增强功能:

  • 使用 apex_string.get_initials 显示用户首字母。
  • 根据消息所有权条件显示”查看引用”或”编辑”等操作。
  • comment_modifiers 列将 t-Chat–own 类应用于突出显示当前用户的消息。

8.1. 样式

模板使用内置的 APEX CSS:

  • t-Chat 提供基础聊天布局。
  • t-Chat–own 样式发送者为当前用户的消息,通常右对齐并使用不同的背景。

创建经典报表

图 14:创建和定制经典报表

8.2. 为提示添加页面项和提交按钮

为了改善聊天界面的布局和可用性,我们将添加一个子区域,将有组织的提示输入字段和发送按钮组合在一起。这有助于将相关的 UI 元素分组在一起,使界面更整洁、更易于管理。

Chat with OCI Generative AI Agent 下创建一个名为 Buttons 的子区域。然后,在属性编辑器中将子区域配置如下:

  • 类型:静态内容
  • 模板:带属性的空白

此新子区域将包含 提示输入 字段和 发送 按钮。

8.3. 添加提示输入字段

在 Buttons 子区域内,使用以下设置创建新页面项:

  • 名称:P1_PROMPT
  • 类型:文本字段
  • 占位符:输入您的消息…

此文本字段允许用户输入他们的消息。文本消息 模板和 尺寸提供了现代、宽敞的输入区域,与聊天界面风格一致。

创建输入提示的项

图 15:添加提示输入项

8.4. 添加发送按钮

在 Buttons 子区域内,添加具有以下属性的新按钮:

  • 名称:Send
  • 图标:fa-arrow-circle-up
  • 静态 ID:call-genai-agents

此按钮将在点击时触发聊天逻辑,将用户的消息发送给生成式 AI 智能体。

创建发送按钮

图 16:添加调用生成式 AI 智能体的发送按钮

9. 创建与 OCI 生成式 AI 智能体集成的动态操作

在此步骤中,我们将设置在 发送 按钮上的动态操作,使您的 Oracle APEX 应用能够将用户输入发送给 AI 智能体,保存对话并无缝显示 AI 的回复。

9.1. 将用户消息保存到数据库

在发送按钮上创建动态操作,仅当用户在输入字段 (P1_PROMPT) 中输入内容时运行,并使用 PL/SQL 块将用户的输入/提示插入 RAG_CHATBOT 表。这会存储用户的消息以及当前会话详细信息,帮助维护对话历史。

  • 添加 True 操作 并设置:
    • 标识 > 操作:执行服务器端代码

    • PL/SQL 代码

      1
      2
      3
      4
      5
      6
      7
      8
      insert into RAG_CHATBOT (
      user_name, is_own, comment_text, comment_date,
      session_ID
      )
      values (
      :APP_USER, 'Yes', :P1_PROMPT, sysdate,
      :P1_SESSION_ID
      );

智能体动态操作一

图 17:创建动态操作以将用户提示插入数据库

注意:为了表示系统正在处理请求,创建另一个动态操作以刷新经典报表区域并添加加载旋转器。这种视觉反馈让用户在 AI 生成回复时保持知情。

9.2. 将用户提示发送给 AI 智能体并处理响应

关键步骤是调用 AI 智能体的 REST API 端点。为发送按钮创建另一个类型为 执行服务器端代码 的动态操作。PL/SQL 块构造一个包含 会话 ID用户提示 的 JSON 负载,然后向 AI 服务执行 POST 请求。AI JSON 响应被解析并作为 AI 回复插入回 RAG_CHATBOT 表中,确保对话保持连续。

除了 AI 的文本回复外,PLSQL 代码还将 AI 提供的任何引用或文本参考插入到专用的 RAG_CITATIONS 表中。

智能体动态操作二

图 18:创建动态操作以调用 OCI 生成式 AI 智能体聊天 API

注意:添加一个 True 操作以执行 JavaScript,刷新聊天区域,清除并重新聚焦输入字段,重新启用它,并移除任何加载覆盖层以完成交互周期。

您可以从这里下载上述演示应用的导出:APEX-OCI-AI-Agents.zip

结论

将 OCI 生成式 AI 智能体Oracle APEX 集成,将对话式 AI 的强大功能直接带入您的应用中,使用您自己的企业数据。它使您能够构建智能的、基于聊天的界面,实时响应上下文感知的答案,无需深入的 AI 专业知识或复杂的后端系统。

有用资源

  • APEX + AI = Awesome! 网页上了解更多关于 AI 基础设施、AI 驱动应用以及使用 AI 的 Oracle APEX 客户信息。
  • 敬请期待实践实验室和示例应用

作者

Roopesh Thokala 的头像

Roopesh Thokala

Oracle APEX 首席产品经理

Roopesh Thokala 是 Oracle APEX 的首席产品经理。他负责 APEX 的产品管理活动,包括自治数据库上的 APEX 以及 OCI 和多云上的 APEX 服务,重点关注 JAPAC 地区。他在客户宣传方面表现出色,并为及时解决客户问题而自豪。在加入 APEX 团队之前,Roopesh 曾担任 APEX 开发者、解决方案工程师和解决方案架构师。他还积极支持整个 JAPAC 地区的各种 Oracle APEX 用户组。

上一篇文章

MCP + AI:帮助您将 Oracle Forms 应用现代化为 Oracle APEX

Monica Godoy | 2 分钟阅读

下一篇文章

Women in Oracle APEX 2026 @ Hyderabad:赋能创新、领导力和社区

Apoorva Srinivas | 2 分钟阅读


原文链接:Integrating OCI Generative AI Agents with Oracle APEX Apps for RAG-powered conversational experience