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

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

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

受支持的平台

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

关于 SQL 生成

现在,LLM 可以利用自然语言与数据库数据进行交互。这意味着您可以使用自然语言(例如普通英语)查询数据库。

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

The DBMS_CLOUD_AI package in Autonomous AI Database enables integration with a user-specified LLM for generating SQL code using natural language prompts. 该程序包有助于向 LLM 提供数据库方案的知识,并指示它编写与该方案一致的 SQL 查询。DBMS_CLOUD_AI 软件包适用于 OpenAI、Cohere、Azure OpenAI Service 和 Oracle Cloud Infrastructure Generative AI 等 AI 提供商。

注意:

用户必须拥有 AI 提供商的账户,并通过 Autonomous AI Database 使用的 DBMS_CLOUD_AI 对象提供身份证明。

术语

在使用 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。

使用准则

提供使用指南,确保有效和正确地使用自然语言提示生成 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 模型提供了强大的多模式功能。

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

选择 AI 概念

探讨与 Select AI 相关的概念和术语。

关于 SQL 生成

使用自然语言与数据库数据进行交互现在可以使用 LLM 实现。这意味着您可以使用自然语言(例如普通英语)查询数据库。

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

The DBMS_CLOUD_AI package in Autonomous AI Database enables integration with a user-specified LLM for generating SQL code using natural language prompts. 该程序包有助于向 LLM 提供数据库方案的知识,并指示它编写与该方案一致的 SQL 查询。DBMS_CLOUD_AI 软件包适用于 OpenAI、Cohere、Azure OpenAI Service 和 Oracle Cloud Infrastructure Generative AI 等 AI 提供商。

注意:

用户必须拥有 AI 提供商的账户,并通过 Autonomous AI Database 使用的 DBMS_CLOUD_AI 对象提供身份证明。

使用 DBMS_CLOUD_AI 配置 AI 配置文件

Autonomous AI Database 使用 AI 配置文件来简化和配置对 LLM 的访问,并设置从自然语言提示生成 SQL 语句。

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 软件包

使用 Select AI 之前,以下是启用 DBMS_CLOUD_AI 的步骤。

要配置 DBMS_CLOUD_AI ,请执行以下操作:
  1. 将对 DBMS_CLOUD_AI 软件包的 EXECUTE 特权授予要使用 Select AI 的用户。

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

  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

以下示例将 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 (参数) 说明

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

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

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

DBMS_CLOUD.CREATE_CREDENTIAL 参数

Parameter (参数) 说明

credential_name

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

username

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

username 是用户指定的用户名。

password

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

password 是 AI 提供商的密钥 API,具体取决于提供商,即 OpenAI、Cohere、Azure OpenAI Service 、OCI、Google、Anthropic 或 Hugging Face。有关详细信息,请参见 Requirements to Configure DBMS_CLOUD_AI Package

创建和设置 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

选择具有检索增强生成 (RAG) 的 AI

使用 RAG 选择 AI 可以通过使用语义相似性搜索从指定的向量存储检索内容来增强自然语言提示。这可以通过使用您的特定和最新的内容来减少幻觉,并为您的提示提供更相关的自然语言响应。

选择 AI 会自动执行检索增强生成 (RAG) 处理。此技术使用 AI 向量搜索从企业源检索数据,并增强用户对指定大语言模型 (LLM) 的提示。通过利用企业数据存储中的信息,RAG 可减少幻觉并生成接地响应。

RAG 使用向量索引上的 AI 向量搜索来查找指定问题的语义相似数据。矢量存储处理矢量嵌入,这些嵌入是文本、图像和音频等各种数据点的数学表示。这些嵌入捕获数据的含义,从而实现高效的处理和分析。有关向量嵌入和 AI 向量搜索的更多详细信息,请参阅 AI Vector Search 概述

Select AI 与 Oracle Autonomous AI Database 26ai 中提供的 AI 向量搜索集成,以便使用向量嵌入进行相似性搜索。

主题

选择 AI RAG 的优势

通过查看 LLM 使用的源来简化查询,提高响应准确性,并提高透明度。

Select AI RAG 具有以下优势:
  • 简化数据查询并提高响应准确性:使用户能够使用自然语言查询企业数据,并向 LLM 提供来自企业数据的详细上下文,以生成更准确、更相关的响应,从而减少 LLM 幻觉的实例。

  • 最新信息:使用向量存储为 LLM 提供对当前企业信息的访问,无需对基于静态数据集训练的 LLM 进行成本高昂、耗时的微调。

  • 无缝集成:与 Oracle AI Vector Search 集成,以简化数据处理并提高性能。

  • 自动化数据编排:使用完全托管的矢量索引管道自动执行编排步骤,确保高效处理新数据。

  • 可理解的上下文结果:可以从向量存储中访问和检索 LLM 使用的源,确保结果的透明度和可信度。以自然语言文本或 JSON 格式查看和提取数据,从而简化集成和应用开发。

