使用 Select AI 从自然语言提示生成 SQL

Autonomous AI Database on Dedicated Exadata Infrastructure Select AI 支持您使用自然语言查询数据。

Select AI 功能允许 Autonomous AI Database 使用具有大语言模型 (LLM) 的生成式 AI 将用户的输入文本转换为 Oracle SQL。选择 AI 将处理自然语言提示,使用元数据补充提示,然后生成并运行 SQL 查询。

关于选择 AI

使用自然语言通过 SQL 与数据库和 LLM 进行交互,以提高用户工作效率并开发基于 AI 的应用。选择 AI 可使用生成式 AI 简化和自动化,包括从自然语言提示生成、运行和解释 SQL、使用向量存储的检索增强生成、生成合成数据或与 LLM 聊天。

使用 Select AI 时, Autonomous AI Database 可管理将自然语言转换为 SQL 的过程。这意味着您可以提供自然语言提示,而不是 SQL 代码来与数据交互。Select AI 可作为 SQL 用户和开发人员的工作效率工具,让非专家 SQL 用户无需了解数据结构或技术语言即可从数据中获取有用的洞察。

选择 AI 还会自动执行检索增强生成 (RAG) 流程,从生成向量嵌入到使用向量存储通过语义相似性搜索根据提示检索相关内容。其他功能包括合成数据生成、支持对话的聊天历史记录以及其他功能,所有这些功能都来自 SQL 界面。

DBMS_CLOUD_AI 程序包支持与用户指定的 LLM 集成,以便使用自然语言提示生成 SQL 代码。对于生成 SQL 的自然语言,此程序包会向包含相关数据库方案元数据的 LLM 提供增强提示。这允许基于自然语言提示生成、运行和解释 SQL 查询。它还可以使用向量存储和合成数据生成来促进检索增强生成,并允许与 LLM 聊天。DBMS_CLOUD_AI 软件包适用于 Select your AI Provider and LLMs 中列出的 AI 提供者。

注意:

  • 您必须拥有 AI 提供者的账户,并通过 Autonomous AI Database 使用的 DBMS_CLOUD_AI 对象提供凭证。

  • 您可以用多种语言提交提示。结果的质量取决于所使用的特定 LLM 或嵌入模型(变压器)的能力。检查您的 LLM 或嵌入模型文档以获得多语言支持。

受支持的平台

Autonomous AI Database Serverless 和 Autonomous AI Database 在 Dedicated Exadata Infrastructure 和 Cloud at Customers 上支持 Select AI。

  • Autonomous AI Database(自治 AI 数据库) 无服务器
  • Autonomous AI Database 基于专用 Exadata 基础设施
  • 基于专用 Exadata 基础设施的自治 AI 数据库区域
  • 自治 AI 数据库 Cloud@Customer

术语

在使用 Select AI 之前,了解与 Select AI 一起使用的各种术语非常重要。

以下是与“选择 AI”功能相关的术语:

术语 定义

数据库身份证明

数据库身份证明是用于访问数据库并与数据库进行交互的验证身份证明。它们通常由用户名和密码组成,有时由其他验证因素(如安全令牌)补充。这些身份证明用于在应用程序或用户与数据库之间建立安全连接,确保只有授权的个人或系统才能访问和处理数据库中存储的数据。

LLM 的发音

大语言模型上下文中的幻觉是指模型生成不正确、无意义或与输入提示无关的文本的现象。尽管是模型试图生成一致文本的结果,但这些实例可以包含虚构、误导或纯粹想象的信息。幻觉可能是由于训练数据存在偏见,缺乏适当的上下文理解,或者模型训练过程存在局限性。

IAM Oracle Cloud Infrastructure Identity and Access Management (IAM) 支持您控制谁可以访问您的云资源。您可以控制一组用户具有哪些类型的访问权限以及哪些特定资源。要了解更多信息,请参阅身份和访问管理概览

自然语言提示

自然语言提示是人类可读的指令或请求,用于指导生成式 AI 模型,例如大型语言模型。用户无需使用特定的编程语言或命令,而是可以通过以更会话或自然语言形式输入提示来与这些模型进行交互。然后,模型将根据提供的提示生成输出。

网络访问控制列表 (ACL)

网络访问控制列表是一组规则或权限,用于定义允许哪些网络流量通过网络设备(例如路由器、防火墙或网关)。ACL 用于根据 IP 地址、端口号和协议等各种标准来控制和过滤传入和传出流量。它们在网络安全方面发挥着关键作用,使管理员能够管理和限制网络流量,以防止未经授权的访问、潜在攻击和数据泄露。

