DBMS_CLOUD_AI 程序包

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

先决条件

您的组管理员必须使用 NAT 网关配置出站连接,如下所述:
  • 按照 Oracle Cloud Infrastructure 文档中的创建 NAT 网关中的说明,在虚拟云网络 (VCN) 中创建 Autonomous AI Database 资源所在的 NAT 网关。
  • 创建 NAT 网关后,向每个子网添加路由规则和出站安全规则(在 VCN 中),自治 AI 数据库资源位于该子网中,以便这些资源可以使用网关从 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 AI Database 随附的 DBMS_CLOUD_AI 子程序。

子程序 说明

CREATE_PROFILE 过程

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

概要信息属性

提供您可以配置的 AI 配置文件属性。

DROP_PROFILE 过程

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

ENABLE_PROFILE 过程

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

DISABLE_PROFILE 过程

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

SET_ATTRIBUTE 过程

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

SET_PROFILE 过程

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

GENERATE 函数

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

GENERATE_SYNTHETIC_DATA 函数

此函数生成合成数据。

ENABLE_DATA_ACCESS 过程

使用此过程可以允许将数据发送到 LLM。

DISABLE_DATA_ACCESS 过程

使用此过程可禁止向 LLM 发送数据。

CREATE_VECTOR_INDEX 过程

此过程在指定的向量数据库中创建向量索引,并使用异步调度程序作业使用对象存储中的数据填充向量索引。

DROP_VECTOR_INDEX 过程

此过程将删除向量存储索引。它通常会删除向量存储索引对象并删除向量数据库。

DISABLE_VECTOR_INDEX 过程

此过程将禁用当前数据库中的向量索引对象。禁用时,AI 配置文件无法使用向量索引,并且系统不会将数据加载到向量存储中。

ENABLE_VECTOR_INDEX 过程

此过程启用或激活以前禁用的向量索引对象。

UPDATE_VECTOR_INDEX 过程

此过程使用向量索引属性的指定值更新现有向量存储索引。

向量索引属性

提供可以配置的向量索引概要信息属性。

CREATE_CONVERSATION 过程

此过程可帮助您创建对话。

CREATE_CONVERSATION 函数

此功能可帮助您创建对话并在其他过程中使用对话 ID。

CREATE_CONVERSATION 属性

使用对话属性定制对话。

UPDATE_CONVERSATION 过程

此过程使用用户指定的参数更新现有过程。

SET_CONVERSATION_ID 过程

此过程在当前会话中设置对话支持。

GET_CONVERSATION_ID 函数

此过程可帮助您获取 conversation_id 参数。

CLEAR_CONVERSATION_ID 过程

此过程可帮助您清除当前会话中设置的任何 conversation_id

DELETE_CONVERSATION_PROMPT 过程

此过程将删除特定的提示。

DROP_CONVERSATION 过程

此过程将删除整个对话及其元数据。

FEEDBACK 过程

使用此过程可以通过向 Select AI 提供反馈来提高查询生成准确性。

向量索引 - FEEDBACK

这是首次使用 feedback 时创建的默认向量索引。

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;
/

概要信息属性

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 过程

embedding_model

AI 配置文件中定义的嵌入模型。以下是嵌入模型及其默认值所支持的 AI 提供程序:

  • OCI GenAI:cohere.embed-english-v3.0
  • OpenAI: text-embedding-ada-002
  • Azure OpenAI:text-embedding-ada-002
  • Cohere:embed-english-v2.0
  • Google:text-embedding-004

注意:

embedding_model 参数不适用于人类和拥抱面。

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

  • AWS :Amazon Bedrock 基础模型需要通过 Amazon Bedrock 控制台获得访问权限。请参阅 AWS 文档来获取 modelID。

注意:

此参数不用于 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 AI 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
  • 人类
  • 拥抱脸
  • aws

这是一个必需的属性。

region

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

注意:

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

AWS 的默认区域为 us-east-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;                                                                         
/ 

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 26ai 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;

GENERATE_SYNTHETIC_DATA 函数

使用此过程可以为单个表、多个表或完整方案生成合成数据。