构建向量存储

Select AI 可以将输入文档(例如 PDF、DOC、JSON、XML 或 HTML)从对象存储转换为纯文本,从而自动创建和填充向量存储。Oracle Text 支持大约 150 种文件类型。有关所有支持的文档格式的完整列表,请参阅支持的文档格式

选择 AI 会自动处理文档进行块、生成嵌入、将文档存储在指定的向量存储中,并在新数据到达时更新向量索引。

以下是对象存储中的输入如何与 Select AI RAG 一起使用:

  1. 输入:数据最初存储在对象存储中。
  2. Oracle Autonomous Database 检索输入数据或文档,对其进行分块,并将块发送到嵌入模型。
  3. 嵌入模型处理块数据并返回向量嵌入。
  4. 然后将向量嵌入存储在向量存储中,以便与 RAG 一起使用。在添加内容时,将自动更新向量索引。

RAG 从企业数据库中检索相关信息,以回答用户的问题。此信息随用户提示一起提供给指定的大型语言模型。选择 AI 会使用此附加的企业信息来增强提示,从而改进 LLM 的响应。RAG 可以通过向量存储中的最新企业信息来提高响应质量。



选择 AI 将按如下方式实施 RAG:
  1. 输入:用户使用 Select AI narrate 操作询问问题(指定提示)。

  2. 选择 AI 会使用 AI 配置文件中指定的嵌入模型生成提示的向量嵌入。

  3. 向量搜索索引使用问题的向量嵌入从已编制索引的客户企业数据(搜索向量存储)中查找匹配的内容。

  4. 向量搜索将返回与 Autonomous AI Database 实例的输入内容类似的前 K 个文本。
  5. 然后, Autonomous AI Database 会将这些包含用户问题的前 K 个查询结果发送给 LLM。
  6. LLM 会返回对 Autonomous AI Database 实例的响应。
  7. Autonomous AI Database Select AI 为用户提供响应。

使用 DBMS_CLOUD_AI 创建和管理向量索引

使用 DBMS_CLOUD_AI 软件包可创建和管理向量索引并配置向量数据库 JSON 参数。

创建身份证明并提供对向量数据库和 AI 提供者的网络访问权限后,您的 Autonomous AI Database 实例将使用 AI 配置文件来配置对 LLM 的访问权限。有关在 Select AI 语句中设置和使用它的完整示例,请参见

注意:

如果不希望将表数据或向量搜索文档发送到 LLM,则具有管理员权限的用户可以为给定数据库的所有用户禁用此类访问权限。实际上,这将禁用 RAG 的 narrate 操作。

您可以通过 DBMS_CLOUD_AI 软件包为 Select your AI Provider and LLMs 中列出的提供程序配置 AI 配置文件。

另请参阅:

  • 创建向量索引:

  • 管理向量索引概要信息和其他 AI 配置文件:
  • 查询向量索引视图:

使用数据库内变压器模型

通过选择 AI RAG,您可以使用 Oracle Database 23ai 实例中导入到数据库的预训练 ONNX 转换器模型,从文档块和用户提示生成嵌入向量。

注意:

必须将预训练的 ONNX 格式转换器模型导入 Oracle Database 23ai 实例,才能将 Select AI RAG 与导入的数据库内转换器模型结合使用。您还可以使用来自受支持 AI 提供者的其他转换器模型。

请参见 Example:Select AI with In-database Transformer Models 以了解该功能。

综合数据生成

使用随机生成器、算法、统计模型和大型语言模型 (LLM) 生成合成数据,以模拟实际数据,从而有效地开发和测试解决方案。

注意:

Oracle Database 19c(从版本 19.29 开始)和 Oracle Database 26ai(从版本 23.26 开始)都支持合成数据生成。

在开发和测试解决方案时,合成数据可能是一个强大的工具,特别是当实际数据尚不存在或不允许使用时。合成或人工生成的数据可以具有真实数据的许多特征。合成数据通常使用随机生成器、算法或统计模型创建,以模拟真实数据的特征和分布。然而,生产或依赖具有不同复杂功能的工具可能很复杂。随着大语言模型 (Large Language Models,LLM) 的可用性,可能会生成更多相关且特定于方案的数据,这些数据将考虑自然语言中表达的特征。

主题

合成数据的生成优势

综合数据生成支持填充数据库元数据克隆,支持开发、测试和机器学习项目,而无需使用原始表中的敏感数据。

