使用檢索增強生成 (RAG) 增強自然語言提示

Select AI with RAG 透過使用語意相似性搜尋從指定的向量儲存區擷取內容來增強您的自然語言提示。這可以透過使用您特定且最新的內容來減少幻燈片,並為您的提示提供更相關的自然語言回應。

Select AI 將檢索增強生成 (RAG) 流程自動化。此技術使用 AI 向量搜尋從企業來源擷取資料,並增強指定大型語言模型 (LLM) 的使用者提示。RAG 運用企業資料存放區的資訊來減少虛構情況,並產生不動的回應。

RAG 在向量索引上使用 AI 向量搜尋來尋找指定問題的語意相似資料。向量儲存會處理向量內嵌,這些內嵌是各種資料點的數學表示法,例如文字、影像及音訊。這些內嵌項目會擷取資料的含義,以實現有效率的處理與分析。如需有關向量內嵌和 AI 向量搜尋的詳細資訊,請參閱 AI Vector Search 概要

Select AI 與 Oracle Autonomous AI Database 26ai 中的 AI 向量搜尋整合,以使用向量內嵌進行相似性搜尋。

Select AI RAG 的優勢

複查 LLM 使用的來源,簡化查詢、提升目前資料的回應準確性,以及提高透明度。

Select AI RAG 提供以下優勢:

建立您的向量儲存區

Select AI 將物件存放區中的輸入文件 (例如 PDF、DOC、JSON、XML 或 HTML) 轉換為純文字,以自動建立及填入向量存放區。Oracle Text 支援大約 150 種檔案類型。如需所有支援文件格式的完整清單,請參閱支援的文件格式

Select AI 會自動處理要分塊的文件、產生內嵌項目、將文件儲存在指定的向量儲存區,並在新資料到達時更新向量索引。

以下是 Object Storage 輸入如何與 Select AI RAG 搭配使用:

adb-obj-storage-select-ai-rag.png 圖解描述

  1. 輸入:資料一開始會儲存在物件儲存中。

  2. Oracle Autonomous Database 會擷取輸入資料或文件,並加以分塊,然後將區塊傳送至內嵌模型。

  3. 內嵌模型會處理區塊資料並傳回向量內嵌。

  4. 接著,向量內嵌會儲存在向量儲存區中,以與 RAG 搭配使用。新增內容時,會自動更新向量索引。

RAG 會從企業資料庫擷取相關資訊片段,以回答使用者的問題。此資訊會連同使用者提示一起提供給指定的大型語言模型。Select AI 會使用此其他企業資訊來增強提示,改善 LLM 的回應。RAG 可以透過向量儲存區的最新企業資訊來提高回應品質。

adb-diagram-third-party-vector-db-select-ai-rag.png 圖解描述

Select AI 實作 RAG,如下所示:

  1. 輸入:使用者要求使用 Select AI narrate 動作提出問題 (指定提示)。

  2. Select AI 會使用 AI 設定檔中指定的內嵌模型,產生提示的向量內嵌。

  3. 向量搜尋索引使用內嵌問題的向量,從已編製索引的客戶企業資料 (搜尋向量儲存區) 中尋找相符的內容。

  4. 向量搜尋會傳回與輸入 Autonomous AI Database 實例類似的常用 K 文字。

  5. 自治式 AI 資料庫接著將這些具有使用者問題的常用 K 查詢結果傳送至 LLM。

  6. LLM 會傳回對自治式 AI 資料庫執行處理的回應。

  7. 自治式 AI 資料庫選取 AI 提供對使用者的回應。

使用 DBMS_CLOUD_AI 建立及管理向量索引

使用 DBMS_CLOUD_AI 套裝軟體建立和管理向量索引,以及設定向量資料庫 JSON 參數。

建立憑證並為向量資料庫和 AI 提供者提供網路存取之後,您的 Autonomous AI Database 實例會使用 AI 設定檔來設定對 LLM 的存取。請參閱範例:設定並使用含 RAG 的 Select AI ,以取得在 Select AI 陳述式中設定及使用的完整範例。

備註:如果您不希望將表格資料或向量搜尋文件傳送至 LLM,則具有管理員權限的使用者可以停用指定資料庫之所有使用者的此類存取權。這實際上會停用 RAG 的 narrate 動作。

您可以透過 DBMS_CLOUD_AI 套件,為選取您的 AI 提供者與 LLM 中列出的提供者設定 AI 設定檔。

使用資料庫內轉換器模型

Select AI RAG 可讓您使用在 Oracle Database 23ai 實例中匯入資料庫的預先訓練 ONNX 轉換器模型,從文件區塊和使用者提示產生內嵌向量。

若要進一步瞭解如何將預先訓練的 ONNX 模型匯入您的 Oracle Database 23ai 執行處理,請參閱:

注意:您必須將預先訓練的 ONNX 格式轉換器模型匯入 Oracle Database 23ai 執行處理,才能將 Select AI RAG 與匯入的資料庫內轉換器模型搭配使用。您也可以使用來自受支援 AI 提供者的其他變壓器模型。

請參閱範例:使用資料庫內變壓器模型選取 AI ,以瀏覽該功能。

範例:設定並使用含 RAG 的 Select AI

此範例會引導您設定憑證、設定網路存取,以及建立向量索引,以便使用 Oracle Autonomous AI Database 將 OCI Generative AI 向量儲存雲服務與 OpenAI 整合。

這些設定最後會建立一個 AI 設定檔,該設定檔使用向量索引來增強 LLM 回應。最後,此範例使用 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 Object Storage 將預先訓練的轉換器模型匯入您的 Oracle Database 23ai

請檢閱在資料庫內以 ONNX 格式匯入用於向量生成的預先訓練模型和部落格 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 設定檔中使用資料庫內轉換器模型

這些範例說明如何在 Select AI 設定檔中使用資料庫內變壓器模型。一個設定檔僅設定用於產生向量內嵌,而另一個設定檔則同時支援 Select AI 動作和向量索引建立。

請參閱設定 DBMS_CLOUD_AI 套裝程式的需求以完成先決條件。

以下為僅產生向量內嵌的範例:

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 設定檔和證明資料。如需支援的提供者清單,請參閱選取您的 AI 提供者與 LLM 。不過,如果您想要使用資料庫內變壓器模型來產生向量內嵌,請在 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 作為模型的完整名稱。如果目前的使用者是綱要擁有者或擁有模型,您可以省略綱要名稱。

如果不同的綱要擁有者擁有模型,請務必具備下列權限:

若要授與系統權限,您必須已授與具有 ADMIN OPTION 的系統權限,或已授與 GRANT ANY PRIVILEGE 系統權限。

請參閱 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

請參閱設定 DBMS_CLOUD_AI 套裝程式的需求以完成先決條件。

--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)

相關內容