下面是生成单个表的合成数据的语法。

语法

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_name         IN  DBMS_ID,
  owner_name          IN  DBMS_ID,
  record_count        IN  NUMBER,
  user_prompt         IN  CLOB DEFAULT NULL,
  params              IN  CLOB DEFAULT NULL
);

下面是生成多个表的合成数据的语法。

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_list         IN  CLOB,
  params              IN  CLOB DEFAULT NULL
);

如果不希望将表数据或向量搜索文档发送到 LLM,则具有管理员权限的用户可以为给定数据库的所有用户禁用此类访问权限。这实际上会禁用 narrate 操作。

参数

Parameter (参数) 必需 说明

profile_name

包含必要 LLM 服务信息的 AI 配置文件。这可以通过 CREATE_PROFILE Procedure 创建。

object_name

指定表名以填充合成数据。
  • 使用该表的用户需要对表对象具有 SELECTINSERT 权限。
  • 表为空或包含记录。
owner_name

指定拥有所引用对象的数据库用户。如果未提供特定所有者,则该过程默认为使用运行它的用户的方案。

record_count

要以合成方式生成的记录数。

user_prompt

用户可以提及的用于生成合成数据的附加信息。例如,要为具有 release_date 列的名为 MOVIE 的表生成记录,user_prompt 可以是:

电影的发行日期应该在 2019 年

params

以 JSON 对象字符串格式提供的可选属性,用于修改 API 的行为。请参阅可选参数

object_list

使用此参数可在多个表中生成合成数据。此参数接受表对象信息及其参数,并包含单个表中提供的相同参数。请参见 object_list Parameters

可选参数

Parameter (参数) 值数据类型 说明

sample_rows

数字

0 <= sample_rows <= 100

指定表中的行数,以用作在数据生成中指导 LLM 的示例。

值为 0 表示不会使用示例行。默认值为 0

table_statistics

布尔

  • True
  • False

允许或禁止使用表统计信息。

默认值为 False

priority

字符串

有效值包括:

  • HIGH
  • MEDIUM
  • LOW

分配一个优先级值,该值定义发送到 LLM 以生成合成数据的并行请求数。优先级更高的任务将消耗更多数据库资源并更快地完成任务。

默认值为 HIGH

  • HIGH:根据数据库的 ECPU 计数指定并行 LLM 请求数(如果数据库使用 OCPU,则指定 OCPU 计数)。

  • MEDIUM:根据中等服务的并发限制设置并发进程数。默认值为 4。

  • LOW:以串行顺序运行管道作业,无需并行处理。

用于合成数据生成的最大并行进程数限制为 64 个。

comments

布尔
  • True
  • False

启用或禁用向 LLM 发送注释以指导数据生成。

默认值为 False

object_list 参数

Parameter (参数) 值数据类型 必需 说明

owner

字符串

指定所引用的对象的所有者数据库用户。如果未提供特定所有者,则该过程将默认为使用运行它的用户的方案。

name

字符串

指定表名以填充合成数据。使用 it.The 表的用户需要对表对象具有 SELECTINSERT 权限,但该权限为空或包含记录。

record_count

数字

要以合成方式生成的记录数。请提供大于 0 的数字。

提供 record_countrecord_count_percentage

record_count_percentage

数字

要合成生成的记录数的百分比。请提供大于 0 的数字。

对于元数据克隆数据库,如果保留包括统计信息的表元数据,则支持 record_count_percentage 参数。

提供 record_countrecord_count_percentage

使用 record_count_percentage 参数时,表中的最终记录计数按以下方式计算:
Original_Num_Rows *
      record_count_percentage

user_prompt

字符串 参数中的 user_prompt 相同。user_prompt 与特定表对象关联。

示例

以下示例显示了用于为单个表和多个表生成合成数据的 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA 函数。有关完整的示例以及要查看更多示例,请参见

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_name  => 'Director',
        owner_name   => 'ADB_USER',
        record_count => 5
    );
