使用检索增强生成 (RAG) 增强自然语言提示
使用 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 一起使用:

插图 adb-obj-storage-select-ai-rag.png 的说明
-
输入:数据最初存储在对象存储中。
-
Oracle Autonomous Database 检索输入数据或文档,对其进行分块并将块发送到嵌入模型。
-
嵌入模型处理块数据并返回向量嵌入。
-
然后将向量嵌入存储在向量存储中,以便与 RAG 一起使用。在添加内容时,将自动更新向量索引。
RAG 从企业数据库中检索相关信息,以回答用户的问题。此信息随用户提示一起提供给指定的大型语言模型。选择 AI 会使用此附加企业信息来增强提示,从而改善 LLM 的响应。RAG 可以通过向量存储中的最新企业信息来提高响应质量。

插图 adb-diagram- third-party-vector-db-select-ai-rag.png 的说明
选择 AI 将按如下方式实施 RAG:
-
输入:用户使用 Select AI
narrate操作询问问题(指定提示)。 -
选择 AI 会使用 AI 配置文件中指定的嵌入模型生成提示的向量嵌入。
-
向量搜索索引使用问题的向量嵌入从已编制索引的客户企业数据(搜索向量存储)中查找匹配的内容。
-
向量搜索返回与自治 AI 数据库实例的输入相似的前 K 个文本。
-
然后,自治 AI 数据库将这些顶级 K 查询结果以及用户问题发送到 LLM。
-
LLM 返回其对自治 AI 数据库实例的响应。
-
自治 AI 数据库选择 AI 向用户提供响应。
使用 DBMS_CLOUD_AI 创建和管理向量索引
使用 DBMS_CLOUD_AI 程序包可创建和管理向量索引并配置向量数据库 JSON 参数。
在创建身份证明并提供对向量数据库和 AI 提供者的网络访问权限后,自治 AI 数据库实例将使用 AI 配置文件来配置对 LLM 的访问权限。有关在 Select AI 语句中设置和使用 Select AI 的完整示例,请参见 Example:Set Up and Use Select AI with RAG 。
注:如果不希望将表数据或向量搜索文档发送到 LLM,则具有管理员权限的用户可以为给定数据库的所有用户禁用此类访问权限。实际上,这将禁用 RAG 的 narrate 操作。
您可以通过 DBMS_CLOUD_AI 软件包为 Select your AI Provider and LLMs 中列出的提供程序配置 AI 配置文件。
使用数据库内变压器模型
通过选择 AI RAG,您可以使用 Oracle Database 23ai 实例中导入到数据库的预训练 ONNX 转换器模型,从文档块和用户提示生成嵌入向量。
要了解有关将预训练的 ONNX 模型导入 Oracle Database 23ai 实例的详细信息,请参阅:
注:必须将预训练的 ONNX 格式转换器模型导入到 Oracle Database 23ai 实例中,才能将 Select AI RAG 与导入的数据库内转换器模型结合使用。您还可以使用来自受支持 AI 提供者的其他转换器模型。
请参见 Example:Select AI with In-database Transformer Models 以了解该功能。
示例:设置 Select AI 并将其与 RAG 一起使用
此示例将指导您通过设置凭证、配置网络访问以及创建向量索引来使用 Oracle Autonomous AI Database 将 OCI Generative AI 向量存储云服务与 OpenAI 集成。
该设置最后创建使用向量索引增强 LLM 响应的 AI 配置文件。最后,此示例使用 Select AI narrate 操作,该操作返回使用指定向量数据库中的信息增强的响应。
以下示例演示如何在 Oracle Database 23ai 中构建和查询向量索引。
--Grants EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
--Grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;
-- Create the OpenAI credential
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
username => 'OPENAI_CRED',
password => '<your_api_key>'
);
END;
/
PL/SQL procedure successfully completed.
-- Append the 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 => 'ADB_USER',
principal_type => xs_acl.ptype_db)
);
END;
/
PL/SQL procedure successfully completed.
-- Create the object store credential
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OCI_CRED',
username => '<your_username>',
password => '<OCI_profile_password>'
);
END;
/
PL/SQL procedure successfully completed.
-- Create the profile with the vector index.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'OPENAI_ORACLE',
attributes =>'{"provider": "openai",
"credential_name": "OPENAI_CRED",
"vector_index_name": "MY_INDEX",
"temperature": 0.2,
"max_tokens": 4096,
"model": "gpt-3.5-turbo-1106"
}');
END;
/
PL/SQL procedure successfully completed.
-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_ORACLE');
PL/SQL procedure successfully completed.
-- create a vector index with the vector store name, object store location and
-- object store credential
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'MY_INDEX',
attributes => '{"vector_db_provider": "oracle",
"location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
"object_storage_credential_name": "OCI_CRED",
"profile_name": "OPENAI_ORACLE",
"vector_dimension": 1536,
"vector_distance_metric": "cosine",
"chunk_overlap":128,
"chunk_size":1024
}');
END;
/
PL/SQL procedure successfully completed.
-- After the vector index is populated, we can now query the index.
-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_ORACLE');
PL/SQL procedure successfully completed.
-- Select AI answers the question with the knowledge available in the vector database.
set pages 1000
set linesize 150
SELECT AI narrate how can I deploy an oracle machine learning model;
RESPONSE
To deploy an Oracle Machine Learning model, you would first build your model within the Oracle database. Once your in-database models are built, they become immediately available for use, for instance, through a SQL query using the prediction operators built into the SQL language.
The model scoring, like model building, occurs directly in the database, eliminating the need for a separate engine or environment within which the model and corresponding algorithm code operate. You can also use models from a different schema (user account) if the appropriate permissions are in place.
Sources:
- Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt (https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt)
- Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt (https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt)
示例:选择具有数据库内变压器模型的 AI
此示例演示如何将存储在 Oracle 对象存储中的预训练转换器模型导入到 Oracle Database 23ai 实例中,然后使用 Select AI 配置文件中的导入数据库内模型为文档块和用户提示生成向量嵌入。
要在 Select AI 配置文件中使用数据库内转换器模型,请确保您具有:
-
在 Oracle Database 23ai 实例中导入的预训练模型。
-
(可选)访问 Oracle 对象存储。
从 Oracle 对象存储将预训练的变压器模型导入到 Oracle Database 23ai
查看 Import Pretrained Models in ONNX Format for Vector Generation Within the Database 和博客 Pre-built Embedding Generation Model for Oracle AI Database 26ai 中的步骤,以将预训练的转换器模型导入数据库。
以下示例说明如何将获取的转换器模型从 Oracle 对象存储导入到数据库中,然后查看导入的模型。
- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
-- Download ONNX model from object storage into the directory object
BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => NULL,
directory_name => 'ONNX_DIR',
object_uri => :location_uri || :file_name);
END;
/
-- Load the ONNX model into the database
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'ONNX_DIR',
file_name => :file_name,
model_name => 'MY_ONNX_MODEL');
END;
/
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name='MY_ONNX_MODEL';
在 Select AI Profiles 中使用数据库内转换器模型
以下示例说明如何在 Select AI 配置文件中使用数据库内转换器模型。一个配置文件仅配置为生成向量嵌入,而另一个配置文件同时支持 Select AI 操作和向量索引创建。
查看 Requirements to Configure DBMS_CLOUD_AI Package 以完成先决条件。
以下是仅生成向量嵌入的示例:
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'EMBEDDING_PROFILE',
attributes => '{"provider" : "database",
"embedding_model": "MY_ONNX_MODEL"}'
);
END;
/
以下是常规 Select AI 操作和向量索引生成的示例,您可以在其中指定受支持的 AI 提供程序。此示例使用 OCI Gen AI 概要信息和身份证明。有关支持的提供程序列表,请参见 Select your AI Provider and LLMs 。但是,如果要使用数据库内变压器模型生成向量嵌入,请在 embedding_model 属性中使用 "database: <MY_ONNX_MODEL>":
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'GENAI_CRED',
user_ocid => 'ocid1.user.oc1..aaaa...',
tenancy_ocid => 'ocid1.tenancy.oc1..aaaa...',
private_key => '<your_api_key>',
fingerprint => '<your_fingerprint>'
);
END;
/
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_GENAI',
attributes => '{"provider": "oci",
"model": "meta.llama-3.3-70b-instruct",
"credential_name": "GENAI_CRED",
"vector_index_name": "MY_INDEX",
"embedding_model": "database: MY_ONNX_MODEL"}'
);
END;
/
将 Select AI 与其他方案中的数据库内变压器模型结合使用
此示例演示了在另一个方案所有者拥有模型时如何将 Select AI 与数据库内转换器模型结合使用。在 embedding_model 属性中将 schema_name.object_name 指定为模型的全限定名称。如果当前用户是方案所有者或拥有模型,则可以省略方案名称。
如果不同的方案所有者拥有该模型,请确保具有以下权限:
-
CREATE ANY MINING MODEL系统权限 -
SELECT ANY MINING MODEL系统权限 -
特定模型上的
SELECT MINING MODEL对象权限
要授予系统权限,您必须已被授予具有 ADMIN OPTION 的系统权限,或者已获得 GRANT ANY PRIVILEGE 系统权限。
要查看权限,请参阅 System Privileges for Oracle Machine Learning for SQL 。
只要向数据授予了 SELECT 访问权限,以下语句便允许 ADB_USER1 对任何方案中的数据进行评分和查看模型详细信息。但是,ADB_USER1 只能在 ADB_USER1 方案中创建模型。
GRANT CREATE MINING MODEL TO ADB_USER1;
GRANT SELECT ANY MINING MODEL TO ADB_USER1;
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_GENAI',
attributes => '{"provider": "oci",
"credential_name": "GENAI_CRED",
"vector_index_name": "MY_INDEX",
"embedding_model": "database: ADB_USER1.MY_ONNX_MODEL"}'
);
END;
/
以下示例说明如何指定区分大小写的模型对象名称:
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_GENAI',
attributes => '{"provider": "oci",
"credential_name": "GENAI_CRED",
"model": "meta.llama-3.3-70b-instruct",
"vector_index_name": "MY_INDEX",
"embedding_model": "database: "adb_user1"."my_model""}'
);
END;
/
不同 AI 提供商的端到端示例
这些示例演示了将数据库内变压器模型与 Select AI RAG 一起使用的端到端步骤。一个配置文件使用 database 作为专为生成嵌入向量而创建的 provider,而另一个配置文件使用 oci 作为为 Select AI 操作和向量索引创建的 provider。
查看 Requirements to Configure DBMS_CLOUD_AI Package 以完成先决条件。
--Grant create any directory privilege to the user
GRANT CREATE ANY DIRECTORY to ADB_USER;
- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
-- Download ONNX model from object storage into the directory object
BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => NULL,
directory_name => 'ONNX_DIR',
object_uri => :location_uri || :file_name);
END;
/
-- Load the ONNX model into the database
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'ONNX_DIR',
file_name => :file_name,
model_name => 'MY_ONNX_MODEL');
END;
/
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name='MY_ONNX_MODEL';
--Administrator grants EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
--Administrator grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;
-- Create the object store credential
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OCI_CRED',
username => '<your_username>',
password => '<OCI_profile_password>'
);
END;
/
PL/SQL procedure successfully completed.
-- Create the profile with Oracle Database.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'EMBEDDING_PROFILE',
attributes =>'{"provider": "database",
"embedding_model": "MY_ONNX_MODEL"
}');
END;
/
PL/SQL procedure successfully completed.
-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('EMBEDDING_PROFILE');
PL/SQL procedure successfully completed.
此示例使用 oci 作为 provider。
--Grant create any directory privilege to the user
GRANT CREATE ANY DIRECTORY to ADB_USER;
- Create a Directory object, or use an existing directory object
CREATE OR REPLACE DIRECTORY ONNX_DIR AS 'onnx_model';
-- Object storage bucket
VAR location_uri VARCHAR2(4000);
EXEC :location_uri := 'https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/eLddQappgBJ7jNi6Guz9m9LOtYe2u8LWY19GfgU8flFK4N9YgP4kTlrE9Px3pE12/n/adwc4pm/b/OML-Resources/o/';
-- Model file name
VAR file_name VARCHAR2(512);
EXEC :file_name := 'all_MiniLM_L12_v2.onnx';
-- Download ONNX model from object storage into the directory object
BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => NULL,
directory_name => 'ONNX_DIR',
object_uri => :location_uri || :file_name);
END;
/
-- Load the ONNX model into the database
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'ONNX_DIR',
file_name => :file_name,
model_name => 'MY_ONNX_MODEL');
END;
/
-- Verify
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name='MY_ONNX_MODEL';
--Administrator Grants EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
--Administrator Grants EXECUTE privilege DBMS_CLOUD_PIPELINE to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;
-- Create the object store credential
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OCI_CRED',
username => '<your_username>',
password => '<OCI_profile_password>'
);
END;
/
--Create GenAI credentials
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'GENAI_CRED',
user_ocid => 'ocid1.user.oc1..aaaa...',
tenancy_ocid => 'ocid1.tenancy.oc1..aaaa...',
private_key => '<your_api_key>',
fingerprint => '<your_fingerprint>'
);
END;
/
--Create OCI AI profile
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OCI_GENAI',
attributes => '{"provider": "oci",
"model": "meta.llama-3.3-70b-instruct",
"credential_name": "GENAI_CRED",
"vector_index_name": "MY_INDEX",
"embedding_model": "database: MY_ONNX_MODEL"}'
);
END;
/
-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_GENAI');
PL/SQL procedure successfully completed.
-- create a vector index with the vector store name, object store location and
-- object store credential
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'MY_INDEX',
attributes => '{"vector_db_provider": "oracle",
"location": "*`https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder`*",
"object_storage_credential_name": "OCI_CRED",
"profile_name": "OCI_GENAI",
"vector_dimension": 384,
"vector_distance_metric": "cosine",
"chunk_overlap":128,
"chunk_size":1024
}');
END;
/
PL/SQL procedure successfully completed.
-- Set profile
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_GENAI');
PL/SQL procedure successfully completed.
-- Select AI answers the question with the knowledge available in the vector database.
set pages 1000
set linesize 150
SELECT AI narrate how can I deploy an oracle machine learning model;
RESPONSE
To deploy an Oracle Machine Learning model, you would first build your model within the Oracle database. Once your in-database models are
built, they become immediately available for use, for instance, through a SQL query using the prediction operators built into the SQL
language.
The model scoring, like model building, occurs directly in the database, eliminating the need for a separate engine or environment within
which the model and corresponding algorithm code operate. You can also use models from a different schema (user account) if the appropriate
permissions are in place.
Sources:
- Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt (https://objectstorage.../v1/my_namespace/my_bucket/
my_data_folder/Manage-your-models-with-Oracle-Machine-Learning-on-Autonomous-Database.txt)
- Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-Database-Machine-Learning-and-APEX.txt
(https://objectstorage.../v1/my_namespace/my_bucket/my_data_folder/Develop-and-deploy-machine-learning-models-using-Oracle-Autonomous-
Database-Machine-Learning-and-APEX.txt)