DBMS_CLOUD_AI 程序包

带有 Select AI 的 DBMS_CLOUD_AI 程序包可促进和配置自然语言提示的转换,以生成、运行和解释 SQL 语句。此外,还支持检索增强生成和基于自然语言的交互,包括与 LLM 聊天。

先决条件

您的组管理员必须使用 NAT 网关配置出站连接,如下所述:
  • 按照 Oracle Cloud Infrastructure 文档中的创建 NAT 网关中的说明,在 Autonomous Database 资源所在的虚拟云网络 (Virtual Cloud Network,VCN) 中创建 NAT 网关。
  • 创建 NAT 网关后,向 每个子网(在 VCN 中)添加路由规则和出站安全规则,Autonomous Database 资源位于其中,以便这些资源可以使用网关从 Azure AD 实例获取公钥:
    1. 转到子网的子网详细信息页。
    2. 子网信息选项卡中,单击子网的路由表的名称以显示其路由表详细信息页。
    3. 在现有路由规则表中,检查是否已存在具有以下特征的规则:
      • 目标:0.0.0.0/0
      • 目标类型:NAT 网关
      • 目标:刚在 VCN 中创建的 NAT 网关的名称

      如果不存在此类规则,请单击添加路由规则并添加具有这些特征的路由规则。

    4. 返回到子网的子网详细信息页。
    5. 在子网的安全列表表中,单击子网的安全列表的名称以显示其安全列表详细信息页。
    6. 在侧边菜单的资源下,单击出站规则
    7. 在现有出站规则表中,检查是否已存在具有以下特征的规则:
      • 目标类型: CIDR
      • 目标:0.0.0.0/0
      • IP 协议: TCP
      • 源端口范围: 443
      • 目标端口范围:全部

      如果不存在此类规则,请单击添加出站规则并添加具有这些特征的出站规则。

环境中的 HTTP 代理设置必须允许数据库访问云服务提供商。

这些设置由组管理员在创建 Exadata Cloud@Customer 基础结构时定义,如 Using the Console to Provision Exadata Database Service on Cloud@Customer 中所述。

注意:

只有在 Exadata 基础结构处于 Requires Activation 状态之前,才能编辑包括 HTTP 代理的网络配置。一旦激活,就无法编辑这些设置。

为已预配的 Exadata 基础结构设置 HTTP 代理需要在 My Oracle Support 中创建服务请求 (SR)。有关详细信息,请参见在 My Oracle Support 中创建服务请求

DBMS_CLOUD_AI 子程序摘要

本节介绍 Autonomous Database 随附的 DBMS_CLOUD_AI 子程序。

子程序 说明

CREATE_PROFILE 过程

此过程创建新的 AI 概要文件,用于将自然语言提示转换为 SQL 语句。

DISABLE_PROFILE 过程

此过程会禁用当前数据库中的 AI 配置文件。

DROP_PROFILE 过程

此过程会删除现有的 AI 配置文件。

ENABLE_PROFILE 过程

此过程允许在当前数据库中使用 AI 配置文件。

GENERATE 函数

此函数使用 AI 生成 SQL 语句进行转换。

SET_ATTRIBUTE 过程

此过程设置 AI 配置文件属性。

SET_PROFILE 过程

此过程为当前数据库设置 AI 概要文件。

CREATE_PROFILE 过程

该过程将创建一个新的 AI 概要文件,用于将自然语言提示转换为 SQL 语句。

语法

DBMS_CLOUD_AI.CREATE_PROFILE
   profile_name        IN  VARCHAR2,
   attributes          IN  CLOB      DEFAULT NULL,
   status              IN  VARCHAR2  DEFAULT NULL,
   description         IN  CLOB      DEFAULT NULL
);

参数

Parameter (参数) 说明

profile_name

AI 配置文件的名称。概要文件名称必须遵循 Oracle SQL 标识符的命名规则。配置文件名称的最大长度为 125 个字符。

此项是必需参数。

attributes

配置文件属性采用 JSON 格式。有关更多详细信息,请参见 AI Profile Attributes

默认值为空值。

status

概要信息的状态。

默认值为启用。

description

AI 配置文件的说明。

默认值为空值。

范例

BEGIN
     DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name    => 'OpenAI,
          attributes      => JSON_OBJECT('provider' value 'openai',
                                         'credential_name' value 'openai_cred'),
          description     => 'AI profile to use OpenAI for SQL translation'
     );
END;
/

DROP_PROFILE 过程

该过程将删除现有的 AI 配置文件。如果配置文件不存在,则该过程将引发错误。

语法