END;
/
PL/SQL procedure successfully completed.
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
                         {"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
                         {"owner": "ADB_USER", "name": "Actor","record_count":10},
                         {"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies are released in 2009"}]'
    );
END;
/
PL/SQL procedure successfully completed.

ENABLE_DATA_ACCESS 过程

通过此过程,可以针对适用的 Select AI 功能将数据发送到 LLM,这是默认行为。只有管理员才能运行此过程。

此过程控制以下 Select AI 功能的数据访问:

  • narrate 操作
  • 检索增强生成 (RAG)
  • 综合数据生成

语法

DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();

参数

此过程不需要任何参数。

启用数据访问的示例

BEGIN
  DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();
END;
/

DISABLE_DATA_ACCESS 过程

对于适用的 Select AI 功能,此过程禁止将数据发送到 LLM。只有管理员才能运行此过程。

此过程限制以下 Select AI 功能:

  • narrate 操作
  • 检索增强生成 (RAG)
  • 综合数据生成

语法

DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();

参数

此过程不需要任何参数。

禁用数据访问的示例

BEGIN
  DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();
END;
/

CREATE_VECTOR_INDEX 过程

此过程在指定的向量数据库中创建向量索引,并使用异步调度程序作业使用对象存储中的数据填充向量索引。

语法

PROCEDURE CREATE_VECTOR_INDEX(                                              
   index_name          IN  VARCHAR2,                                        
   attributes          IN  CLOB      DEFAULT NULL,                          
   status              IN  VARCHAR2  DEFAULT NULL,                          
   description         IN  CLOB      DEFAULT NULL                           
); 

参数

Parameter (参数) 说明

index_name

向量索引的名称。向量索引名称必须遵循 Oracle SQL 标识符的命名规则。向量存储名称的最大长度为 125 个字符。

此项是必需参数。

attributes

JSON 中向量索引的定制属性。要查看可配置参数的列表,请参见 Vector Index Attributes

默认值为空值。

status
向量索引的状态。可能的值有:
  • Enabled
  • Disabled

默认值为禁用。

description

向量索引的说明。

默认值为空值。

范例

以下示例演示如何创建向量索引并将属性配置为 JSON 参数。

BEGIN                                                                
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                 
            index_name    => 'MY_INDEX'                                   
            attributes    => JSON_OBJECT(                                 
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',              
                       'profile_name'      value 'OCIGENAI',         
                       'location'          value                          
                         'https://objectstorage.us-phoenix-1.' ||         
                         'oraclecloud.com/n/mynamespace/b/mybucket',      
                       'object_store_credential_name'   value 'OS_CRED',              
                       'chunk_size'        value 2048,                    
                       'chunk_overlap'     value 256,                     
                       'refresh_rate'      value 720)                     
       );                                                                 
END;                                                                 
/

DROP_VECTOR_INDEX 过程

此过程将删除向量存储索引。它通常会删除向量存储索引对象并删除向量存储。如果设置为 FALSE,则参数 include_data 将确保该过程在保留向量存储时仅删除向量存储索引对象。

语法

PROCEDURE DROP_VECTOR_INDEX(                                                
   index_name          IN  VARCHAR2,           
   include_data        IN  BOOLEAN DEFAULT TRUE,                            
   force               IN  BOOLEAN DEFAULT FALSE                           
);

参数

Parameter (参数) 说明

index_name

向量索引的名称。向量索引名称必须遵循 Oracle SQL 标识符的命名规则。向量存储名称的最大长度为 125 个字符。

此项是必需参数。

include_data

指明是否同时删除客户的向量存储和向量索引以及向量索引对象。

可能的值:

  • TRUE
  • FALSE

默认值为 TRUE

force

指示是否忽略向量索引不存在时发生的错误。

可能的值:

  • TRUE
  • FALSE

如果设置为 TRUE,则此参数将绕过向量索引不存在时发生的任何错误。

默认值为 FALSE

范例

BEGIN
DBMS_CLOUD_AI.DROP_VECTOR_INDEX(
        index_name     => 'MY_INDEX',
        include_data   => FALSE,
        force          => TRUE
     );                                                                 
