DBMS_CLOUD_AI 套裝軟體

DBMS_CLOUD_AI 套裝程式 (搭配 Select AI) 可協助及設定自然語言提示的翻譯,以產生、執行及說明 SQL 敘述句。此外,支援檢索增強生成和自然語言互動,包括與 LLM 交談。

先決條件

機組管理員必須使用 NAT 閘道設定輸出連線,如下所述:
  • 請依照 Oracle Cloud Infrastructure 文件建立 NAT 閘道的指示,在 Autonomous Database 資源所在的虛擬雲端網路 (VCN) 中建立 NAT 閘道。
  • 建立 NAT 閘道之後,請在 Autonomous Database 資源所在的每個子網路新增路由規則和傳出安全規則 (在 VCN 中),以便這些資源能夠使用此閘道從您的 Azure AD 執行處理取得公開金鑰:
    1. 移至子網路的子網路詳細資訊頁面。
    2. 子網路資訊頁籤中,按一下子網路的路由表名稱,以顯示其路由表詳細資訊頁面。
    3. 在現有路由規則的表格中,檢查是否已有具有下列特性的規則:
      • 目標:0.0.0.0/0
      • 目標類型:NAT 閘道
      • 目標:剛在 VCN 中建立的 NAT 閘道名稱

      如果沒有這類規則,請按一下新增路由規則,然後新增具有這些特性的路由規則。

    4. 返回子網路的子網路詳細資訊頁面。
    5. 在子網路的安全清單表格中,按一下子網路安全清單的名稱,以顯示其安全清單詳細資訊頁面。
    6. 在側邊功能表的資源下,按一下傳出規則
    7. 在現有傳出規則的表格中,檢查是否已有具有下列特性的規則:
      • 目標類型: CIDR
      • 目的地:0.0.0.0/0
      • IP 協定: TCP
      • 來源連接埠範圍: 443
      • 目的地連接埠範圍:全部

      如果該規則不存在,請按一下新增輸出規則,然後新增具有這些特性的輸出規則。

您環境中的 HTTP 代理主機設定值必須允許資料庫存取雲端服務提供者。

這些設定值是由機組管理員在建立 Exadata Cloud@Customer 基礎架構時定義的,如使用主控台在 Cloud@Customer 上佈建 Exadata 資料庫服務中所述。

附註:

必須等到 Exadata 基礎架構為需要啟用狀態後,才能編輯網路組態 (包括 HTTP 代理主機)。啟用之後,您就無法編輯這些設定值。

在 My Oracle Support 中設定已啟動設定之 Exadata 基礎架構的 HTTP 代理主機時,必須要有服務要求 (SR)。請參閱 在 My Oracle Support 中建立服務要求瞭解詳細資訊。

DBMS_CLOUD_AI 子程式摘要

本節涵蓋 Autonomous Database 隨附的 DBMS_CLOUD_AI 子程式。

子程式 描述

CREATE_PROFILE 程序

此程序會建立新的 AI 設定檔,以將自然語言提示轉譯為 SQL 陳述式。

DISABLE_PROFILE 程序

此程序會停用目前資料庫中的 AI 設定檔。

DROP_PROFILE 程序

此程序會刪除現有的 AI 設定檔。

ENABLE_PROFILE 程序

此程序可讓 AI 設定檔在目前的資料庫中使用。

GENERATE 函數

此函數會使用 AI 產生要轉譯的 SQL 陳述式。

SET_ATTRIBUTE 程序

此程序會設定 AI 設定檔屬性。

SET_PROFILE 程序

此程序會設定目前資料庫的 AI 設定檔。

CREATE_PROFILE 程序

此程序會建立新的 AI 設定檔,以將自然語言提示轉譯為 SQL 敘述句。

語法

DBMS_CLOUD_AI.CREATE_PROFILE
   profile_name        IN  VARCHAR2,
   attributes          IN  CLOB      DEFAULT NULL,
   status              IN  VARCHAR2  DEFAULT NULL,
   description         IN  CLOB      DEFAULT NULL
);

參數

Parameter - 參數 描述

profile_name

AI 設定檔的名稱。設定檔名稱必須遵循 Oracle SQL ID 的命名規則。設定檔名稱的長度上限為 125 個字元。

這是必要參數。

attributes

JSON 格式的設定檔屬性。如需詳細資訊,請參閱 AI 設定檔屬性

預設值為 NULL。

status

設定檔的狀態。

預設值是啟用。

description

AI 設定檔的描述。

預設值為 NULL。

範例

BEGIN
     DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name    => 'OpenAI,
          attributes      => JSON_OBJECT('provider' value 'openai',
                                         'credential_name' value 'openai_cred'),
          description     => 'AI profile to use OpenAI for SQL translation'
     );
END;
/

DROP_PROFILE 程序