DBMS_CLOUD_AI.DROP_PROFILE(
       profile_name        IN   VARCHAR2,
       force               IN   BOOLEAN DEFAULT FALSE
 );

参数

Parameter (参数) 说明

profile_name

AI 概要文件名

force

如果为 TRUE,则当 AI 配置文件不存在时,该过程将忽略错误。

此参数的默认值为 FALSE

范例

BEGIN
     DBMS_CLOUD_AI.DROP_PROFILE(profile_name => 'OPENAI');
END;
/

使用说明

使用 force 删除配置文件,如果 AI 配置文件不存在,则忽略错误。

ENABLE_PROFILE 过程

此过程启用用户指定的 AI 配置文件。该过程将 AI 配置文件的状态更改为 ENABLED

语法

DBMS_CLOUD_AI.ENABLE_PROFILE(
     profile_name         IN   VARCHAR2
 );

参数

Parameter (参数) 说明

profile_name

要启用的 AI 配置文件的名称

此参数是必需的。

启用 AI 配置文件的示例

BEGIN
     DBMS_CLOUD_AI.ENABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

DISABLE_PROFILE 过程

此过程将禁用当前数据库中的 AI 配置文件。此过程会将 AI 配置文件的状态更改为 DISABLED

语法

DBMS_CLOUD_AI.DISABLE_PROFILE(
      profile_name  IN  VARCHAR2
);

参数

Parameter (参数) 说明

profile_name

AI 配置文件的名称。

此参数是必需的。

范例

BEGIN
     DBMS_CLOUD_AI.DISABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

SET_ATTRIBUTE 过程

使用此过程可以设置 AI 配置文件属性。

语法

DBMS_CLOUD_AI.SET_ATTRIBUTE(
      profile_name         IN   VARCHAR2,
      attribute_name       IN   VARCHAR2,
      attribute_value      IN   CLOB
);

参数

只有所有者可以设置或修改 AI 配置文件的属性。有关受支持属性的列表,请参见 Profile Attributes

Parameter (参数) 说明

profile_name

要为其设置属性的 AI 配置文件的名称。

此参数是必需的。

attribute_name

AI 概要信息属性的名称

此参数是必需的。

attribute_value

配置文件属性的值。

默认值为空值。

范例

BEGIN
 DBMS_CLOUD_AI.SET_ATTRIBUTE(
   profile_name    => 'OPENAI',
   attribute_name  => 'credential_name',
   attribute_value => 'OPENAI_CRED_NEW'
 );
END;
/

SET_PROFILE 过程

此过程为当前会话设置 AI 配置文件。

为数据库会话设置 AI 概要文件后,前缀为 SELECT AI 的任何 SQL 语句都被视为自然语言提示。根据使用 AI 前缀指定的操作,将使用 AI 生成响应。要使用 AI 前缀,请参见 Use AI Keyword to Enter Prompts 。(可选)可以通过以 JSON 格式指定概要信息属性来覆盖或修改属性。有关设置属性的信息,请参见SET_ATTRIBUTE Procedure

仅当 AI 配置文件的所有者是会话用户时,才能为当前会话设置 AI 配置文件。

要为特定数据库用户的所有会话或数据库中的所有用户会话设置 AI 概要文件,请考虑对特定用户或整个数据库上的 AFTER LOGON 事件使用数据库事件触发器。有关详细信息,请参阅 Oracle Database 19c Database PL/SQL Language ReferenceOracle Database 23ai Database PL/SQL Language Reference 中的 CREATE TRIGGER Statement

语法

DBMS_CLOUD_AI.SET_PROFILE(
    profile_name      IN  VARCHAR2,
);

参数

Parameter (参数) 说明

profile_name

当前会话中 AI 配置文件的名称。

此参数是必需的。

范例


   BEGIN
        DBMS_CLOUD_AI.SET_PROFILE(
          profile_name    => 'OPENAI'
        );
   END;
   /

GENERATE 函数

此功能以无状态方式提供 AI 转换。通过现有 AI 配置文件,可以使用此功能执行支持的操作,例如 showsqlnarratechat。默认操作为 showsql

使用此函数也可以覆盖部分或全部配置文件属性。

语法

DBMS_CLOUD_AI.GENERATE(
    prompt          IN  CLOB,
    profile_name    IN  VARCHAR2 DEFAULT NULL,
    action          IN  VARCHAR2 DEFAULT NULL,
    attributes      IN  CLOB     DEFAULT NULL
) RETURN CLOB;

参数

Parameter (参数) 说明

prompt

自然语言提示使用 AI 进行翻译。