END;                                                                 
/

DISABLE_VECTOR_INDEX 过程

此过程将禁用当前数据库中的向量索引对象。禁用时,AI 配置文件无法使用向量索引,并且系统不会将数据加载到向量存储中,因为新数据已添加到对象存储,并且不会根据索引执行索引编制、搜索或查询。

语法

DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(                                              
   index_name       IN  VARCHAR2                                            
);

参数

Parameter (参数) 说明

index_name

向量索引的名称。向量索引名称必须遵循 Oracle SQL 标识符的命名规则。向量存储名称的最大长度为 125 个字符。

此项是必需参数。

范例

可以通过提供向量索引的名称来禁用向量索引。

BEGIN                                                                
   DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(index_name => 'MY_INDEX');       
END;                                                                 
/

ENABLE_VECTOR_INDEX 过程

此过程启用或激活以前禁用的向量索引对象。通常,在创建向量索引时,默认情况下会启用它,以便 AI 配置文件可以使用它来执行索引编制和搜索。

启用后,向量索引允许 AI 配置文件使用它以用户指定的刷新率将新数据从对象存储加载到向量存储中。可以通过 JSON 对象列表指定 refresh_rate 参数。要配置 JSON 属性,请参阅向量索引属性

语法

DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(                                              
   index_name       IN  VARCHAR2                                            
);

参数

Parameter (参数) 说明

index_name

向量索引的名称。向量索引名称必须遵循 Oracle SQL 标识符的命名规则。向量存储名称的最大长度为 125 个字符。

此项是必需参数。

范例

可以通过指定向量索引名称来启用或激活向量索引,如下所示:

BEGIN                                                                
   DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(index_name => 'MY_INDEX');       
END;                                                                 
/

UPDATE_VECTOR_INDEX 过程

此过程使用向量索引属性的指定值更新现有向量存储索引。
它超载以接受:
  • 各种类型的属性值。
  • 向量索引属性作为 JSON 文档,并使用指定的属性名称和值对更新现有向量存储索引的一个或多个属性。

语法

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
   index_name         IN  VARCHAR2,
   attributes         IN  CLOB
);

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
     index_name         IN  VARCHAR2,
     attribute_name     IN  VARCHAR2,
     attribute_value    IN  VARCHAR2
);

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                                 
     index_name         IN  VARCHAR2,                                         
     attribute_name     IN  VARCHAR2,                                         
     attribute_value    IN  CLOB     DEFAULT NULL                           
  );

参数

Parameter (参数) 说明

index_name

向量索引的名称。向量索引名称必须遵循 Oracle SQL 标识符的命名规则。向量存储名称的最大长度为 125 个字符。

此项是必需参数。

attributes

以 JSON 格式指定向量索引属性。

此项是必需参数。

attribute_name

CREATE_VECTOR_INDEX 过程中指定为 JSON 参数的定制属性的名称。

您不能修改以下属性:

  • location
  • vector_table_name
  • chunk_size
  • chunk_overlap
  • vector_distance_metric
  • vector_dimension

此项是必需参数。

attribute_value

自定义 attribute_name 的用户指定值。值可以是 CLOBNUMBERVARCHAR2 类型。

默认值为空值。

注意:

使用 attributes 参数可以同时指定 attribute_name 和 JSON 格式的值对,也可以使用 attribute_nameattribute_value 参数。

示例

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'object_storage_credential_name',                
      attribute_value  => 'NEW_CRED'                           
   );                                                                 
END;                                                                 
/

以下示例接受 NUMBER 类型作为 attribute_value

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'match_limit',                
      attribute_value  => 10                           
   );                                                                 
END;                                                                 
/

以下示例接受 VARCHAR2 类型作为 attribute_value

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'profile_name',                
      attribute_value  => 'AI_PROF2'                           
   );                                                                 
END;                                                                 
/

以下示例接受 JSON 格式的 attributes

BEGIN
  DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
    index_name => 'MY_VECTOR_INDEX', 
    attributes => '{"match_limit": 10, 
                    "refresh_rate": 30}'
  );