合成数据生成具有以下优势:
  • 使用合成数据填充元数据克隆:元数据克隆复制数据库或方案的结构,而不包括实际数据。选择 AI 可以生成合成数据来填充这些克隆,从而在启用开发、测试和创建模板的同时保护敏感数据。此方法支持性能和可扩展性测试。

  • 启动新项目:启动新项目时,实际数据可能不可用。综合数据提供了逼真的示例,可帮助演示概念并获得项目提案支持。

  • 验证用户体验:综合数据通过提供各种数据集来发现设计缺陷、性能和可扩展性问题,有助于测试用户界面。

  • 支持 AI 和机器学习项目:当实际数据不可用或受限时,合成数据可用于训练 AI 和机器学习模型。LLM 可以生成具有特定模式的数据,以促进模型训练和评分。

生成合成数据

使用 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA 函数生成合成数据并使用 Select AI 操作查询数据。

要了解详细信息,请参阅 GENERATE_SYNTHETIC_DATA 函数示例:生成合成数据

对合成数据生成进行监视和故障排除

当跨多个表生成大量数据时,Select AI 会将合成数据生成任务拆分为较小的块并并行运行任务。在 SYNTHETIC_DATA$<operation_id>_STATUS 表中跟踪每个块的状态。

合成数据生成操作记录在表 DBA_LOAD_OPERATIONSUSER_LOAD_OPERATIONS 中。使用这些表监视 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA 操作。有关更多详细信息,请参见跟踪 DBMS_CLOUD Load Operations

在给定会话中运行合成数据生成后,可以使用以下方法从 USER_LOAD_OPERATION 获取最新的 <operation_id>
SELECT max(id) FROM user_load_operations;

要查看在其他会话中运行的合成数据操作,请使用 DBA_LOAD_OPERATIONS 视图。

查看合成数据的生成状态

合成数据生成操作的状态表显示每个表的进度及其相应的块。USER_LOAD_OPERATIONSDBA_LOAD_OPERATIONS 中的 STATUS_TABLE 列显示状态表名称。表名是 SYNTHETIC_DATA$<operation_id>_STATUS,它具有以下列:

名称 数据类型 说明

ID

NUMBER

记录的唯一标识符。

NAME

VARCHAR2

表的限定名称,例如 "ADB_USER"."EMPLOYEES"

BYTES

NUMBER

此数据生成任务的所需记录数量

ROWS_LOADED

NUMBER

生成的实际记录数。

CHECKSUM

VARCHAR2

此数据生成任务期间主键的起始值。

LAST_MODIFIED

TIMESTAMP WITH TIME ZONE

指示上次修改记录的时间戳。

STATUS

VARCHAR2

数据生成任务的状态。有效值是:
  • COMPLETED
  • FAILED
  • PENDING
  • SKIPPED

ERROR_CODE

NUMBER

错误代码,如果数据生成任务失败。

ERROR_MESSAGE

VARCHAR2

如果任务失败,则提供错误消息。

END_TIME

TIMESTAMP WITH TIME ZONE

标记数据生成任务结束的时间戳。
示例:检查为每个表生成的记录数

要检查为每个表生成的记录数,请发出以下命令:

SELECT name, SUM(rows_loaded) FROM synthetic_data$<operation_id>_status group by name;

查询 ROWS_LOADED 以确认为每个块加载的行数,查询 SUM(ROWS_LOADED) 以确认每个表的行数。

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "DIRECTOR","record_count":150},
                         {"owner": "ADB_USER", "name": "MOVIE_ACTOR","record_count":300},
                         {"owner": "ADB_USER", "name": "CLASSES", "user_prompt":"all in fall semester","record_count":5},
                         {"owner": "ADB_USER", "name": "ACTOR","record_count":220},
                         {"owner": "ADB_USER", "name": "MOVIE","record_count":50}]'
    );
END;
/
 
 
-- Check loaded rows for each chunk
SQL> SELECT name, rows_loaded FROM synthetic_data$141_status order by name;
NAME                           ROWS_LOADED
------------------------------------------
"ADB_USER"."ACTOR"                        188
"ADB_USER"."ACTOR"                         32
"ADB_USER"."CLASSES"                        5
"ADB_USER"."DIRECTOR"                     150
"ADB_USER"."MOVIE"                         50
"ADB_USER"."MOVIE_ACTOR"                   38
"ADB_USER"."MOVIE_ACTOR"                  114
"ADB_USER"."MOVIE_ACTOR"                  148
 
 
 
-- Check loaded rows for each table
SQL> SELECT name, SUM(rows_loaded) FROM synthetic_data$141_status group by name;
 
NAME                      SUM(ROWS_LOADED)
------------------------------------------
"ADB_USER"."DIRECTOR"                     150
"ADB_USER"."MOVIE_ACTOR"                  300
"ADB_USER"."CLASSES"                        5
"ADB_USER"."ACTOR"                        220
"ADB_USER"."MOVIE"                         50