提示符可以包含 SELECT AI <action> 作为前缀。该操作还可以作为“操作”参数单独提供。提示中提供的 action 覆盖 "action" 参数。默认操作为 showsql

此参数是必需的。

profile_name

AI 概要文件名。如果已在使用 DBMS_CLOUD_AI.SET_PROFILE 的会话中设置了 AI 配置文件,则此参数是可选的。

默认值为空值。

以下情况适用:
  • 如果在当前会话中设置了配置文件,则用户可以在 DBMS_CLOUD_AI.GENERATE 函数中省略 profile_name 参数。
  • 如果在 DBMS_CLOUD_AI.GENERATE 函数中提供了 profile_name 参数,则它将使用 DBMS_CLOUD_AI.SET_PROFILE 过程覆盖会话中设置的任何值。
  • 如果在会话中未使用 DBMS_CLOUD_AI.SET_PROFILE 过程设置配置文件,则必须在 DBMS_CLOUD_AI.GENERATE 函数中提供 profile_name 参数。

注意:

对于 Database Actions,可以在 DBMS_CLOUD_AI.GENERATE 中指定 profile_name 参数,也可以将两个步骤作为 PL/SQL 脚本运行:DBMS_CLOUD_AI.SET_PROFILEDBMS_CLOUD_AI.GENERATE
EXEC DBMS_CLOUD_AI.set_profile('OPENAI');

-----------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'showsql')
FROM dual;

------------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'narrate')
FROM dual;
-------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'what is oracle autonomous database',
                              profile_name => 'OPENAI',
                              action       => 'chat')
FROM dual;
有关详细信息,请参阅在代码编辑器中执行 SQL 语句
action

使用 AI 转换自然提示的操作。支持的操作包括 showsql(默认)、narratechatUse AI Keywords to Enter Prompts 中包括了操作说明。

注意:

此函数不支持 runsql 操作。如果提供 runsql 操作,则会返回以下错误:
ORA-20000: runsql action is not supported by generate function ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line xxxx 
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 2696 ORA-06512: at line x
attributes 通过提供 JSON 格式的属性来覆盖特定的 AI 配置文件属性。有关更多详细信息,请参见 Profile Attributes

示例

以下示例说明了可与 DBMS_CLOUD_AI.GENERATE 函数一起使用的 showsqlnarratechat 操作。

具有 showsql 操作的示例如下所示:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'showsql')
FROM dual;

具有 narrate 操作的示例如下所示:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'narrate')
FROM dual;

具有 chat 操作的示例如下所示:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'what is oracle autonomous database',
                              profile_name => 'OPENAI',
                              action       => 'chat')
FROM dual;

概要信息属性

AI 配置文件的属性有助于管理和配置 AI 配置文件的行为。某些属性是可选的,具有默认值。

属性

属性名称 说明

azure_deployment_name

Azure OpenAI 服务部署模型的名称。名称只能包含字母数字字符、下划线字符 (_) 和连字符 (-) 字符。名称不能以下划线 (_) 或连字符 (-) 结尾。要了解如何获取 azure_deployment_name,请参阅创建和部署 Azure OpenAI 服务资源

azure_resource_name

Azure OpenAI 服务资源的名称。资源名称只能包含字母数字字符和连字符,并且不能以连字符开头或结尾。要了解如何获取 azure_resource_name,请参阅创建和部署 Azure OpenAI 服务资源

comments

在元数据中包括用于使用 AI 转换自然语言提示的列注释。支持 BOOLEAN 数据类型。对于具有 VARCHAR2 数据类型的字符串,有效值为 TRUEFALSE

注意:

设置单个属性时,布尔值不适用于 DBMS_CLOUD_AI.SET_ATTRIBUTE 过程,因为 attribute_value 参数的数据类型为 CLOB

conversation

一个 VARCHAR2 属性,指示是否为概要信息启用对话历史记录。只有 OpenAI 和 Azure OpenAI 服务支持对话历史记录。有效值为 truefalse。默认值为 false。这些值不敏感。

credential_name

用于访问 AI 提供程序 API 的身份证明的名称。

可以使用 bearer 标记创建身份证明,方法是使用提供程序名称作为用户名,使用 bearer 标记作为密码。

这是一个必需的属性。请参见CREATE_CREDENTIAL 过程

max_tokens

表示每代要预测的标记数。默认值为 1024。有关更多详细信息,请参见 Tokens and Tokenizers

model

用于生成响应的 AI 模型的名称。