END;
/

向量索引属性

向量索引的属性有助于管理和配置向量索引的行为。可以根据需要添加定制索引属性。某些属性是可选的,并且具有默认值。

属性

属性名称 必需 说明
chunk_size 1024(默认值)

输入数据的分块的文本大小。

对于文本数据,这意味着字符数。

chunk_overlap 128(默认值)

指定相邻的文本块之间的重叠字符量。此属性有助于通过允许段之间的重叠来确保文本处理的上下文连续性和准确性,这有助于防止在块边界丢失上下文信息。

location

NA

此参数指定源文件 URI 或目录以及源文件。

源文件 URI 和目录都支持通配符模式。

云源文件 URI

可以为存储桶或子文件夹指定源文件 URI。可以使用通配符指定子文件夹或文件名。字符 "*" 可以用作表示多个字符的通配符,字符 "?" 可以用作表示单个字符的通配符。

使用通配符的示例:

location_uri => 'https://objectstorage.my$region.oraclecloud.com/n/namespace-string/b/bucketname/o/year=????/month=??/*.csv

URI 的格式取决于您使用的云对象存储服务,有关详细信息,请参见 Cloud Object Storage URI Formats

目录

可以指定一个目录和文件名。指定目录的格式为:MY_DIR:filename.ext。默认情况下,目录名称 MY_DIR 是数据库对象,不区分大小写。文件名区分大小写。

只能使用通配符指定目录中的文件名。字符 * 可以用作多个字符的通配符,字符 ? 可以用作表示单个字符的通配符。例如:MY_DIR:*MY_DIR:test?

使用双引号指定区分大小写的目录名称。例如:"my_dir1":*"my_dir2":Test?

要包含引号字符,请使用两个引号。例如:MY_DIR:''filename.ext。这指定文件名以引号 (') 开头。

此位置中的文件可以是 PDF、DOC、JSON、XML 或 HTML 等格式的文档。请参阅支持的文档格式

match_limit

5(默认值)

指定在向量搜索查询中返回的最大结果数,从而控制输出大小并提高数据检索操作的效率。

object_storage_credential_name

NA

指定用于访问对象存储的身份证明的名称。

pipeline_name

<vector_index_name>$VECPIPELINE

指定向量索引数据加载管道的名称。此属性会自动为向量索引设置,您无法指定或修改。管道名称可用于使用监视管道和排除管道故障监视向量索引数据加载。

profile_name

NA

用于嵌入源数据和用户提示的 AI 概要文件的名称。

refresh_rate

1440 分钟(默认值)

在向量存储中更新数据的间隔。单位是分钟。

similarity_threshold

0(默认值)

定义将两个项视为匹配项所需的最小相似度级别,可用于在匹配算法中筛选结果以确保相关性。

vector_distance_metric

与说明中指定的值之一对应的字符串。

指定用于比较数据库中的向量的距离计算类型,确定项之间的相似性如何量化。

Oracle 23ai 的有效值:

  • EUCLIDEAN
  • L2_SQUARED (EUCLIDEAN_SQUARED)
  • COSINE(默认值)
  • DOT
  • MANHATTAN
  • HAMMING

vector_db_provider

oracle

指定管理和充当向量存储的提供程序名称。

vector_dimension

NA

指定向量存储中每个向量的元素数,定义数据表示形式的大小和结构。

vector_table_name

<vector_index_name>$VECTAB(默认值)

指定用于存储向量嵌入和分块数据的表或集合的名称。

示例:指定对象存储 URI 位置
以下示例演示如何使用 OCI Generative AI 向量存储创建向量索引。
BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
         index_name  => 'MY_INDEX',
         attributes  => '{"vector_db_provider": "oracle",
                          "location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
                          "object_storage_credential_name": "OCI_CRED",
                          "profile_name": "OPENAI_ORACLE",
                          "vector_dimension": 1024,
                          "vector_distance_metric": "cosine",
                          "chunk_overlap":128,
                          "chunk_size":1024
      }');
END;
/                                                                 
/
示例:使用通配符模式指定对象存储 URI 位置

