Oracle 自治数据库 Select AI 初体验

这几天有点时间,准备尝试下Oracle Select AI,虽然此功能2023年就已经发布了。

Oracle自治数据库已经集成好了Select AI,本文也是讲的这个。

配置 Select AI

需要以下步骤:

  1. 创建ADB
  2. 申请Cohere/OpenAI免费账号
  3. 设置ADB
  4. 测试Select AI

第1步在OCI上创建一个自治数据库即可,可以是ATP或ADW,不再赘述。

第2步在Cohere或OpenAI网站上申请个免费账号,我都做了,也很简单。

以下为Cohere的API Key,后续会用到:
在这里插入图片描述
以下为OpenAI的API Key:
在这里插入图片描述

本文主要讲第3和第4步 ,整个过程参考官方文档:Use Select AI to Generate SQL from Natural Language Prompts

以下为详细过程,我直接使用的管理员账户ADMIN,你也可以创建用户xxx:

-- 赋权,对于ADMIN用户不用执行
grant execute on DBMS_CLOUD_AI to xxx;

-- 设置ACL,对于ADMIN也需要执行
-- 以下指定的是Cohere大模型,如果是openAI,则host对应改为api.openai.com
-- 用户指定的是ADMIN,如果是用户xxx,则principal_name对应改为xxx
BEGIN  
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
     host => 'api.cohere.ai',
     ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                         principal_name => 'ADMIN',
                         principal_type => xs_acl.ptype_db)
);
END;
/  
-- 创建credential,命名为SELECTAI_CRED,用户名为申请邮箱,密码为Cohere或OpenAI的API key
-- EXEC DBMS_CLOUD.DROP_CREDENTIAL('OPENAI_CRED');
EXEC DBMS_CLOUD.CREATE_CREDENTIAL('SELECTAI_CRED', '申请账户的邮箱', '大模型提供的API Key');