相似性搜索

相似性搜索通过比较向量存储中的特征向量来标识和检索与给定查询密切匹配的数据点。

矢量距离

向量距离通过计算特征向量在多维空间中的距离来测量特征向量之间的相似性或差异。

向量索引

向量索引组织和存储特征向量,以便高效地搜索和检索相关数据。

向量存储

向量存储包括用于存储、管理和启用涉及向量嵌入的语义相似性搜索的系统。这包括独立的向量数据库和 Oracle Database 23ai AI Vector Search。

选择 AI 用例

选择 AI 可增强数据交互,使开发人员能够直接从 SQL 构建 AI 驱动的应用,将自然语言提示转换为 SQL 查询和文本响应,支持与 LLM 的聊天交互,使用 RAG 增强当前数据的响应准确性,以及生成合成数据。

使用场景包括:

  • 从自然语言提示生成 SQL

    开发人员工作效率:选择 AI 可以快速提供“启动”SQL 查询,从而显著提高开发人员工作效率。开发人员可以输入自然语言提示,而 Select AI 将根据数据库方案表和视图生成 SQL。这减少了从头开始编写复杂查询所需的时间和工作,使开发人员能够专注于优化生成的查询以满足其特定需求。

    面向最终用户的自然语言查询:Select AI 可让最终用户使用自然语言查询与应用的底层数据表和视图进行交互。利用此功能,没有 SQL 专业知识的用户可以直接提出问题并检索数据,从而相对于所使用的 LLM 功能和可用的方案元数据的质量而言,数据访问更加直观且用户友好。

    用于 SQL 生成的其他功能:自然语言到 SQL 生成还支持以下突出显示的功能:

    • 指定方案或表或视图:通过选择 AI,可以指定包含方案以及该方案中的表或视图(可选)的对象列表。

    • 自动检测相关表元数据:选择 AI 将自动检测相关表,并仅在 Oracle Database 23ai 中为与查询相关的特定表发送元数据。

    • 限制表访问:通过选择 AI,您可以通过仅考虑 AI 概要信息属性中列出的用于 SQL 生成的表来限制表访问。
    • 为列指定区分大小写:选择 AI 可使用户指定区分大小写,以便 LLM 从数据库和 LLM 生成不区分大小写的响应。
  • 对话

    使用 Select AI 启用类似于聊天机器人的功能,使用户能够进行自然对话来查询数据和执行操作。这些聊天可以跟踪上下文,提供后续答案,以澄清或扩展原始问题。此场景可增强互动,并通过对话简化复杂查询。

  • 使用 Select AI Agent 的代理工作流

    使用 Select AI Agent 为多步骤方案(例如数据检索和通知)协调代理、工具(SQL、RAG、Websearch、Notifications)和任务。要了解详细信息,请参见 Select AI Agent

  • 定制媒体生成

    Select AI 可用于生成个性化媒体内容,例如针对各个客户详细信息量身定制的电子邮件。例如,在提示中,您可以指示 LLM 创建友好且乐观的电子邮件,鼓励客户尝试一组推荐的产品。这些建议可以基于客户人口统计数据或数据库中提供的其他特定信息。此级自定义功能可直接向客户提供相关且富有吸引力的内容,从而增强客户互动。

  • 生成代码

    通过 Select AI chat 操作,您可以使用 Select AI 要求指定的 LLM 从自然语言提示生成代码。此功能支持各种编程语言,例如 SQL、Python、R 和 Java。示例包括:

    • Python Code :编写 Python 代码,在 DataFrame 上计算一个包含 ACTUAL 和 PREDICTED 列的混淆矩阵。
    • SQL DDL :为 SQL 表编写 DDL,其中包含列名称、年龄、收入和国家(地区)。
    • SQL 查询:“编写 SQL 查询,该查询将使用名为 CHURN_DT_MODEL 的 Oracle Machine Learning 数据库内模型来预测哪些客户会流失,以及可能性有多大。”
  • 检索增强生成 (RAG)

    使用向量存储内容进行语义相似性搜索,以提高 LLM 响应的及时准确性和相关性。

  • 综合数据生成

    使用与方案相符的 LLM 生成合成数据,以进行解决方案测试、概念验证和其他用途。合成数据可以支持在没有真实数据的情况下对应用程序进行更好的测试,从而提高应用程序的整体质量。

    合成数据生成还可用于填充 Autonomous AI Database 克隆或元数据克隆。选择 AI 支持为此类克隆生成合成数据。使用合成数据有助于保护敏感数据,同时支持开发、测试和验证用户体验。它也适用于需要样本数据进行模型训练或测试数据进行评分的 AI 和机器学习项目。