此示例将对象存储 URI 中的通配符模式 (*) 指定为 location 参数。它从对象存储 URI 加载所有 CSV 文件。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'https://objectstorage.myregion.oraclecloud.com/n/my$namespace/b/bucketname/o/year=????/month=??/file*.csv)',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
示例:使用通配符模式指定目录对象位置

此示例使用通配符模式指定 location 参数中的目录对象。它将加载 MY_DIR 目录中的所有 CSV 文件。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'MY_DIR:*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
示例:使用通配符模式指定区分大小写的目录对象位置

此示例使用通配符模式在 location 参数中指定区分大小写的目录对象。它将加载 My_Dir 目录中的所有 CSV 文件。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value '"My_Dir":*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
示例:将所有文件指定为通配符模式的区分大小写的目录对象

此示例使用通配符模式 (*) 在 location 参数中指定区分大小写的目录对象。它会加载位于 My_Dir 目录中的所有文件。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value '"My_Dir":*',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
示例:在目录对象中指定文件名匹配

此示例指定目录对象,并在 location 参数中使用文件名前缀(例如 test)。它将加载 MY_DIR 目录中名称以 test 开头的所有文件。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'MY_DIR:test*',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/

CREATE_CONVERSATION 过程

通过此过程,您可以创建对话并自动在该过程中设置 conversation_id

注意:

如果使用的是 DBMS_CLOUD_AI.CREATE_CONVERSATION 过程,则可以跳过设置 conversation_id,因为该过程会自动设置它。

语法

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
);

参数

Parameter (参数) 说明

attributes

JSON 格式的对话属性。有关更多详细信息,请参见 CREATE_CONVERSATION Attributes

默认值为空值。

范例

示例:创建对话

以下示例显示了在不进行任何定制的情况下创建对话。

EXEC DBMS_CLOUD_AI.CREATE_CONVERSATION;

结果:

PL/SQL procedure successfully completed.
示例:创建具有定制属性的对话

以下示例显示如何创建与定制参数(例如 titledescriptionretention_daysconversation_length)的对话。

-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

CREATE_CONVERSATION 函数

This function creates a conversation and returns its conversation_id that can be used in other procedures or functions such as DBMS_CLOUD_AI.SET_CONVERSATION_ID and DBMS_CLOUD_AI.GENERATE.

Oracle 建议设置 conversation_id 以启用对话。或者,您可以在 DBMS_CLOUD_AI.GENERATE 函数中设置 conversation_id

注意:

如果使用的是 DBMS_CLOUD_AI.CREATE_CONVERSATION 过程,则可以跳过设置 conversation_id,因为该过程会自动设置它。

语法

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
) RETURN VARCHAR2;

参数

Parameter (参数) 说明

attributes

JSON 格式的对话属性。有关更多详细信息,请参见 CREATE_CONVERSATION Attributes

默认值为空值。

范例

示例:创建对话

以下示例显示了如何使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 函数创建没有任何定制的对话。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION FROM DUAL;

结果:

CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
示例:创建具有定制属性的对话

以下示例显示如何使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 函数指定属性,例如 titleretention_daysconversation_length

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
				attributes => '{"title":"This is a test conversation",
                               "retention_days":7,
                               "conversation_length":20}') 
FROM DUAL;

CREATE_CONVERSATION 属性

这些属性管理对话上下文,包括对话上下文的保留时间、要存储或显示的响应的提示数,以及标题和说明等元数据以供参考。某些属性是可选的,并且具有默认值。

属性

属性名称 默认值 说明

title

新建对话

用户为对话分配的名称。如果未提供,Select AI 将在对话首次与提示一起使用时让 LLM 生成一个。

description

NULL

提供用户定义的描述,汇总对话的目的或上下文。如果未提供,LLM 将在首次使用对话时生成一个提示,并在第 5 次使用时再次更新,以包含更准确和相关的信息。

retention_days

7