此程序會刪除現有的 AI 設定檔。如果設定檔不存在,則程序會發出錯誤。

語法

DBMS_CLOUD_AI.DROP_PROFILE(
       profile_name        IN   VARCHAR2,
       force               IN   BOOLEAN DEFAULT FALSE
 );

參數

Parameter - 參數 描述

profile_name

AI 設定檔的名稱

force

如果 TRUE,則程序會忽略 AI 設定檔不存在的錯誤。

此參數的預設值為 FALSE

範例

BEGIN
     DBMS_CLOUD_AI.DROP_PROFILE(profile_name => 'OPENAI');
END;
/

使用注意事項

如果 AI 設定檔不存在,請使用 force 刪除設定檔並忽略錯誤。

ENABLE_PROFILE 程序

此程序會啟用使用者指定的 AI 設定檔。此程序會將 AI 設定檔的狀態變更為 ENABLED

語法

DBMS_CLOUD_AI.ENABLE_PROFILE(
     profile_name         IN   VARCHAR2
 );

參數

Parameter - 參數 描述

profile_name

要啟用的 AI 設定檔名稱

此為必要參數。

啟用 AI 設定檔的範例

BEGIN
     DBMS_CLOUD_AI.ENABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

DISABLE_PROFILE 程序

此程序會停用目前資料庫中的 AI 設定檔。此程序會將 AI 設定檔的狀態變更為 DISABLED

語法

DBMS_CLOUD_AI.DISABLE_PROFILE(
      profile_name  IN  VARCHAR2
);

參數

Parameter - 參數 描述

profile_name

AI 設定檔的名稱。

此為必要參數。

範例

BEGIN
     DBMS_CLOUD_AI.DISABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

SET_ATTRIBUTE 程序

您可以使用此程序來設定 AI 設定檔屬性。

語法

DBMS_CLOUD_AI.SET_ATTRIBUTE(
      profile_name         IN   VARCHAR2,
      attribute_name       IN   VARCHAR2,
      attribute_value      IN   CLOB
);

參數

只有擁有者可以設定或修改 AI 設定檔的屬性。如需支援的屬性清單,請參閱設定檔屬性

Parameter - 參數 描述

profile_name

要為其設定屬性的 AI 設定檔名稱。

此為必要參數。

attribute_name

AI 設定檔屬性的名稱

此為必要參數。

attribute_value

設定檔屬性的值。

預設值為 NULL。

範例

BEGIN
 DBMS_CLOUD_AI.SET_ATTRIBUTE(
   profile_name    => 'OPENAI',
   attribute_name  => 'credential_name',
   attribute_value => 'OPENAI_CRED_NEW'
 );
END;
/

SET_PROFILE 程序

此程序會為目前的階段作業設定 AI 設定檔。

為資料庫階段作業設定 AI 設定檔之後,任何前置碼為 SELECT AI 的 SQL 敘述句都會被視為自然語言提示。視使用 AI 前置碼指定的動作而定,會使用 AI 產生回應。若要使用 AI 前置碼,請參閱使用 AI 關鍵字輸入提示。您可以選擇性地以 JSON 格式指定設定檔屬性或修改屬性。請參閱 SET_ATTRIBUTE 程序,瞭解如何設定屬性。

只有當 AI 設定檔的擁有者是階段作業使用者時,才能為目前的階段作業設定 AI 設定檔。

若要為特定資料庫使用者或資料庫中所有使用者階段作業的所有階段作業設定 AI 設定檔,請考慮對特定使用者或整個資料庫的 AFTER LOGON 事件使用資料庫事件觸發程式。請參閱 Oracle Database 19c Database PL/SQL Language Reference 中的 CREATE TRIGGER StatementOracle Database 23ai Database PL/SQL Language Reference ,瞭解詳細資訊。

語法

DBMS_CLOUD_AI.SET_PROFILE(
    profile_name      IN  VARCHAR2,
);

參數

Parameter - 參數 描述

profile_name

目前階段作業中 AI 設定檔的名稱。

此為必要參數。

範例


   BEGIN
        DBMS_CLOUD_AI.SET_PROFILE(
          profile_name    => 'OPENAI'
        );
   END;
   /

GENERATE 函數

此函數以無狀態的方式提供 AI 翻譯。使用現有的 AI 設定檔時,您可以使用此功能來執行支援的動作,例如 showsqlnarratechat。預設動作為 showsql

也可以使用此函數來覆寫部分或所有設定檔屬性。

語法

DBMS_CLOUD_AI.GENERATE(
    prompt          IN  CLOB,
    profile_name    IN  VARCHAR2 DEFAULT NULL,
    action          IN  VARCHAR2 DEFAULT NULL,
    attributes      IN  CLOB     DEFAULT NULL
) RETURN CLOB;

參數

Parameter - 參數 描述

