使用选择 AI 从自然语言提示生成 SQL
选择 AI 功能允许 Autonomous Database 使用具有大型语言模型 (LLM) 的生成式 AI 将用户的输入文本转换为 Oracle SQL。选择 AI 将处理自然语言提示,使用元数据补充提示,然后生成并运行 SQL 查询。
相关主题
术语
在使用 Select AI 之前,了解与 Select AI 一起使用的各种术语非常重要。
以下是与“选择 AI”功能相关的术语:
术语 | 定义 |
---|---|
数据库身份证明 |
数据库身份证明是用于访问数据库并与数据库进行交互的验证身份证明。它们通常由用户名和密码组成,有时由其他验证因素(如安全令牌)补充。这些身份证明用于在应用程序或用户与数据库之间建立安全连接,确保只有授权的个人或系统才能访问和处理数据库中存储的数据。 |
LLM 的发音 |
大语言模型上下文中的幻觉是指模型生成不正确、无意义或与输入提示无关的文本的现象。尽管是模型试图生成一致文本的结果,但这些实例可以包含虚构、误导或纯粹想象的信息。幻觉可能是由于训练数据存在偏见,缺乏适当的上下文理解,或者模型训练过程存在局限性。 |
IAM | Oracle Cloud Infrastructure Identity and Access Management (IAM) 支持您控制谁可以访问您的云资源。您可以控制一组用户具有哪些类型的访问权限以及哪些特定资源。要了解更多信息,请参阅身份和访问管理概览。 |
大语言模型 (LLM) |
大语言模型是指对大量文本数据进行训练的高级人工智能模型,以理解和生成类似人类的语言、软件代码和数据库查询。这些模型能够执行各种自然语言处理任务,包括文本生成、翻译、汇总、问题解答、情感分析等。LLM 通常是基于神经网络的架构,它从输入数据中学习模式、上下文和语义,使它们能够生成一致且与上下文相关的文本。 |
自然语言提示 |
自然语言提示是人类可读的指令或请求,用于指导生成式 AI 模型,例如大型语言模型。用户无需使用特定的编程语言或命令,而是可以通过以更会话或自然语言形式输入提示来与这些模型进行交互。然后,模型将根据提供的提示生成输出。 |
网络访问控制列表 (ACL) |
网络访问控制列表是一组规则或权限,用于定义允许哪些网络流量通过网络设备(例如路由器、防火墙或网关)。ACL 用于根据 IP 地址、端口号和协议等各种标准来控制和过滤传入和传出流量。它们在网络安全方面发挥着关键作用,使管理员能够管理和限制网络流量,以防止未经授权的访问、潜在攻击和数据泄露。 |
使用 Select AI 的示例
了解如何将 Oracle Select AI 与 OpenAI、Cohere、Azure Open AI 和 OCI Generative AI 等各种 AI 提供商集成,直接从自然语言生成 SQL 查询。
这些示例展示了常见的 Select AI 操作,并指导您使用不同的 AI 提供商设置概要信息以利用这些操作。
示例:选择 AI 操作
以下示例说明可以使用 SELECT AI
执行的 runsql
、showsql
、narrate
、chat
和 explainsql
等操作。这些示例将 sh
方案与 DBMS_CLOUD_AI.CREATE_PROFILE
函数中设置的 AI 提供程序和配置文件属性一起使用。
SQL> select ai how many customers exist;
CUSTOMER_COUNT
--------------
55500
SQL> select ai showsql how many customers exist;
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
SQL> select ai narrate how many customers exist;
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
SQL> select ai chat how many customers exist;
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.
SQL> select ai explainsql how many customers in San Francisco are married;
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
- 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
- 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
Remember to adjust the table and column names based on your actual schema if they differ from the example.
Feel free to ask if you have more questions related to SQL or database in general.
使用准则
提供使用指南,确保有效和正确地使用自然语言提示生成 SQL,以确保增强用户体验。
预期用途
此功能用于生成和运行由用户提供的自然语言提示生成的 SQL 查询。它自动执行用户可以根据其模式元数据以及他们选择的大型语言模型 (LLM) 手动执行的操作。
虽然可以提供任何提示,包括与 SQL 查询结果生成无关的提示,但 Select AI 侧重于 SQL 查询生成。选择 "AI" 可使用 chat
操作提交一般请求。
提示 - 增强数据
数据库使用数据库元数据增强用户指定的提示,以缓解 LLM 的幻觉。然后,向用户指定的 LLM 发送增强提示以生成查询。
数据库仅使用方案元数据来增强提示。此元数据可能包括方案定义、表和列注释以及数据字典和目录中可用的内容。为了生成 SQL,数据库在增加提示时不提供表或视图内容(实际行或列值)。
但是,narrate
操作确实将查询的结果(其中可能包含数据库数据)提供给用户指定的 LLM,从中生成描述查询结果的自然语言文本。
警告:
大型语言模型 (LLM) 经过了广泛的文本文档和内容的培训,通常来自互联网。因此,LLM 可能会包含来自无效或恶意内容的模式,包括 SQL 注入。因此,虽然 LLM 擅长生成有用和相关的内容,但它们也可以生成不正确和错误的信息,包括产生不准确结果和/或损害数据安全性的 SQL 查询。
由用户指定的 LLM 提供程序代表您生成的查询将在您的数据库中运行。贵方对本功能的使用完全由贵方自己承担风险,并且,即使与 Oracle 提供的服务相关的任何其他条款和条件,也构成贵方接受该风险,并且明确排除 Oracle 对因该使用而造成的任何损害的责任或责任。
关于 SQL 生成
现在,LLM 可以利用自然语言与数据库数据进行交互。这意味着您可以使用自然语言(例如普通英语)查询数据库。
使用 Select AI 时,Autonomous Database 可管理将自然语言转换为 SQL 的过程。这意味着您可以提供自然语言提示,而不是 SQL 代码来与数据交互。选择 AI 可作为 SQL 用户和开发人员的工作效率工具,帮助非专家 SQL 用户从数据中获取有用的洞察,而无需了解数据结构或技术语言。
DBMS_CLOUD_AI
package in Autonomous Database enables integration with a user-specified LLM for generating SQL code using natural language prompts.该程序包有助于向 LLM 提供数据库方案的知识,并指示其编写与该方案一致的 SQL 查询。DBMS_CLOUD_AI
程序包与 AI 提供商(例如 OpenAI、Cohere、Azure OpenAI Service 和 Oracle Cloud Infrastructure Generative AI)协同工作。
注意:
用户必须拥有 AI 提供商的账户,并通过 Autonomous Database 使用的DBMS_CLOUD_AI
对象提供凭证。
使用 DBMS_CLOUD_AI 配置 AI 配置文件
Autonomous Database 使用 AI 配置文件来简化和配置对 LLM 的访问,并设置从自然语言提示生成 SQL 语句。
AI 配置文件包括作为自然语言查询目标的数据库对象。这些目标中使用的元数据可以包括数据库表名、列名、列数据类型和注释。可以使用 DBMS_CLOUD_AI.CREATE_PROFILE
和 DBMS_CLOUD_AI.SET_PROFILE
过程创建和配置 AI 配置文件。
配置 DBMS_CLOUD_AI 软件包的要求
运行 DBMS_CLOUD_AI
需要以下命令:
- 访问 Oracle Cloud Infrastructure 云账户和 Autonomous Database 实例。
- 支持的 AI 提供程序的付费 API 账户,其中之一:
-
OpenAI:要允许 OpenAI 从自然语言提示生成 SQL,请从 OpenAI 付费账户获取 API 密钥。
您可以在您的用户设置中找到您的密钥 API。
-
Cohere:要允许 Cohere 从自然语言提示生成 SQL,请从 Cohere 付费账户获取 API 密钥。
单击 Dashboard(显示板),然后单击左侧导航上的 API Keys(API 密钥)。复制默认 API 密钥或创建其他密钥。有关更多信息,请参见 API-Keys 。
-
Azure OpenAI 服务:要启用 Azure OpenAI 服务,可以从自然语言提示生成 SQL,请配置并提供对 AI 提供程序的访问。
要使用 Azure OpenAI 服务,请执行以下步骤:
- 获取密钥 API 密钥。您可以在 Azure 门户的 Resource Management 部分中找到 API 密钥。在 Azure OpenAI 服务资源页面上,单击密钥和端点。您可以复制 KEY1 或 KEY2。
- 创建 Azure OpenAI 服务资源并部署模型:创建和部署 Azure OpenAI 服务资源。
提示:
- 请注意资源名称和部署名称,因为这些参数用于提供网络访问权限并使用
DBMS_CLOUD_AI.CREATE_PROFILE
过程创建 Azure OpenAI 服务配置文件。 - 要了解有关模型上每分钟令牌速率限制的更多信息,请参见 Azure OpenAI 服务配额和限制。
- 请注意资源名称和部署名称,因为这些参数用于提供网络访问权限并使用
- 允许访问 Azure OpenAI 服务:
- 您可以使用密钥 API 密钥来允许访问 Azure OpenAI 服务。要了解详细信息,请参见 Examples of Using Select AI 中的示例。
- OCI 生成式 AI:请参见 How to Generate the API Signing Key 。
- Google:要允许 Google AI Studio 生成对自然语言提示的 SQL 和文本响应,请从 Google AI Studio 付费账户获取 API 密钥。
- 转至 Google AI Studio 。
- 单击“Sign In to Google AI Studio(登录到 Google AI Studio)”。
- 在提示屏幕上单击 "Get API key"。
- 在下一页上选择所有适用的选项。
- 单击 "Create API key"。
-
在新项目中单击“Create API key(创建 API 密钥)”。
屏幕显示进度并生成 API 密钥。复制密钥并保存。
- Anthropic:要允许 Anthropic Developer Console 生成对自然语言提示的 SQL 和文本响应,请从 Anthropic Developer Console 付费账户获取 API 密钥。
- 转至 Anthropic Developer Console 。
- 注册一个帐户,如果你还没有一个。
- 登录后,导航到 API 部分或仪表盘。
- 查找用于生成或查看 API 密钥的选项。
- 单击此项可创建新 API 密钥。
-
复制生成的 API 密钥并保存它。
Claude API 是付费服务。您需要先向账户添加储值,然后才能使用 API 密钥。
- Hugging Face(拥抱面):要允许 Hugging Face 作为 AI 提供商生成对自然语言提示的 SQL 和文本响应,请从 Hugging Face 付费账户获取 API 密钥。
- 转至 Hugging Face 。
- 注册一个帐户,如果你还没有一个。
- 导航到您的账户设置。
- 在导航菜单中找到访问令牌。
- 单击此项可创建新 API 密钥。
- 复制生成的 API 密钥并保存它。
-
- 用于访问外部 AI 提供程序的网络 ACL 权限。
注意:
网络 ACL 不适用于 OCI Generative AI。 - 提供对 AI 提供程序的访问权限的身份证明。
配置 DBMS_CLOUD_AI 软件包
使用 Select AI 之前,以下是启用 DBMS_CLOUD_AI
的步骤。
DBMS_CLOUD_AI
,请执行以下操作:
-
将对
DBMS_CLOUD_AI
软件包的EXECUTE
特权授予要使用 Select AI 的用户。默认情况下,仅向 ADMIN 用户授予
EXECUTE
权限。ADMIN 用户可以将EXECUTE
权限授予其他用户。 -
将网络 ACL 访问权限授予希望使用 Select AI 和 AI 提供程序端点的用户。
ADMIN 用户可以授予网络 ACL 访问权限。有关更多信息,请参见 Oracle Database 19c PL/SQL Packages and Types Reference 或 Oracle Database 23ai PL/SQL Packages and Types Reference 中的 APPEND_HOST_ACE Procedure 。
- 创建身份证明以允许访问 AI 提供程序。
有关更多信息,请参见CREATE_CREDENTIAL Procedure 。
EXECUTE
特权授予 ADB_USER
:grant execute on DBMS_CLOUD_AI to ADB_USER;
以下示例授予 ADB_USER
使用 api.openai.com 端点的权限。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'api.openai.com',
ace => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db)
);
END;
/
APPEND_HOST_ACE 函数参数
Parameter (参数) | 说明 |
---|---|
|
主机,可以是主机的名称或 IP 地址。可以使用通配符指定域或 IP 子网。主机或域名不区分大小写。 对于 OpenAI,请使用 api.openai.com。 对于 Cohere,请使用 api.cohere.ai。 对于 Azure OpenAI 服务,请使用 <azure_resource_name>.openai.azure.com。有关 对于 Google,请使用 generativelanguage.googleapis.com。 对于 Anthropic,请使用 api.anthropic.com。 对于 Hugging Face,请使用 api-inference.huggingface.co。 |
|
访问控制条目 (access control entry,ACE)。提供了 |
下面是如何创建身份证明以允许访问 OpenAI 的示例。
EXEC DBMS_CLOUD.CREATE_CREDENTIAL
('OPENAI_CRED', 'OPENAI', 'your_api_token');
DBMS_CLOUD.CREATE_CREDENTIAL
参数
Parameter (参数) | 说明 |
---|---|
|
要存储的身份证明的名称。 |
|
|
|
|
创建和设置 AI 配置文件
介绍创建和启用 AI 配置文件的步骤。
使用 DBMS_CLOUD_AI.CREATE_PROFILE
创建 AI 配置文件。接下来,启动 DBMS_CLOUD_AI.SET_PROFILE
以启用 AI 配置文件,以便可以将 SELECT AI
与自然语言提示一起使用。
注意:
在使用 SELECT
AI
之前,必须在每个新数据库会话(连接)中运行 DBMS_CLOUD_AI.SET_PROFILE
。
使用 OpenAI 提供程序的以下示例将创建一个名为 OPENAI
的 AI
配置文件,并为当前用户会话设置 OPENAI
配置文件。
-- Create AI profile
--
SQL> 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');
PL/SQL procedure successfully completed.
使用 AI 关键字输入提示
在 SELECT
语句中使用 AI
作为关键字,以使用自然语言提示与数据库进行交互。
SELECT
语句中的 AI
关键字指示 SQL 执行引擎使用活动 AI 概要文件中标识的 LLM 来处理自然语言并生成 SQL。
可以在查询中使用 AI
关键字与 Oracle 客户机(例如 SQL Developer、OML Notebooks 和第三方工具)进行交互,以使用自然语言与数据库进行交互。
注意:
不能使用AI
关键字运行 PL/SQL 语句、DDL 语句或 DML 语句。
语法
SELECT AI action natural_language_prompt
参数
Parameter (参数) | 说明 |
---|---|
|
使用自然语言提示符运行提供的 SQL 命令。这是默认操作,指定此参数是可选操作。 |
|
显示自然语言提示的 SQL 语句。 |
|
提示的输出用自然语言进行解释。此选项将 SQL 结果发送到 AI 提供程序以生成自然语言摘要。 |
|
根据提示直接从 LLM 生成响应。如果 |
|
从提示生成的 SQL 用自然语言进行说明。此选项将生成的 SQL 发送给 AI 提供程序以生成自然语言解释。 |
使用说明
-
Database Actions 或 APEX Service 中不支持选择
AI
。只能使用DBMS_CLOUD_AI.GENERATE
函数。 -
AI
关键字仅在SELECT
语句中受支持。 -
不能使用
AI
关键字运行 PL/SQL 语句、DDL 语句或 DML 语句。 -
序列为
SELECT
,后跟AI
。这些关键字不敏感。配置DBMS_CLOUD_AI.SET_PROFILE
后,SELECT AI
后面的文本是自然语言提示。如果未设置 AI 配置文件,SELECT
AI
将报告以下错误:ORA-00923: FROM keyword not found where expected 00923. 00000 - "FROM keyword not found where expected"
-
根据 Oracle 准则应用特殊字符使用规则。例如,如果在句子中使用撇号,则使用单引号两次。
select ai how many customers in SF don''t own their own home
-
LLM 受到 hallucinations 的约束,结果并不总是正确的:
-
SELECT AI
可能无法为特定的自然语言提示运行生成的 SQL。 -
SELECT AI
可能无法为特定的自然语言提示生成 SQL。
在这种情况下,
SELECT AI
响应信息以帮助您生成有效的 SQL。 -
-
使用
chat
操作和SELECT AI chat
可了解有关 SQL 构造的更多信息。要通过chat
操作获得更好的结果,请使用数据库视图或带有上下文列名的表,或者考虑添加列注释来解释列中存储的值。 -
要访问 DBA 或 USER 视图,请参见 DBMS_CLOUD_AI Views 。