-- 创建AI profile,provider设定为cohere或openai
-- EXEC DBMS_CLOUD_AI.drop_profile(profile_name => 'SELECTAI');
BEGIN
  DBMS_CLOUD_AI.create_profile(
      'SELECTAI',
      '{"provider": "cohere",
        "credential_name": "SELECTAI_CRED",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/

-- 设定AI Profile
-- 这是一个session设置,因此每次连接数据库时都必须执行
BEGIN
  DBMS_CLOUD_AI.SET_PROFILE(
     profile_name => 'SELECTAI'
  );
END;
/

测试 Select AI

然后就是测试了,可以用SQL Plus或SQL Developer:

测试OpenAI时,报错,因为超过了速率限制:

ORA-20429: Request failed with status HTTP 429 - bearer://api.openai.com/v1/chat/completions
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD$PDBCS_240425_1", line 2060
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD$PDBCS_240425_1", line 12958
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 3096
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 3650
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 5024
ORA-06512: at line 1

没有关系,前面的设置都是正确的。错误HTTP 429表示API调用超过了速率限制。这是由于OpenAI用了免费账户,免费账户的5美元上限或者已达到,或者免费期限已过。

而用Cohere就没有问题了。

SQL> set echo on
SQL> select ai how many customers exist;

CUSTOMER_COUNT
--------------
         55500

SQL> select ai showsql how many customers exist;

RESPONSE                                           
---------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS

SQL> select ai narrate how many customers exist;

RESPONSE                                                                                                                                                                                                                                                                                                                                                                                                                                                       
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
To determine how many customers exist, we will use the `customers` table provided above which has the column `cust_id` and a ROWNUMBER `ROW_COUNT`. 

Here is the SQL query to be executed:
```sql
SELECT COUNT(*) AS CUSTOMERS_COUNT
FROM SH.CUSTOMERS;
    ```

This query uses the `COUNT(*)` function to count all the rows in the `CUSTOMERS` table. When we execute this query in the Oracle Database, we will get the number of customers in the "SH" schema.

SQL> select ai explainsql how many customers in San Francisco are married;

RESPONSE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A possible Oracle SQL query to answer the question is:
```sql
SELECT COUNT(*) customer_count
FROM sh.customers
WHERE cust_city = 'San Francisco'
AND cust_martial_status = 'Married';
    ```

Explanation:
- The query uses the "SH"."CUSTOMERS" table to retrieve data about customers.
- It counts the number of married customers residing in San Francisco.

RESPONSE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- The WHERE clause filters the rows based on two conditions:
   - ``cust_city = 'San Francisco' '' ensures that only customers with ``San Francisco`` as their city are considered.
   - ``cust_martial_status = 'Married'`` ensures that only married customers are counted.
- The result is a single number that answers the question.

中文不支持:

select ai 存在多少客户;

RESPONSE                                                                                                                                                                                                                                                                                                                                                                               
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sorry, unfortunately a valid SELECT statement could not be generated for your natural language prompt. Here is some more information to help you further: 

I'm sorry, I cannot understand the question because currently Chinese language is not supported. Could you please make the question in English instead? 

If there's anything else I can assist you with, feel free to ask!

这是由于默认的大模型并不支持中文,DBMS_CLOUD_AI.create_profile创建profile时,需要指定新的Command R+模型:

BEGIN
  DBMS_CLOUD_AI.create_profile(
      'SELECTAI',
      '{"provider": "cohere",
        "credential_name": "SELECTAI_CRED",
        "model" : "command-r-plus",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/

在这里插入图片描述
现在中文就正常了:

SQL> set echo on
SQL> select ai 存在多少客户;

CUSTOMER_COUNT
--------------
         55500

SQL> select ai narrate 存在多少客户;

"要确定客户表中有多少客户,您可以使用以下SQL查询:
```sql
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS;
    ```

此查询将返回客户表中的客户总数。"
SQL> select ai explainsql 旧金山有多少顾客已婚;

RESPONSE                                                                                                                                  
------------------------------------------------------------------------------------------------------------------------------------------
SELECT count(*) AS married_customers_count
FROM sh.customers c
WHERE c.cust_marital_status = 'Married'
  AND c.cust_city = 'San Francisco'

参考

  • Introducing Select AI - Natural Language to SQL Generation on Autonomous Database
  • Autonomous Database Select AI: Accelerate innovation with enterprise data, OCI Generative AI, and enhanced security
  • Autonomous Database speaks “human”
  • Conversations are the next generation in natural language queries
  • Natural Language Queries - Oracle Autonomous Database Now Speaks “Human” - Select AI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十七篇:数据库性能优化的数学视角:理论与实践的融合

数据库性能优化的数学视角:理论与实践的融合 1. 引言 在现代信息技术快速发展的背景下,数据库性能优化已经成为计算机科学领域的一个热点问题。随着数据量的爆炸式增长和用户需求的多样化,数据库系统所承载的数据处理任务变得越来越复杂&…

unity制作app(7)--panel control

根据用户的状态,在界面中显示不同的panel 1.新建一个脚本PanelControl,控制各个脚本的显示与隐藏 2.实现第一个逻辑判断功能:如果没有登记过信息,就直接跳转到登记界面,如果登记过,跳转到住界面。许多需要…

2A 150KHz 40V Buck DC to DC 转换器XL1509

前言: 该器件仅做介绍,不推荐在新设计中使用。 新设计应尽量使用MHZ开关频率,以降低电感量,从而降低成本。 新设计应使用同步DCDC降压转换器。 XL1509丝印和封装 引脚定义 XL1509管脚描述 管脚编号 管脚名称 管脚描述 1 电压输入…

Online RL + IL :Policy Improvement via Imitation of Multiple Oracles

NIPS 2020 paper code 如何利用多个次优专家策略来引导智能体在线学习,后续有多个文章研究该设定下的RL。 Intro 论文探讨了在强化学习(RL)中,如何通过模仿多个次优策略(称为oracle)来提升策略性能的问题…

宁静致远(“静”)

宁静致远是一个成语,读音为nng jng zh yuǎn,意思是只有心境平稳沉着、专心致志,才能厚积薄发、 有所作为。出自《淮南子:主术训》。 出处 宁静致远张铭篆刻 此句最早出自西汉初年道家刘安的《淮南子:主术训》,蜀汉丞相诸葛亮的…

TEMU电商行情分析:未来趋势与盈利机遇探讨

近年来,跨境电商行业风起云涌,其中TEMU作为新兴力量,其市场表现备受关注。那么,TEMU电商现在的行情究竟如何?对于卖家而言,是否仍然是一个能够赚钱的平台呢? 首先,从市场趋势来看 TEMU电商正处于一个快速…

创建按钮的第二种方法

可以设置两个参数,按钮的内容和父对象 QPushButton * button2 new QPushButton("第二个按钮",this); 区别: 方式1:窗口默认大小,按钮显示在左上角 方式2:窗口是根据按钮的大小来创建的 (所以需要重置窗…

Java入门基础学习笔记27——生成随机数

Random的使用:生成随机数。 随机数应用: 随机点名: 年会抽奖: 猜数字游戏: 密码学。 查看API文档: package cn.ensource.random;import java.util.Random;public class RandomDemo1 {public static voi…

强化学习的优化策略PPO和DPO

DPO DPO(直接偏好优化)简化了RLHF流程。它的工作原理是创建人类偏好对的数据集,每个偏好对都包含一个提示和两种可能的完成方式——一种是首选,一种是不受欢迎。然后对LLM进行微调,以最大限度地提高生成首选完成的可能性,并最大限…

win编写bat脚本启动java服务

新建txt,编写,前台启动,出现cmd黑窗口 echo off start java -jar zhoao1.jar start java -jar zhoao2.jar pause完成后,重命名.bat 1、后台启动,不出现cmd黑窗口,app是窗口名称 echo off start "名…

如何同步管理1000个设备的VLAN数据?

什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…

异地组网群晖不能访问怎么办?

在日常使用群晖网络储存设备时,我们常常会遇到无法访问的情况,特别是在异地组网时。这个问题很常见,但也很让人困扰。本文将针对异地组网群晖无法访问的问题进行详细解答和分析。 异地组网的问题 在异地组网中,群晖设备无法访问的…

Unity设计模式之工厂模式

什么是工厂模式? 工厂是一种创建型设计模式。通俗来讲就是提供一种封装对象创建的方式,将对象的创建和使用区分开。就是Unity里面通常用到的创建和管理对象。 工厂模式有什么优点? 1、封装对象的创建方式,使其更加灵活、易于管理…

Vue和Django前后端实现跨域

1.为什么要解决跨域: 前端与后端分处不同的域名,因为客户端访问不同源的服务端时会遭到浏览器的同源策略的拦截,所以我们需要配置CORS,处理的方式有很多,先来说下自己学习到的。 2.前端处理跨域: 前端项目是…

JVM运行时内存:程序计数器

文章目录 1. 程序计数器的作用2. 程序计数器的基本特征3. 程序计数器的问题 运行时内存整体结构如下图所示: 1. 程序计数器的作用 为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作…

文档分类FastText模型 (pytorch实现)

文档分类FastText FastText简介层次softmaxN-gram特征FastText代码(文档分类) FastText简介 FastText与之前介绍过的CBOW架构相似,我们先来会议一下CBOW架构,如下图: CBOW的任务是通过上下文去预测中间的词&#xff0…

ES6之数值的扩展

1. 数值的扩展 1.1. 二进制和八进制字面量表示:1.2. 数值判断方法: 1.2.1. Number.isFinite() 检查一个值是否为有限的数值。1.2.2. Number.isNaN() 更准确地检测NaN值。1.2.3. 传统的全局方法 isFinite() 和 isNaN() 的区别 1.3. 数值转换方法:1.4. 整数检查与精度: 1.4.1. Nu…

探秘Web3科技:科技变革的下一个风口

引言 随着互联网的发展,我们正处于一个数字化时代,而Web3技术被认为是数字革命的下一个风口。相较于传统的Web2,Web3技术以其去中心化、安全可信的特点,正在引领着科技变革的潮流。本文将深入探讨Web3科技,揭示其背后…

可用在vue自动导入的插件unplugin-auto-import

在大多数vue3开发中,基本所有页面都会引用vue3 componsition api,如下代码 想这种vue3 架构中自带的api,如果在全局配置一下的话,就可以减少一部分代码量,只是在代码编译的时候,会添加相应的引用&#xff…

后台菜单数据递归展示

后台菜单数据递归展示 效果示例图aslide.vueaslideItem.vuemenu 效果示例图 aslide.vue <script setup>import {ref} from vue;const props defineProps({isCollapse: {type: Boolean,default: false}});import AslideItem from "./aslideItem.vue"const def…