prompt

使用 AI 翻譯的自然語言提示。

提示可以包含 SELECT AI <action> 作為前置碼。您也可以單獨提供動作作為「動作」參數。提示中提供的 action 會覆寫 "action" 參數。預設動作是 showsql

此為必要參數。

profile_name

AI 設定檔的名稱。如果已在使用 DBMS_CLOUD_AI.SET_PROFILE 的階段作業中設定 AI 設定檔,此參數是選擇性的。

預設值為 NULL。

適用下列條件:
  • 如果在目前的階段作業中設定設定檔,使用者可以省略 DBMS_CLOUD_AI.GENERATE 函數中的 profile_name 引數。
  • 如果 DBMS_CLOUD_AI.GENERATE 函數中提供 profile_name 引數,它會使用 DBMS_CLOUD_AI.SET_PROFILE 程序覆寫階段作業中設定的任何值。
  • 如果使用 DBMS_CLOUD_AI.SET_PROFILE 程序的階段作業中沒有設定任何設定檔,必須在 DBMS_CLOUD_AI.GENERATE 函數中提供 profile_name 引數。

附註:

對於「資料庫動作」,您可以在 DBMS_CLOUD_AI.GENERATE 中指定 profile_name 引數,或者以 PL/SQL 命令檔執行兩個步驟:DBMS_CLOUD_AI.SET_PROFILEDBMS_CLOUD_AI.GENERATE
EXEC DBMS_CLOUD_AI.set_profile('OPENAI');

-----------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'showsql')
FROM dual;

------------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'narrate')
FROM dual;
-------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'what is oracle autonomous database',
                              profile_name => 'OPENAI',
                              action       => 'chat')
FROM dual;
請參閱在程式碼編輯器中執行 SQL 敘述句瞭解詳細資訊。
action

使用 AI 翻譯自然提示的動作。支援的動作包括 showsql (預設值)、narratechat使用 AI 關鍵字輸入提示中包含動作的說明。

附註:

此函數不支援 runsql 動作。如果您提供 runsql 動作,則會傳回下列錯誤:
ORA-20000: runsql action is not supported by generate function ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line xxxx 
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 2696 ORA-06512: at line x
attributes 以 JSON 格式提供屬性,以覆寫特定 AI 設定檔屬性。請參閱設定檔屬性瞭解詳細資訊。

範例

下列範例說明可與 DBMS_CLOUD_AI.GENERATE 函數搭配使用的 showsqlnarratechat 動作。

具有 showsql 動作的範例如下:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'showsql')
FROM dual;

具有 narrate 動作的範例如下:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'narrate')
FROM dual;

具有 chat 動作的範例如下:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'what is oracle autonomous database',
                              profile_name => 'OPENAI',
                              action       => 'chat')
FROM dual;

設定檔屬性

AI 設定檔的屬性可協助管理和設定 AI 設定檔的行為。部分屬性為選擇性,且具有預設值。

屬性

屬性名稱 描述

azure_deployment_name

Azure OpenAI 服務部署模型的名稱。名稱只能包含文數字字元、底線字元 (_) 以及連字號 (-) 字元。名稱的結尾不可為底線 (_) 或連字號 (-)。若要瞭解如何取得 azure_deployment_name,請參閱建立及部署 Azure OpenAI 服務資源

azure_resource_name

Azure OpenAI 服務資源的名稱。資源名稱只能包含數字或英文字母字元和連字號,而且不能以連字號為開頭或結尾。若要瞭解如何取得 azure_resource_name,請參閱建立及部署 Azure OpenAI 服務資源

comments

在使用 AI 翻譯自然語言提示時所使用的描述資料中包含資料欄註解。支援 BOOLEAN 資料類型。VARCHAR2 資料類型字串的有效值為 TRUEFALSE

附註:

設定單一屬性時,布林值不適用於 DBMS_CLOUD_AI.SET_ATTRIBUTE 程序,因為 attribute_value 參數為 CLOB 資料類型。

conversation

指示是否對設定檔啟用對話歷史記錄的 VARCHAR2 屬性。只有 OpenAI 與 Azure OpenAI 服務支援對話歷史記錄。有效值為 truefalse。預設值為 false。值不區分大小寫。

credential_name

存取 AI 提供者 API 的證明資料名稱。

使用 Bearer 權杖的證明資料可以使用提供者名稱作為使用者名稱和 Bearer 權杖作為密碼來建立。

此為必要的屬性。請參閱 CREATE_CREDENTIAL 程序

max_tokens

表示每一層代要預測的單詞數目。預設值為 1024。請參閱記號和記號器以瞭解詳細資訊。

model

用來產生回應的 AI 模型名稱。