使用准则

提供使用指南,确保有效和正确地使用自然语言提示生成 SQL,以确保增强用户体验。

预期用途

此功能用于生成和运行由用户提供的自然语言提示生成的 SQL 查询。它自动执行用户可以根据其模式元数据以及他们选择的大型语言模型 (LLM) 手动执行的操作。

虽然可以提供任何提示,包括与 SQL 查询结果生成无关的提示,但 Select AI 侧重于 SQL 查询生成。选择 "AI" 可使用 chat 操作提交一般请求。

提示 - 增强数据

数据库使用数据库元数据增强用户指定的提示,以缓解 LLM 的幻觉。然后,向用户指定的 LLM 发送增强提示以生成查询。

数据库仅使用方案元数据来增强提示。此元数据可能包括方案定义、表和列注释以及数据字典和目录中可用的内容。为了生成 SQL,数据库在增加提示时不提供表或视图内容(实际行或列值)。

但是,narrate 操作确实将查询的结果(其中可能包含数据库数据)提供给用户指定的 LLM,从中生成描述查询结果的自然语言文本。

警告:

大型语言模型 (LLM) 经过了广泛的文本文档和内容的培训,通常来自互联网。因此,LLM 可能会包含来自无效或恶意内容的模式,包括 SQL 注入。因此,虽然 LLM 擅长生成有用和相关的内容,但它们也可以生成不正确和错误的信息,包括产生不准确结果和/或损害数据安全性的 SQL 查询。

由用户指定的 LLM 提供程序代表您生成的查询将在您的数据库中运行。贵方对本功能的使用完全由贵方自己承担风险,并且,即使与 Oracle 提供的服务相关的任何其他条款和条件,也构成贵方接受该风险,并且明确排除 Oracle 对因该使用而造成的任何损害的责任或责任。

选择您的 AI 提供商和 LLM

选择符合安全标准并符合特定需求(如文本或代码生成)的 AI 提供商和 LLM。

不同的 LLM 擅长基于其训练数据和预期目的的各种任务。一些模型对于文本生成非常出色,但在代码生成方面可能表现不佳,而其他模型则专门针对编码任务进行了优化。选择最适合您需求的 LLM。

AI 提供方 LLM RAG 的嵌入模型 用途

OCI 生成式 AI

  • meta.llama-3.3-70b-instruct(默认值)
  • meta.llama-3.2-90b-vision-instruct 命令
  • meta.llama-3.2-11b-vision-instruct 命令
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k(已废弃)
  • cohere.command – r-plus(已废弃)
  • xai.grok-3
  • xai.grok-3-fast
  • xai.grok-3-mini
  • xai.grok-3- 超快
  • cohere.embed-english-v3.0(默认值)
  • cohere.embed-multilingual-v3.0
  • cohere.embed-english-light-v3.0
  • cohere.embed-multilingual-light-v3.0

请参阅关于在生成式 AI 中嵌入模型

OCI Generative AI Chat 模型支持所有 SELECT AI 操作,例如 runsqlshowsqlexplainsqlnarratechat

OCI 生成文本模型仅支持 SELECT AI chat 操作。

要配置配置文件属性,请参见

Azure OpenAI 服务

  • GPT-4o
  • GPT-4
  • GPT-4 带视觉功能的涡轮增压器
  • GPT-3.5-Turbo

文本嵌入 -ada-002

最适合从自然语言提示、chat 操作和 Select AI RAG 生成 SQL。

OpenAI

  • gpt-3.5-turbo(默认)
  • gpt-4o
  • gpt-4o-mini
  • gpt-4
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0613
  • gpt-3.5-turbo-16k
  • gpt-3.5-turbo-16k-0613

文本嵌入 -ada-002

最适合从自然语言提示、chat 操作和 Select AI RAG 生成 SQL。

OpenAI 兼容

与 OpenAI 兼容的提供程序提供的模型,例如:
  • 烟花 AI
  • xAI
  • 其他人
从 OpenAI 兼容提供程序嵌入模型。例如,请参阅 Fireworks AI embedding models

