在23c之前,大家跟数据库打交道只能通过SQL,大语言模型出来以后,机器能够理解自然语言了,那跟数据库打交道的方法有什么样的变化呢?Oracle 23c 新功能,SELECT AI 能力可以让您使用自然语言跟Oracle对话了,生成式人工智能大语言模型(LLM)与Oracle SQL相结合,使您能够描述您想要的内容(声明性意图)并让数据库生成与您的模式相关的SQL查询。有些LLM可能擅长生成SQL,但能够针对数据库运行该SQL则是另一回事。选择AI可以生成特定于数据库的SQL。本文详细描述了如何建立和使用该技术的过程。
1 前提条件
1.1 OpenAI/Cohere帐号
-
OpenAI:收费或者免费的帐号,收费的为ChatGPT 4.0,免费帐号模型为ChatGPT 3.5,申请方法访问网站: chat.openai.com,需要有一个邮箱建议使用gmail邮箱,还需要一个能正常使用openai的国家的手机号码,用来接收验证码(生成API KEY时手机号为必须项)。
-
Cohere:收费和免费的Pretrained的模型不同,免费模型没有使用Oracle SQL方面的训练,或者使用OCI的Cohere模型。申请方法访问网站:https://dashboard.cohere.com。Cohere会自动赋予免费的Trial的API KEY,无需任何手机号验证。
1.2 Oracle自治数据库
Oracle自治数据库,ADW或者ADB都支持SELECT AI语法,版本19c即可。
-
自治数据库实例所属Region需要在可以正常访问openai.com的Region,否则无法使用
-
可以是Always Free帐号的自治数据库
-
演示schema为SH
2 申请API KEY
2.1 申请OpenAI API KEY
登录OpenAI帐户,打开如下链接,进入到API Keys页面:
https://platform.openai.com/api-keys
点,输入相应国家的手机号。
手机号码确认后弹出验证码验证,输入验证码,即会生成API KEY,copy此Key串,后面在ADW里面配置需要使用此KEY.
2.2 Cohere API Key
Cohere无需手机号验证,并且自动免费创建Trial的API KEY
https://dashboard.cohere.com/api-keys
如果是付费帐户可以生成Production Key,复制此KEY串。
3 配置自治数据库
Oracle 自治数据库无服务器使用 AI 配置文件来促进和配置对 LLM 的访问,并设置从自然语言提示生成 SQL 语句。
3.1 SELECT AI语法
在 SELECT 语句中使用 AI 作为关键字,以便使用自然语言提示与数据库进行交互。
SELECT 语句中的 AI 关键字指示 SQL 执行引擎使用活动 AI 配置文件中标识的 LLM 来处理自然语言并生成 SQL。您可以在使用 Oracle 客户端(如 SQL Developer、OML Notebooks 和第三方工具)的查询中使用 AI 关键字,以自然语言与数据库进行交互。
注意事项:
1、 SELECT AI语法不支持在APEX中使用,在APEX中请使用DBMS_CLOUD_AI.GENERATE来支持自然语言提示与数据库进行交互。
2、 AI关键字只支持SELECT语法。
3、 PL/SQL语句、DDL语句、DML语句不支持使用AI关键字。
4、 序列是 SELECT,后跟 AI。这些关键字不区分大小写。经过DBMS_CLOUD_AI.SET_PROFILE配置后,SELECT AI 后面的文本是自然语言提示。如果未设置 AI 配置文件,则 SELECT AI 会报告以下错误:
5、 根据 Oracle 准则,特殊字符使用规则适用。例如,如果您在句子中使用撇号,请使用两次单引号
6、 LLM 会产生幻觉,结果并不总是正确的:
a) SELECT AI 可能无法为特定的自然语言提示运行生成的 SQL
b) SELECT AI 可能无法为特定的自然语言提示生成 SQL
7、 将chat操作与 SELECT AI 聊天结合使用,了解有关 SQL 构造的更多信息。为了获得更好的聊天操作结果,请使用具有上下文列名称的数据库视图或表,或者考虑添加列注释来解释列中存储的值。
8、 相关视图: DBMS_CLOUD_AI
3.2 配置AI Profile(ADMIN用户)
以下过程为OPEN AI的配置过程,如果要使用Cohere,配置过程一致,只需要将帐号和API KEY替换成Cohere的即可。
-
使用ADMIN用户登录自治数据库
-
授权
SQL> grant execute on DBMS_CLOUD_AI to Your_USER;
如果直接使用ADMIN用户进行使用,无需此步授权
-
OpenAI Endpoint授权
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'api.openai.com', ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'ADMIN/YOUR_USER', principal_type => xs_acl.ptype_db) );END;/
-
创建OpenAI的Credential
将OpenAI的帐号和API KEY替换掉下行红色部份。
EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'xxxx@gmail.com', 'OpenAI API KEY');
-
创建并启用AI配置文件
-- Create AI profile-- BEGIN DBMS_CLOUD_AI.create_profile( 'OPENAI', '{"provider": "openai", "credential_name": "OPENAI_CRED", "object_list": [{"owner": "SH", "name": "customers"}, {"owner": "SH", "name": "sales"}, {"owner": "SH", "name": "products"}, {"owner": "SH", "name": "countries"}] }');END;/PL/SQL procedure successfully completed. ---- Enable AI profile in current session--SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
4 使用SELECT AI
使用SELECT AI与LLM进行交互生成SQL或者结果。
-
使用SELECT AI显示想要的SQL,使用语法SELECT AI showswql
-
使用SELECT AI自动生成SQL并执行直接给出结果,使用语法SELECT AI
-
使用SELECT AI 将结果给出更人性性的对话,SELECT AI narrate
-
使用聊天模式SELECT AI chat
-
SELECT AI 有可能会出现幻觉,比如下图的第二条SQL语句,因为LLM不能总是给出正确的答案
5 SELECT AI总结
现在,在OCI可以借助使用 LLM 使用自然语言与数据库数据进行交互。这意味着您可以使用自然语言来查询数据库,即便你不懂一行SQL代码。
用户手册:
https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/sql-generation-ai-autonomous.html#GUID-9CE75F94-7455-4C09-A3F3-118C08E82B7E