指定要保留对话历史记录的天数。它从创建日期开始存储在数据库中。如果省略该值,系统会将其设置为默认值 7。如果将其设置为 0,系统将保留对话,直到您使用 DBMS_CLOUD_AI.DROP_CONVERSATION 过程或 DBMS_CLOUD.DELETE_ALL_OPERATIONS('CONVERSATION') 手动删除对话。

conversation_length

NULL

指定要与当前提示一起包含的最近提示和响应数。允许的最大值为 999。您可以通过在 DBMS_CLOUD_AI.GENERATE 函数中指定 conversation_length 参数或使用 SELECT AI <ACTION> <PROMPT> 在 AI 配置文件中设置该参数来覆盖此值。对 conversation_length 应用以下优先级规则:
  1. DBMS_CLOUD_AI.GENERATE 中属性参数的值
  2. 对话中的值集具有下一个优先级
  3. 在 AI 配置文件中定义的值采用最后一个优先级

如果没有指定 conversation_length,则默认值为 10。

以下示例说明如何在 DBMS_CLOUD_AI.CREATE_CONVERSATION 过程中定制对话属性。
-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

UPDATE_CONVERSATION 过程

此过程使用指定的对话属性值更新现有对话。

语法

DBMS_CLOUD_AI.UPDATE_CONVERSATION(
    conversation_id    IN VARCHAR2,
    attributes         IN CLOB
);

参数

Parameter (参数) 说明

conversation_id

分配给对话的唯一编号。

此项是必需参数。

attributes

JSON 格式的对话属性。有关更多详细信息,请参见 CREATE_CONVERSATION Attributes

范例

EXEC DBMS_CLOUD_AI.UPDATE_CONVERSATION(
conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
attributes => '{"retention_days":20, 
		"description":"This a sample description", 
		"title":"Sample title", 
		"conversation_length":20}');

结果:

PL/SQL procedure successfully completed.

SET_CONVERSATION_ID 过程

此过程将当前对话设置为指定的 ID。后续提示包括基于对话的配置属性的现有对话提示。

语法

DBMS_CLOUD_AI.SET_CONVERSATION_ID(
    conversation_id   IN VARCHAR2
);

参数

Parameter (参数) 说明

conversation_id

分配给当前会话中的对话的唯一编号。

此参数是必需的。

范例

EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
   

结果:

PL/SQL procedure successfully completed.

GET_CONVERSATION_ID 函数

此函数使用 DBMS_CLOUD_AI.SET_CONVERSATION_IDDBMS_CLOUS_AI.CREATE_CONVERSATION 过程返回会话中当前设置的对话 ID。如果未设置对话,该函数将返回 NULL。如果删除对话,系统也会在会话中清除对话。请参见 CLEAR_CONVERSATION_ID Procedure

语法

DBMS_CLOUD_AI.GET_CONVERSATION_ID
RETURN VARCHAR2;

范例

此示例显示当前会话中设置的对话 ID。

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;

结果:

--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92

CLEAR_CONVERSATION_ID 过程

此过程将清除会话中设置的对话 ID,以禁用 SELECT AI <ACTION> <PROMPT> 的对话功能。如果未设置对话,则系统不会引发任何错误。

语法

DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;

范例

本示例演示如何在会话中显示当前对话 ID、清除 ID 以及验证更改。

-- A conversation id is set in the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;
 
GET_CONVERSATION_ID
--------------------------------------------------------------------------------
3A88BFF0-1D7E-B3B8-E063-9C6D46640ECD
 
 
-- Clear the conversation id
EXEC DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;
 
PL/SQL procedure successfully completed.
 
 
-- The conversation id is removed from the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;
 
GET_CONVERSATION_ID
--------------------------------------------------------------------------------

DELETE_CONVERSATION_PROMPT 过程

该过程会从对话中删除某个提示。

语法

DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT(
    conversation_prompt_id  IN VARCHAR2,
    force                   IN BOOLEAN DEFAULT FALSE
);

参数

Parameter (参数) 说明

conversation_prompt_id

分配给对话中的提示的唯一编号。可以通过查询 DBA/USER_CLOUD_AI_CONVERSATION_PROMPTS 视图来查找提示 ID。请参见 DBMS_CLOUD_AI Views