支持各种用例。

Cohere

  • 命令(默认)
  • 命令每晚(实验性)
  • 命令 -r
  • 命令加
  • 命令灯
  • 每晚命令(实验性)
  • 自定义模型

embed-english-v2.0

最适合 chat 操作。

Google

  • gemini-1.5-flash(默认值)
  • 双子座 -1.5-pro
  • 双子座 -1.0-pro
text-embedding-004(默认)

最适合从自然语言提示、chat 操作和 Select AI RAG 生成 SQL。

人造

  • claude-3-5-sonnet-20240620(默认值)
  • claude-3-opus-20240229
  • claude-3-sonnet-20240229
  • claude-3-haiku-20240307
NA

最适合从自然语言提示、chat 操作和 Select AI RAG 生成 SQL。

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1(默认值)
  • Meta-Llama-3-70B- 说明
  • Qwen1.5-1.8B
  • 其他聊天模型
NA

最适合从自然语言提示、chat 操作和 Select AI RAG 生成 SQL。

AWS

  • amazon.titan-embed-text-v1
  • amazon.titan-embed-text-v2:0
  • cohere.embed- 英语 -v3

支持各种用例。

注意:

  • 通过 provider_endpoint 而非 provider 参数指定与 OpenAI 兼容的提供程序。请参阅

  • 对于接受图像的模型,请使用 meta.llama-3.2-90b-vision-instruct。该模型专门针对视觉和图像进行训练。虽然它可以用于文本和 SQL 生成,但该模型最适合图像。要了解更多信息,请参阅在 OCI Generative AI 中聊天

    meta.llama-3.2-11b-vision-instruct 模型提供了强大的多模式功能。

  • 嵌入模型也称为变压器模型。

使用 DBMS_CLOUD_AI 配置 AI 配置文件

Autonomous AI Database 使用 AI 配置文件来简化和配置对 LLM 的访问,并设置基于自然语言提示生成、运行和解释 SQL。它还可以使用嵌入模型和向量索引来促进检索增强生成,并允许与 LLM 聊天。

AI 配置文件包括作为自然语言查询目标的数据库对象。这些目标中使用的元数据可以包括数据库表名、列名、列数据类型和注释。可以使用 DBMS_CLOUD_AI.CREATE_PROFILEDBMS_CLOUD_AI.SET_PROFILE 过程创建和配置 AI 配置文件。

要求 DBMS_CLOUD_AI

运行 DBMS_CLOUD_AI 需要以下命令:

  • 访问 Oracle Cloud Infrastructure 云账户和 Autonomous AI 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 服务,请执行以下步骤:

      1. 获取密钥 API 密钥。您可以在 Azure 门户的 Resource Management 部分中找到 API 密钥。在 Azure OpenAI 服务资源页面上,单击密钥和端点。您可以复制 KEY1 或 KEY2。
      2. 创建 Azure OpenAI 服务资源并部署模型:创建和部署 Azure OpenAI 服务资源

        提示:

        • 请注意资源名称和部署名称,因为这些参数用于提供网络访问权限并使用 DBMS_CLOUD_AI.CREATE_PROFILE 过程创建 Azure OpenAI 服务配置文件。
        • 要了解有关模型上每分钟令牌速率限制的更多信息,请参见 Azure OpenAI 服务配额和限制
      3. 允许访问 Azure OpenAI 服务:
        • 您可以使用密钥 API 密钥来允许访问 Azure OpenAI 服务。要了解更多信息,请参见中的示例。
    • OCI 生成式 AI:请参见 How to Generate the API Signing Key
    • Google:要允许 Google AI Studio 生成对自然语言提示的 SQL 和文本响应,请从 Google AI Studio 付费账户获取 API 密钥。
      1. 转至 Google AI Studio
      2. 单击“Sign In to Google AI Studio(登录到 Google AI Studio)”。
      3. 在提示屏幕上单击 "Get API key"。
      4. 在下一页上选择所有适用的选项。
      5. 单击 "Create API key"。
      6. 在新项目中单击“Create API key(创建 API 密钥)”。

        屏幕显示进度并生成 API 密钥。复制密钥并保存。

    • Anthropic:要允许 Anthropic Developer Console 生成对自然语言提示的 SQL 和文本响应,请从 Anthropic Developer Console 付费账户获取 API 密钥。
      1. 转至 Anthropic Developer Console
      2. 注册一个帐户,如果你还没有一个。
      3. 登录后,导航到 API 部分或仪表盘。
      4. 查找用于生成或查看 API 密钥的选项。
      5. 单击此项可创建新 API 密钥。
      6. 复制生成的 API 密钥并保存它。

        Claude API 是付费服务。您需要先向账户添加储值,然后才能使用 API 密钥。

    • Hugging Face(拥抱面):要允许 Hugging Face 作为 AI 提供商生成对自然语言提示的 SQL 和文本响应,请从 Hugging Face 付费账户获取 API 密钥。
      1. 转至 Hugging Face
      2. 注册一个帐户,如果你还没有一个。
      3. 导航到您的账户设置。
      4. 在导航菜单中找到访问令牌。
      5. 单击此项可创建新 API 密钥。
      6. 复制生成的 API 密钥并保存它。
    • AWS:要启用 AWS,请获取 API 密钥和模型 ID。

      获取 API 密钥并使用它来通过 DBMS_CLOUD.CREATE_CREDENTIAL 创建身份证明。

      按照以下过程获取您的 API 密钥和模型名称:

      1. 如果您还没有 AWS 账户,请注册 AWS 账户。
      2. AWS Bedrock Console 创建访问密钥和密钥。
      3. 复制生成的密钥并保存。
      4. 请求访问其基础模型。请参阅访问 Amazon Bedrock 基础模型
      5. 获取模型 ID。在 DBMS_CLOUD_AI.CREATE_PROFILE 过程中需要模型 ID。模型 ID 取决于您使用的资源。如果使用:

        注意:

        Bedrock Converse API 不支持导入的模型。

      要使用 AWS 作为提供商,请参阅示例:使用 AWS 选择 AI

  • 用于访问外部 AI 提供程序的网络 ACL 权限。

    注意:

    网络 ACL 不适用于 OCI Generative AI。
  • 提供对 AI 提供程序的访问权限的身份证明。