支持的型号:

  • OpenAI :gpt-4、gpt-4-0613、gpt-4-32k、gpt-4-32k-0613、gpt-3.5-turbo(默认)、gpt-3.5-turbo-0613、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613
  • Cohere :命令(默认)、命令 -nightly(实验)、命令 -light 和命令 -light-nightly(实验)。较小的“轻型”模型更快,而较大的模型表现更好。还可以为定制模型提供其完整 ID。
  • OCI Generative AI :对于 OCI Generative AI:cohere.command(默认)。Select AI 支持 OCI Generative AI 的预训练模型。定制模型还可以随其完整 OCID 一起提供。

    要了解有关 OCI Generative AI 中支持的模型的更多信息,请参见 Pretrained Foundational Models in Generative AI

注意:

此参数不用于 Azure,因为在 Azure OpenAI 服务门户中创建部署时将确定模型。

object_list

JSON 对象的数组,用于指定有资格将自然语言转换为 SQL 的所有者和对象名称。要包括给定用户的所有对象,请省略 "name" 并仅在 JSON 对象中指定 "owner" 键。

对于将自然语言转换为 SQL,将使用 HTTPS 请求将对象名称、对象所有者、对象列和注释发送到 AI 提供程序。避免在对象列表中指定具有敏感对象名称、列名称或注释的对象。

AI 提供程序可能对转换请求中允许的元数据大小有限制。考虑限制应用程序用户适合自然语言提示的对象列表。

格式:
[
  {"owner": "SH", "name": "SALES",
  {"owner": "TEST_USER"}
]

oci_compartment_id

指定在调用 OCI 生成式 AI 服务时允许访问的区间的 OCID。区间 ID 可以包含字母数字字符、连字符和点。

默认值为 Autonomous Database 的区间 ID。

oci_endpoint_id

此属性指示 Oracle 专用 AI 托管集群的端点 OCID。端点 ID 可以包含字母数字字符、连字符和点。要查找端点 OCID,请参见 Getting an Endpoint's Details in Generative AI

如果要使用 Oracle 专用 AI 集群,必须提供托管集群的端点 OCID。

默认情况下,端点 ID 为空,并且模型在共享基础结构上是按需的。

oci_runtimetype

此属性指示提供的模型的运行时类型。如果指定了 model 属性并且该属性适用于 OCI 生成模型,则需要此属性。

所有允许的值都可以在 OCI Generative AI runtimeType 中找到。请参见LlmInferenceRequest Reference

支持的值包括:
  • COHERE
  • LLAMA

provider

AI 配置文件的 AI 提供程序。

支持的提供程序:

  • openai
  • Cohere
  • 浅蓝色
  • oci
  • google
  • 人类
  • 拥抱脸

这是一个必需的属性。

region

此属性指示要使用的生成式 AI 集群的位置。区域可以包含字母数字字符和连字符。

注意:

Oracle Generative AI 集群在芝加哥、法兰克福和伦敦地区提供。请参见 Pretrained Foundational Models in Generative AI
默认区域为 us-chicago-1

stop_tokens

生成的文本将在最早停止序列的开头终止。序列将合并到文本中。属性值必须是 JSON 格式的有效字符串值数组。stop_tokens 将 JSON 数组作为输入。要了解有关停止令牌或停止序列的更多信息,请参见 OpenAICohere 文档。

temperature

生成文本模型的采样包含随机性,因此每次点击“生成”时,相同的提示可能会产生不同的输出。温度是一个非负浮点数,用于调整随机度。较低的温度意味着更少的随机世代。有关更多详细信息,请参见 Temperature 。此参数适用于所有受支持的服务提供者。

以下示例使用 Cohere 作为提供程序并显示定制配置文件属性:
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'COHERE',
     attributes =>
      '{"provider": "cohere",
        "credential_name": "COHERE_CRED",
        "object_list": [{"owner": "ADB_USER"}],
        "max_tokens":512,
        "stop_tokens": [";"],
        "model": "command-nightly",
        "temperature": 0.5,
        "comments": true
       }');
END;
/

以下示例显示了使用 OCI Generative AI 的定制概要信息属性:

BEGIN                                                                        
  DBMS_CLOUD_AI.CREATE_PROFILE(                                              
      profile_name => 'GENAI',                                                             
      attributes => '{"provider": "oci",                                                                   
        "credential_name": "GENAI_CRED",                                     
        "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
        "oci_compartment_id": "ocid1.compartment.oc1...",
	"oci_endpoint_id": "ocid1.generativeaiendpoint.oc1.us-chicago-1....",
	"region": "us-chicago-1",
	"model": "cohere.command-light",
	"oci_runtimetype": "COHERE"            
       }');                                                                  
END;                                                                         
/