此项是必需参数。

force

如果为 TRUE,则该过程将在 conversation_prompt_id 不存在时忽略错误。

此参数的默认值为 FALSE

范例

EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');

结果:

PL/SQL procedure successfully completed.

DROP_CONVERSATION 过程

该过程将删除对话及其所有关联的提示和关联的响应。删除后,conversation_id 将变为无效。如果在会话中设置对话时将其删除,则会自动将其清除。

语法

DBMS_CLOUD_AI.DROP_CONVERSATION(
    conversation_id  IN VARCHAR2,
    force            IN BOOLEAN  DEFAULT FALSE
);

参数

Parameter (参数) 说明

conversation_id

分配给对话的唯一编号。

此项是必需参数。

force

如果为 TRUE,则该过程将在 conversation_id 不存在时忽略错误。

此参数的默认值为 FALSE

范例

EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');

结果:

PL/SQL procedure successfully completed.

FEEDBACK 过程

通过此过程,您可以向 Select AI 提供反馈,以提高查询生成准确性。您可以选择提供正面或负面的反馈,以及文本备注或修订的 SQL 查询。

语法

DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_id            IN  DBMS_ID,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,   
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );
 
DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_text          IN  CLOB,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );

参数

Parameter (参数) 说明

profile_name

指定要使用的 AI 配置文件。如果未提供 profile_name,则 Select AI 将使用会话中设置的默认配置文件。

此项是必需参数。

sql_id

标识 SQL 查询。一个 sql_id 只能有一个反馈条目。

此项是必需参数。

sql_text

包含 SQL 查询的全文。

此项是必需参数。

feedback_type

指定反馈的类型。可用值包括:
  • positive:接受生成的 SQL。
  • negative:通过识别查询中的错误来提供必要的 SQL 查询改进。

注意:

使用 DBMS_CLOUD_AI.FEEDBACK 过程可以指定 sql_idsql_text,因此需要指定 feedback_type,而如果使用 feedback 操作,LLM 会动态确定或解释反馈类型。

operationadd 时,这是必需参数。

response

表示用户期望的正确 SQL 查询结果。

operationaddfeedback_typenegative 时,这是必需参数。

feedback_content

捕获用户的自然语言反馈。您可以选择将此参数与 response 一起使用。

operation

指定要执行的操作。可接受的值包括:
  • add(默认值):通过指定 feedback_type 来添加反馈。
  • delete:通过提供 sql_id 删除您的反馈

范例

示例:使用添加或删除操作为生成的 SQL 提供反馈

以下示例演示如何使用 DBMS_CLOUD_AI.FEEDBACK 过程通过指定过程中的参数来接受或改进生成的 SQL。

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');

向量索引 - FEEDBACK

当您首次使用反馈功能时,选择 AI 会创建一个名为 <profile_name>_FEEDBACK_VECINDEX 的默认向量索引,其中包含默认属性。

可以使用 DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX 过程修改其属性,例如 similarity_thresholdmatch_limit。此索引有助于根据提供的反馈细化将来生成的 SQL。删除关联的 AI 配置文件时会删除此表。您也可以删除 <profile_name>_FEEDBACK_VECINDEX。当您这样做时,Select AI 将不再使用反馈作为 runsqlshowsqlexplainsql 操作的提示。但是,如果您使用 Select AI 反馈功能提交新反馈,Select AI 将自动创建新的反馈向量索引

注意:

feedback 的默认值为 match_limit

向量表名称

表 <profile_name>_FEEDBACK_VECINDEX$VECTAB 包含用户反馈的向量表示形式(嵌入式)以及其他参数,Select AI 用于随着时间的推移改进 SQL 生成。

参数

说明

attributes

根据 FEEDBACK 过程包括 JSON 对象属性。

content

包含用户提示符。

embedding

包含用户提示的向量表示(嵌入)。

范例

以下示例演示如何使用自动生成的向量索引表来查询和提供反馈。

SQL> select content, attributes from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
DBMS_CLOUD_AI.feedback Procedure(Positive Feedback)