要配置 DBMS_CLOUD_AI ,请执行以下操作:
  1. 将对 DBMS_CLOUD_AI 软件包的 EXECUTE 特权授予要使用 Select AI 的用户。

    默认情况下,仅向 ADMIN 用户授予 EXECUTE 权限。ADMIN 用户可以将 EXECUTE 权限授予其他用户。

    以下示例将 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;
    /
    
  2. 将网络 ACL 访问权限授予希望使用 Select AI 和 AI 提供程序端点的用户。

    ADMIN 用户可以授予网络 ACL 访问权限。有关详细信息,请参阅 Oracle Database 19c PL/SQL Packages and Types ReferenceOracle Database 26ai PL/SQL Packages and Types Reference 中的 APPEND_HOST_ACE Procedure

  3. 创建身份证明以允许访问 AI 提供程序。

    有关更多信息,请参见CREATE_CREDENTIAL Procedure

    下面是如何创建身份证明以允许访问 OpenAI 的示例。

    EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');

APPEND_HOST_ACE 函数参数

Parameter (参数) 说明

host

主机,可以是主机的名称或 IP 地址。可以使用通配符指定域或 IP 子网。主机或域名不区分大小写。

对于 OpenAI,请使用 api.openai.com

对于 Cohere,请使用 api.cohere.ai

对于 Azure OpenAI 服务,请使用 <azure_resource_name>.openai.azure.com。有关 azure_resource_name 的更多信息,请参见 Profile Attributes

对于 Google,请使用 generativelanguage.googleapis.com

对于 Anthropic,请使用 api.anthropic.com

对于 Hugging Face,请使用 api-inference.huggingface.co

ace

访问控制条目 (Access Control Entry,ACE)。提供了 XS$ACE_TYPE 类型以构造 ACL 的每个 ACE 条目。有关更多详细信息,请参阅《 Oracle Database 19c Real Application Security Administrator's and Developer's Guide 》《 Oracle Database 26ai Real Application Security Administrator's and Developer's Guide 》中的 Creating ACLs and ACEs

DBMS_CLOUD.CREATE_CREDENTIAL 参数

Parameter (参数) 说明

credential_name

要存储的身份证明的名称。credential_name 参数必须符合不允许使用空格或连字符的 Oracle 对象命名约定。

username

usernamepassword 参数一起指定 AI 提供程序身份证明。

username 是用户指定的用户名。

password

usernamepassword 参数一起指定 AI 提供程序身份证明。