下列項目的支援模型:

  • OpenAI :gpt-4、gpt-4-0613、gpt-4-32k、gpt-4-32k-0613、gpt-3.5-turbo (預設)、gpt-3.5-turbo-0613、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613
  • Cohere :指令 (預設)、指令 -nightly (實驗性)、指令 -light 及指令 -light-nightly (實驗性)。較小的「輕」模型速度較快,而較大的模型則表現較佳。也可以提供自訂模型的完整 ID。
  • OCI Generative AI :適用於 OCI Generative AI:cohere.command (預設)。Select AI 支援 OCI Generative AI 的預先訓練模型。自訂模型也可以與其完整的 OCID 一起提供。

    若要深入瞭解 OCI Generative AI 中支援的模型,請參閱 Generative AI 中的預先訓練基礎模型

附註:

此參數不會用於 Azure,因為模型是在 Azure OpenAI Service 入口網站中建立部署時決定。

object_list

指定適用於自然語言轉譯至 SQL 之擁有者和物件名稱的 JSON 物件陣列。若要包括指定使用者的所有物件,請省略 "name",而且只在 JSON 物件中指定 "owner" 索引鍵。

將自然語言轉譯為 SQL 時,會使用 HTTPS 要求,將物件名稱、物件擁有者、物件資料欄及註解傳送給 AI 提供者。請避免在物件清單中指定含有機密物件名稱、資料欄名稱或註解的物件。

AI 提供者可能會限制翻譯要求中允許的中繼資料大小。請考慮限制適合應用程式使用者自然語言提示的物件清單。

格式:
[
  {"owner": "SH", "name": "SALES",
  {"owner": "TEST_USER"}
]

oci_compartment_id

指定呼叫 OCI Generative AI 服務時,允許存取之區間的 OCID。區間 ID 可包含數字或英文字母字元、連字號以及點。

預設為 Autonomous Database 的區間 ID。

oci_endpoint_id

此屬性代表 Oracle 專用 AI 代管叢集的端點 OCID。端點 ID 可包含數字或英文字母字元、連字號以及點。若要尋找端點 OCID,請參閱在生成式 AI 中取得端點的詳細資訊

若要使用 Oracle 專用 AI 叢集,您必須提供代管叢集的端點 OCID。

依照預設,端點 ID 為空白,且模型在共用基礎架構上為隨選。

oci_runtimetype

此屬性指示所提供模型的程式實際執行類型。指定 model 屬性且適用於 OCI 產生模型時,必須要有此屬性。

您可以在 OCI Generative AI runtimeType 中找到所有允許的值。請參閱 LlmInferenceRequest Reference

支援的值為:
  • COHERE
  • LLAMA

provider

AI 設定檔的 AI 提供者。

支援的提供者:

  • openai
  • 同時
  • 天藍色
  • oci
  • google
  • 變性
  • 掛牆

此為必要的屬性。

region

此屬性表示您要使用的 Generative AI 叢集位置。區域可以包含文數字字元和連字號字元。

附註:

Oracle Generative AI 叢集可在芝加哥、法蘭克福及倫敦區域使用。請參閱生成式 AI 中的預先訓練基礎模型
預設區域為 us-chicago-1

stop_tokens

產生的文字將在最早停止序列的開頭終止。順序將併入文字中。屬性值必須是 JSON 格式的有效字串值陣列。stop_tokens 會使用 JSON 陣列作為輸入。若要進一步瞭解停止記號或停止順序,請參閱 OpenAICohere 文件。

temperature

「產生文字」模型的抽樣會結合隨機性,因此每次按下「產生」時,相同的提示可能會產生不同的輸出。溫度 (Temperature) 是用於調整隨機程度的非負浮點數。較低的溫度代表較少的隨機世代。請參閱溫度瞭解詳細資訊。此參數適用於所有支援的服務提供者。

下列範例使用 Cohere 作為提供者,並顯示自訂設定檔屬性:
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'COHERE',
     attributes =>
      '{"provider": "cohere",
        "credential_name": "COHERE_CRED",
        "object_list": [{"owner": "ADB_USER"}],
        "max_tokens":512,
        "stop_tokens": [";"],
        "model": "command-nightly",
        "temperature": 0.5,
        "comments": true
       }');
END;
/

下列範例顯示使用 OCI Generative AI 的自訂設定檔屬性:

BEGIN                                                                        
  DBMS_CLOUD_AI.CREATE_PROFILE(                                              
      profile_name => 'GENAI',                                                             
      attributes => '{"provider": "oci",                                                                   
        "credential_name": "GENAI_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"}],
        "oci_compartment_id": "ocid1.compartment.oc1...",
	"oci_endpoint_id": "ocid1.generativeaiendpoint.oc1.us-chicago-1....",
	"region": "us-chicago-1",
	"model": "cohere.command-light",
	"oci_runtimetype": "COHERE"            
       }');                                                                  
END;                                                                         
/