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');
BEGINDBMS_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设置,因此每次连接数据库时都必须执行
BEGINDBMS_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
--------------55500SQL> select ai showsql how many customers exist;RESPONSE                                           
---------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERSSQL> 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+模型:

BEGINDBMS_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
--------------55500SQL> 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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF | [SWPUCTF 2021 新生赛]ez_unserialize

打开题目,发现是一个GIF动图页面,什么都没有。我们来查看一下源代码,看看有没有什么发现 其实只要足够了解网站的构成,看到绿色的注释字样就能知道它这里在提示robots.txt文件。 但是对于小白来说,也不知道它是什么&a…

2、快速搭建Vue框架以及项目工程

本篇文章详细讲解在配置完vue2环境后如何快速搭建一个Vue框架和项目工程。(以智慧农业云平台为例) 2.1 Vue工程创建 2.1.1创建想要存放的Vue文件夹 找到想要存放的文件夹并在目录搜索框中,并用管理员的方式打开。 2.1.2创建Vue工程 2、安装…

Shopline和Shopify哪个更好?Shopline和Shopify的区别

Shopline和Shopify哪个更好取决于用户面向的市场,面向亚洲市场就更适合有本地化支持的Shopline,而如果希望拓展全球业务,Shopify可能更好。 Shopline和Shopify都是知名的电子商务平台,可以很好的帮助商家搭建和管理在线商店&…

软件测试常见面试题合集(内附详细答案)

01 软件测试理论部分 1.1 测试概念 1. 请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试 单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码 集成测试:通过测试发现与…

Milvus的存储/计算分离

前言 根据数据面与控制面相隔离的原则,从可扩展性和灾难恢复来看,Milvus由4个相互独立的层组成 访问层 由一系列无状态的代理组成,访问层是系统和用户之间的第一层,它主要是验证客户端请求和规整返回的结果 代理是无状态的&am…

点量云流分享:关于实时渲染云推流技术

提到云串流或者云推流很多人可能和游戏关联起来,其实这个技术的应用领域不仅仅是游戏,还有云上旅游、考古、智慧园区、智慧城市、虚拟仿真等等行业。其解决的问题是将一些大型的3D应用程序放在云端,程序在运行的时候也是在云端,这…

【Win】一键恢复IE11工具:让旧版浏览器在新系统中重生

微软在2020年8月的时候就已经公告IE11的生命周期终点,多次提醒将在2022年6月15日起不再支持IE 11,呼吁用户尽快转换到Chromium-based Microsoft Edge。微软也陆续终止旗下服务支持这个旧式浏览器。2021年3月,Chrome浏览器已不支持旧IE App。2…

学习Nginx(一):基础

介绍 Nginx是一个高性能的HTTP和反向代理的web服务器,它的设计重点是高并发、高性能和低内存消耗。它常被用于提供静态内容、负载均衡和作为Web服务器。 Nginx具有以下功能和特点: 静态文件服务:作为一个Web服务器,Nginx可以处…

vue3专栏项目 -- 四、前后端结合(上)

一、前后端分离是什么 前面我们一直在和静态数据打交道,虽然流程可以跑个半通,但是静态数据还是给我们造成了诸多不便,现在我们是时候用上后端了。 现在的应用开发模式,自从SPA出现以后,前端和后端可以平行的进行对应…

一文详细解析Google编码规范工具cpplint的下载安装与使用

目录 一、什么是cpplint 二、cpplint能实现的功能 三、cpplint的下载与使用 1、配置python环境 2、安装cpplint 四、cpplint常用命令讲解 1、常用命令查看 2、常用命令详解 3、命令使用方式 五、 cpplint的实用技巧 1、集成cpplint 1.1、修改调用接口. 1.2、直接把…

传输层协议——TCP协议

TCP协议又叫传输控制协议,TCP/IP协议是计算机通信网络中目前使用最多的协议,同时也融入了生活的方方面面,不管是浏览网页使用的http/https协议、物联网设备使用的MQTT/MQTTS协议与下载文件使用的ftp协议、工业以太网中使用的Modbus TCP协议等…

学习笔记-C++

目录 1、何为常量 2、关键字 3、实型 4、水平制表符 5、string字符串 6、C中的三目运算符 7、随机数种子 8、结构体 9、各的区 10、引用 11、函数默认参数 12、函数占位参数 13、函数重载 14、私有属性 15、让另一个类作为本类的成员 16、声明和实现的文件…