password 是您的 AI 提供商密钥,依赖于提供商,即 OpenAI、Cohere、Azure OpenAI Service 、OCI、Google、Anthropic 或 Hugging Face。有关详细信息,请参见

创建和设置 AI 配置文件

介绍创建和启用 AI 配置文件的步骤。

使用 DBMS_CLOUD_AI.CREATE_PROFILE 创建 AI 配置文件。接下来,启动 DBMS_CLOUD_AI.SET_PROFILE 以启用 AI 配置文件,以便可以将 SELECT AI 与自然语言提示一起使用。

注意:

在使用 SELECT AI 之前,必须在每个新数据库会话(连接)中运行 DBMS_CLOUD_AI.SET_PROFILE

使用 OpenAI 提供程序的以下示例将创建一个名为 OPENAIAI 配置文件,并为当前用户会话设置 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 语句。

语法

运行 AI 提示符的语法为:
SELECT AI action natural_language_prompt

参数

以下是可用于 action 参数的参数:
Parameter (参数) 说明

runsql

使用自然语言提示符运行提供的 SQL 命令。这是默认操作,指定此参数是可选操作。

showsql

显示自然语言提示的 SQL 语句。

narrate

提示的输出用自然语言进行解释。此选项将 SQL 结果发送到 AI 提供程序以生成自然语言摘要。

chat

根据提示直接从 LLM 生成响应。如果 DBMS_CLOUD_AI.CREATE_PROFILE 函数中的 conversation 设置为 true,则此选项包括以前交互或提示中的内容,可能包括方案元数据。

explainsql

从提示生成的 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

示例:选择 AI 操作

以下示例说明了常见的 Select AI 操作。

以下示例说明可以对 SELECT AI 执行的操作,例如 runsql(默认值)、showsqlnarratechatexplainsqlfeedbacksummarize。这些示例将 sh 方案与 DBMS_CLOUD_AI.CREATE_PROFILE 函数中指定的 AI 提供程序和配置文件属性结合使用。在当前会话中使用 DBMS_CLOUD_AI.SET_PROFILE 过程设置 AI 配置文件后,使用 Select AI 操作。

要生成文本摘要,请使用 SELECT AI SUMMARIZE <TEXT>

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.

-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
 
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id  1v1z68ra6r9zf;
 
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;

SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
 
... (skipped 1000 rows in the middle)
 
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
 
 
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.

示例:使用 AWS 选择 AI

此示例说明如何使用 AWS 使用 AWS 提供的模型从自然语言提示或聊天中生成、运行和解释 SQL。

以下示例说明如何将 AWS 用作 Amazon Bedrock 及其基础模型的 AI 提供者。此示例显示如何创建 AWS 凭证、提供网络访问、创建 AI 配置文件,以及使用 Select AI 操作从自然语言提示生成 SQL 查询以及使用 AWS 基础模型进行聊天。

要使用 AWS,请获取访问密钥、密钥和模型 ID。请参阅。将模型 ID 用作 DBMS_CLOUD_AI.CREATE_PROFILE 过程中的 model 属性。必须显式指定 model 属性,因为未提供默认模型。

--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--
-- Create Credential for AI provider
--
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'AWS_CRED',
        username    => '<your_AWS_access_key>',
        password    => '<your_AWS_secret_key>'
      );
END;
/
 
PL/SQL procedure successfully completed.
 
 
--
-- Grant Network ACL for AWS
--
BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'bedrock-runtime.us-east-1.amazonaws.com',
        ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                    principal_name => 'ADB_USER',
                    principal_type => xs_acl.ptype_db)
       );
END;
/
 
PL/SQL procedure successfully completed.
 


--
-- Create AI profile 
--
BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =>'AWS',
        attributes   =>'{"provider": "aws",
          "credential_name": "AWS_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"}],
           "model" : "anthropic.claude-v2",
           "conversation" : "true"
          }');
END;
/
 
 
PL/SQL procedure successfully completed.


--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');

PL/SQL procedure successfully completed.
 
--
-- Use AI
--

SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500


SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46

SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"

SELECT AI explainsql how many customers in San Francisco are married;

"RESPONSE""SELECT 
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'

Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes 
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""

SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:

1. Bert Katz
2. Madallyn Ladd  
3. Henrietta Snodgrass

SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:

- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.

- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.

- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.

- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands. 

- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.

- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.

- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.

- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.

- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.

So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."

--
--Clear the profile
--
BEGIN
   DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.

--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
 
PL/SQL procedure successfully completed.