DBMS_CLOUD_AI 套裝程式

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

必備條件

身為開發人員,您可以將 DBMS_CLOUD 程序與部署在 Oracle Public Cloud、Multicloud 或 Exadata Cloud@Customer 上的 Autonomous AI 資料庫搭配使用。

視部署選項而定,必須符合下列先決條件,才能將 DBMS_CLOUD 程序與 Amazon S3、Azure Blob Storage 及 Google Cloud Storage 服務提供者搭配使用。

DBMS_CLOUD_AI 子程式摘要

本節涵蓋 Autonomous AI Database 提供的 DBMS_CLOUD_AI 子程式。

子程式 描述
CREATE_PROFILE 程序 此程序會建立新的 AI 設定檔,用於將自然語言提示轉譯為 SQL 敘述句。
設定檔屬性 提供您可以設定的 AI 設定檔屬性。
DROP_PROFILE 程序 此程序會刪除現有的 AI 設定檔。
ENABLE_PROFILE 程序 此程序可讓 AI 設定檔在目前的資料庫中使用。
DISABLE_PROFILE 程序 此程序會停用目前資料庫中的 AI 設定檔。
SET_ATTRIBUTE 程序 此程序會設定 AI 設定檔屬性。
SET_PROFILE 程序 此程序會設定目前資料庫的 AI 設定檔。
GENERATE 函數 此函數會使用 AI 產生要轉譯的 SQL 敘述句。
GENERATE_DATAETIC_DATA 函數 此函數會產生合成資料。
ENABLE_DATA_ACCESS 程序 使用此程序可傳送資料至您的 LLM。
DISABLE_DATA_ACCESS 程序 使用此程序停用傳送資料至 LLM。
CREATE_VECTOR_INDEX 程序 此程序會在指定的向量資料庫中建立向量索引,並使用非同步排程器工作從物件存放區填入資料。
DROP_VECTOR_INDEX 程序 此程序會移除向量儲存區索引。它通常會移除向量儲存區索引物件,並刪除向量資料庫。
DISABLE_VECTOR_INDEX 程序 此程序會停用目前資料庫中的向量索引物件。停用時,AI 設定檔無法使用向量索引,且系統不會將資料載入向量儲存區。
ENABLE_VECTOR_INDEX 程序 此程序會啟用或啟用先前停用的向量索引物件。
UPDATE_VECTOR_INDEX 程序 此程序會以指定的向量索引屬性值更新現有的向量儲存索引。
向量索引屬性 提供您可以設定的向量索引設定檔屬性。
CREATE_CONVERSATION 程序 此程序可協助您建立對話。
CREATE_CONVERSATION 函數 此功能可協助您建立對話,並在其他程序中使用對話 ID。
CREATE_CONVERSATION 屬性 使用對話屬性來自訂您的對話。
UPDATE_CONVERSATION 程序 此程序會使用使用者指定的參數更新現有程序。
SET_CONVERSATION_ID 程序 此程序會設定目前階段作業中的對話支援。
GET_CONVERSATION_ID 函數 此程序可協助您取得 conversation_id 參數。
CLEAR_CONVERSATION_ID 程序 此程序可協助您清除目前階段作業中設定的任何 conversation_id
DELETE_CONVERSATION_PROMPT 程序 此程序會刪除特定提示。
DROP_CONVERSATION 程序 此程序會刪除整個對話及其描述資料。
意見回饋程序 透過此程序提供意見回饋給 Select AI,以提高查詢產生準確度。
FEEDBACK 的向量索引 這是您第一次使用 feedback 時所建立的預設向量索引。

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;
/

設定檔屬性

AI 設定檔的屬性可協助管理和設定 AI 設定檔的行為。某些屬性是選擇性的,而且有預設值。

屬性名稱 描述
azure_deployment_name Azure OpenAI Service 部署模型的名稱。名稱只能包含文數字字元、底線字元 (_) 以及連字號 (-) 字元。名稱不能以底線 (_) 或連字號 (-) 為結尾。若要瞭解如何取得 azure_deployment_name,請參閱建立和部署 Azure OpenAI Service 資源
azure_resource_name Azure OpenAI Service 資源的名稱。資源名稱只能包含數字或英文字母字元和連字號,而且不能以連字號為開頭或結尾。若要瞭解如何取得 azure_resource_name,請參閱建立和部署 Azure OpenAI Service 資源
comments

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

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

conversation VARCHAR2 屬性,指示是否為設定檔啟用對話歷史記錄。只有 OpenAI 和 Azure OpenAI Service 支援對話歷史記錄。有效值為 truefalse。預設值為 false。這些值不區分大小寫。
credential_name

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

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

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

embedding_model

AI 設定檔中定義的內嵌模型。下列是內嵌模型支援的 AI 提供者及其預設值:

  • OCI GenAI:cohere.embed-english-v3.0
  • OpenAI:text-embedding-ada-002
  • Azure OpenAI:text-embedding-ada-002
  • Cohere:embed-english-v2.0
  • Google: text-embedding-004

注意:embedding_model 參數不適用於 Anthropic 和 Hugging Face。

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 :命令 (預設)、每晚命令 (實驗中)、命令光源和命令光源 (實驗中)。較小的「輕」模型速度較快,而較大的模型效能較佳。[ 自訂模型 ] (https://docs.cohere.com/docs/creating-custom-models#what-are-custom-models) 也可以提供其完整 ID。
  • OCI Generative AI :適用於 OCI Generative AI:cohere.command (預設)。Select AI 支援 OCI Generative AI 的預先訓練模型。自訂模型也可以提供其完整的 OCID。

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

  • AWS :Amazon Bedrock 基礎模型需要透過 Amazon Bedrock 主控台存取權限。請參閱 AWS 文件以取得 modelID。

注意:此參數不會用於 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 可以包含數字或英文字母字元、連字號以及點。

預設為自治式 AI 資料庫的區間 ID。

oci_endpoint_id

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

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

依照預設,端點 ID 是空的,模型會隨選共用基礎架構。

oci_runtimetype

此屬性表示所提供模型的執行時期類型。指定 model 屬性且適用於 OCI Generation Model 時,需有此屬性。

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

支援的值包括:

  • COHERE
  • LLAMA

provider

AI 設定檔的 AI 提供者。

支援的提供者

  • openai
  • 圈子
  • 天藍色
  • OCI
  • 切換
  • 人造的
  • 擁抱面
  • aws

此為必要的屬性。

region

此屬性指示您要使用的生成式 AI 叢集位置。區域可包含文數字字元和連字號字元。

注意:Oracle Generative AI 叢集位於芝加哥、法蘭克福及倫敦區域。請參閱 [ 生成式 AI 中預先訓練的基礎模型 ] (https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm#pretrained-models).

預設區域為 `us-chicago-1`。

AWS 的預設區域為 us-east-1。

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

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 Procedure 以設定屬性。

如果 AI 設定檔的擁有者是階段作業使用者,則只能為目前的階段作業設定 AI 設定檔。

若要為特定資料庫使用者的所有階段作業或資料庫中的所有使用者階段作業設定 AI 設定檔,請考慮對特定使用者或整個資料庫的 AFTER LOGON 事件使用資料庫事件觸發程式。請參閱 Oracle Database 19c Database PL/SQL Language Reference 中的 CREATE TRIGGER StatementOracle Database 26ai 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 設定檔,您可以使用此功能來執行支援的動作,例如 showsqlrunsqlexplainsqlnarratesummarizechat。預設動作是 showsql

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

語法

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

參數

Parameter - 參數 描述
prompt

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

提示可以包含 SELECT AI <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 => 'runsql')
FROM dual;
-----------------------------------------------
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 => 'explainsql')
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 翻譯自然提示的動作。支援的動作包括:

  • runsql (預設)

  • showsql

  • explainsql

  • narrate

  • summarize

  • translate

  • chat

動作的描述包含在使用 AI 關鍵字輸入提示中。

attributes 提供 JSON 格式的屬性,以覆寫特定 AI 設定檔屬性。請參閱設定檔屬性瞭解詳細資訊。
params

指定對話參數。請參閱 CREATE_CONVERSATION 屬性。您只能指定下列參數:

conversation_id:預設值是在目前階段作業中設定的對話 ID。這不是必要的參數。

範例

範例:使用 GENERATE 函數選取 AI 動作

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

另請參閱使用 AI 關鍵字輸入提示以瞭解詳細資訊。

含有 runsql 動作的範例如下:

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

含有 showsql 動作的範例如下:

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

含有 explainsql 動作的範例如下:

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'explainsql')
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;

含有 summarize 動作的範例如下:

SELECT DBMS_CLOUD_AI.GENERATE(
                prompt => TO_CLOB(
                            DBMS_CLOUD.GET_OBJECT(
                             credential_name => 'STORE_CRED',
                             object_uri => 'https://objectstorage.ca-toronto-1.oraclecloud.com' ||
                                '/n/namespace-string/b/bucketname/o/data_folder/' ||
                                'summary/test_4000_words.txt')),
                profile_name => 'GENAI_LLAMA',
                action => 'SUMMARIZE')
from DUAL;

結果:

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 trying to survive in an on-demand, hyper-abundant present.
Spotify's business model, which pays royalties based on an artist's
popularity, has led to concerns about the fairness of the system, with some artists earning little to no royalties. The company's dominance has also changed the way people listen to music, with a focus on convenience and personalized playlists. Liz Pelly's book, "Mood Machine: The Rise of Spotify and the Costs of the Perfect Playlist," explores the impact of Spotify's rise on the music industry and listeners, arguing that the platform's emphasis on
affect and mood has led to a homogenization of music and a loss of autonomy for listeners. As the music industry continues to evolve, questions remain about the future of music creation and consumption, and whether artists will be able to thrive in a system that prioritizes convenience and profit over artistic expression.

下列範例顯示 translate 動作:

下列範例顯示使用提示中的 translate 動作。

注意:您的 AI 設定檔必須指定目標語言。

SELECT DBMS_CLOUD_AI.GENERATE('select ai translate text to be translated')
          FROM dual;

下列範例顯示 DBMS_CLOUD_AI.GENERATE 函數中提供的 translate 動作以及 target_languagesource_language。此範例使用生成式 AI 翻譯。輸入文字 this is a document (英文為 source_language: "en") 會翻譯成法文 (target_language: "fr")。

DECLARE
         l_attributes  clob := '{"target_language": "fr", "source_language": "en"}';
         output clob;
      BEGIN
         output := DBMS_CLOUD_AI.GENERATE(
                        prompt            => 'this is a document',
                        profile_name      => 'oci_translate',
                        action            => 'translate',
                        attributes        => l_attributes
                     );

在程序中使用 GENERATE 函數

您可以在程序中使用 DBMS_CLOUD_AI.GENERATE,然後執行函數。下列範例採用 ai_promptprofile_nameaction 作為輸入參數,並呼叫 DBMS_CLOUD_AI.GENERATE

create or replace FUNCTION call_select_ai (ai_prompt  IN VARCHAR2,
                                           ai_profile IN VARCHAR2,
                                           ai_action  IN VARCHAR2) -- valid for 'chat', 'narrate', 'showsql'
                                           RETURN CLOB AS sai_resp clob;
BEGIN
  sai_resp := DBMS_CLOUD_AI.GENERATE(prompt       => ai_prompt,
                                     profile_name => ai_profile,
                                     action       => ai_action);
  return(sai_resp);
END call_select_ai;

GENERATE_DATAETIC_DATA 函數

使用此程序可產生單一表格、多個表格或完整綱要的合成資料。

以下為產生單一表格之綜合資料的語法。

語法

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_name         IN  DBMS_ID,
  owner_name          IN  DBMS_ID,
  record_count        IN  NUMBER,
  user_prompt         IN  CLOB DEFAULT NULL,
  params              IN  CLOB DEFAULT NULL
);

以下為產生多個表格之合成資料的語法。

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_list         IN  CLOB,
  params              IN  CLOB DEFAULT NULL
);

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

參數

Parameter - 參數 必要 描述
profile_name 包含必要 LLM 服務資訊的 AI 設定檔。這可由 CREATE_PROFILE 程序建立。
object_name 指定表格名稱以填入合成資料。
  • 使用者必須具備表格物件的 SELECTINSERT 權限。
  • 表格空白或其中有記錄。
owner_name 編號 指定擁有參照物件的資料庫使用者。如果未提供任何特定擁有者,程序會預設為使用執行該程序之使用者的綱要。
record_count 編號 要以合成方式產生的記錄數。
user_prompt 編號 使用者可提及以產生綜合資料的其他資訊。例如,若要使用 `release_date` 資料欄產生名為 `MOVIE` 之表格的記錄,`user_prompt` 可以:

電影的發行日期應為 2019 年

params 編號 以 JSON 物件字串格式提供的選擇性屬性,以修改 API 的行為。請參閱可選參數
object_list 使用此參數在多個表格上產生合成資料。此參數會取得表格物件資訊及其引數,而且包含單一表格中提供的相同引數。請參閱 object_list 參數

選擇性參數

Parameter - 參數 值資料型態 數值 描述
sample_rows 數字 0 <= sample_rows <= 100

指定要作為範例的資料列數,以引導產生資料中的 LLM。

值為 0 表示不會使用任何範例資料列。預設值是 0

table_statistics 布林

  • True
  • False

啟用或停用表格統計資料的使用。

預設值為 False

priority String

以下為其有效值:

  • HIGH
  • MEDIUM
  • LOW

指派優先順序值,定義傳送給 LLM 以產生合成資料的平行要求數目。優先順序較高的作業將耗用更多的資料庫資源,並加快完成速度。

預設值為 HIGH

  • HIGH:根據資料庫的 ECPU 數目指定平行 LLM 要求數目 (如果資料庫使用 OCPU,則指定 OCPU 數目)。

  • MEDIUM:根據「中」服務的並行限制來設定並行程序的數目。預設值是 4。

  • LOW:以序列順序執行管線工作,而不進行平行處理。

用於合成資料產生的並行平行處理數目上限為 64 個。

comments 布林

  • True
  • False

啟用或停用傳送註解至 LLM 以產生資料。

預設值為 False

object_list 參數

Parameter - 參數 值資料型態 必要 描述
owner String 指定擁有所參照物件的資料庫使用者。如果未提供特定擁有者,則程序將預設為使用執行該程序之使用者的綱要。
name String 編號 指定表格名稱以填入合成資料。使用者必須具備表格物件的 SELECTINSERT 權限。表格空白或有記錄。
record_count 數字 編號

要以合成方式產生的記錄數。請提供大於 0 的數值。

提供 record_countrecord_count_percentage

record_count_percentage 數字 編號

要以合成方式產生的記錄數百分比。請提供大於 0 的數字。

對於保留包括統計資料的表格描述資料之「描述資料複製」資料庫,支援 record_count_percentage 參數。

提供 record_countrecord_count_percentage

使用 record_count_percentage 參數時,表格中的最終記錄筆數計算方式如下:

Original_Num_Rows * record_count_percentage

user_prompt String 編號 GENERATE_DATAETIC_DATA 函數參數中的 user_prompt 相同。user_prompt 與特定的表格物件相關聯。

範例

下列範例顯示 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA 函數,用來產生單一表格和多個表格的合成資料。如需完整的範例和檢視更多範例,請參閱範例:產生合成資料

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_name  => 'Director',
        owner_name   => 'ADB_USER',
        record_count => 5
    );
END;
/
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
                         {"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
                         {"owner": "ADB_USER", "name": "Actor","record_count":10},
                         {"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies are released in 2009"}]'
    );
END;
/

ENABLE_DATA_ACCESS 程序

此程序允許針對適用的 Select AI 功能 (預設行為) 將資料傳送至 LLM。只有管理員可以執行此程序。

此程序控制下列 Select AI 功能的資料存取:

語法

DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();

參數

此程序不需要任何參數。

啟用資料存取的範例

BEGIN
  DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();
END;
/

DISABLE_DATA_ACCESS 程序

此程序會停用針對適用的 Select AI 功能將資料傳送至 LLM。只有管理員可以執行此程序。

此程序限制了下列 Select AI 功能:

語法

DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();

參數

此程序不需要任何參數。

停用資料存取的範例

BEGIN
  DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();
END;
/

CREATE_VECTOR_INDEX 程序

此程序會在指定的向量資料庫中建立向量索引,並使用非同步排程器工作從物件存放區填入資料。

語法

PROCEDURE CREATE_VECTOR_INDEX(
   index_name          IN  VARCHAR2,
   attributes          IN  CLOB      DEFAULT NULL,
   status              IN  VARCHAR2  DEFAULT NULL,
   description         IN  CLOB      DEFAULT NULL
);

參數

Parameter - 參數 描述
index_name

向量索引的名稱。向量索引名稱必須遵循 Oracle SQL ID 的命名規則。向量儲存名稱的長度上限為 125 個字元。

這是必要參數。

attributes

JSON 中向量索引的自訂屬性。若要查看可設定參數的清單,請參閱向量索引屬性

預設值為 NULL。

status

向量索引的狀態。可能的值如下:

  • Enabled
  • Disabled

預設值為已停用。

description

向量索引的描述 。

預設值為 NULL。

範例

下列範例示範如何建立向量索引,並將屬性設定為 JSON 參數。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX'
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value
                         'https://objectstorage.us-phoenix-1.' ||
                         'oraclecloud.com/n/mynamespace/b/mybucket',
                       'object_store_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

DROP_VECTOR_INDEX 程序

此程序會移除向量儲存區索引。它通常會移除向量儲存區索引物件,並刪除向量儲存區。如果設為 FALSE,引數 include_data 會確保程序只會移除向量儲存區索引物件,同時保留向量儲存區。

語法

PROCEDURE DROP_VECTOR_INDEX(
   index_name          IN  VARCHAR2,
   include_data        IN  BOOLEAN DEFAULT TRUE,
   force               IN  BOOLEAN DEFAULT FALSE
);

參數

Parameter - 參數 描述
index_name

向量索引的名稱。向量索引名稱必須遵循 Oracle SQL ID 的命名規則。向量儲存名稱的長度上限為 125 個字元。

這是必要參數。

include_data

表示是否要同時刪除客戶的向量儲存區與向量索引以及向量索引物件。

可能的值:

  • TRUE
  • FALSE

預設值為 TRUE

force

指示是否忽略當向量索引不存在時所發生的錯誤。

可能的值:

  • TRUE
  • FALSE

如果設為 TRUE,此參數會略過當向量索引不存在時所發生的任何錯誤。

預設值為 FALSE

範例

BEGIN
DBMS_CLOUD_AI.DROP_VECTOR_INDEX(
        index_name     => 'MY_INDEX',
        include_data   => FALSE,
        force          => TRUE
     );
END;
/

DISABLE_VECTOR_INDEX 程序

此程序會停用目前資料庫中的向量索引物件。停用時,AI 設定檔無法使用向量索引,且系統不會將資料載入向量儲存區,因為新資料會新增至物件儲存區,且不會根據索引執行索引編製、搜尋或查詢。

語法

DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(
   index_name       IN  VARCHAR2
);

參數

Parameter - 參數 描述
index_name

向量索引的名稱。向量索引名稱必須遵循 Oracle SQL ID 的命名規則。向量儲存名稱的長度上限為 125 個字元。

這是必要參數。

範例

您可以藉由提供向量索引的名稱來停用向量索引。

BEGIN
   DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(index_name => 'MY_INDEX');
END;
/

ENABLE_VECTOR_INDEX 程序

此程序會啟用或啟用先前停用的向量索引物件。一般而言,當您建立向量索引時,預設會啟用此索引,讓 AI 設定檔能夠用來執行索引和搜尋。

啟用時,向量索引可讓 AI 設定檔使用它,以使用者指定的重新整理速率將物件存放區的新資料載入向量存放區。您可以透過 JSON 物件清單指定 refresh_rate 參數。若要設定 JSON 屬性,請參閱「向量索引屬性」。

語法

DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(
   index_name       IN  VARCHAR2
);

參數

Parameter - 參數 描述
index_name

向量索引的名稱。向量索引名稱必須遵循 Oracle SQL ID 的命名規則。向量儲存名稱的長度上限為 125 個字元。

這是必要參數。

範例

您可以指定向量索引名稱來啟用或啟用向量索引,如下所示:

BEGIN
   DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(index_name => 'MY_INDEX');
END;
/

UPDATE_VECTOR_INDEX 程序

此程序會以指定的向量索引屬性值更新現有的向量儲存索引。

超載以接受:

語法

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
   index_name         IN  VARCHAR2,
   attributes         IN  CLOB
);
DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
     index_name         IN  VARCHAR2,
     attribute_name     IN  VARCHAR2,
     attribute_value    IN  VARCHAR2
);
DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
     index_name         IN  VARCHAR2,
     attribute_name     IN  VARCHAR2,
     attribute_value    IN  CLOB     DEFAULT NULL
  );

參數

Parameter - 參數 描述
index_name

向量索引的名稱。向量索引名稱必須遵循 Oracle SQL ID 的命名規則。向量儲存名稱的長度上限為 125 個字元。

這是必要參數。

attributes

指定 JSON 格式的向量索引屬性。

這是必要參數。

attribute_name

CREATE_VECTOR_INDEX 程序中指定為 JSON 參數的自訂屬性名稱。

您無法修改下列屬性:

  • location
  • vector_table_name
  • chunk_size
  • chunk_overlap
  • vector_distance_metric
  • vector_dimension

這是必要參數。

attribute_value

使用者為自訂 attribute_name 指定的值。值可以是 CLOBNUMBERVARCHAR2 類型。

預設值為 NULL。

注意:使用 attributes 參數以 JSON 格式指定 attribute_name 和值組,或同時指定 attribute_nameattribute_value 參數。

範例

BEGIN
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
      index_name       => 'MY_INDEX',
      attribute_name   => 'object_storage_credential_name',
      attribute_value  => 'NEW_CRED'
   );
END;
/

下列範例接受 NUMBER 類型作為 attribute_value

BEGIN
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
      index_name       => 'MY_INDEX',
      attribute_name   => 'match_limit',
      attribute_value  => 10
   );
END;
/

下列範例接受 VARCHAR2 類型作為 attribute_value

BEGIN
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
      index_name       => 'MY_INDEX',
      attribute_name   => 'profile_name',
      attribute_value  => 'AI_PROF2'
   );
END;
/

下列範例接受 JSON 格式的 attributes

BEGIN
  DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
    index_name => 'MY_VECTOR_INDEX',
    attributes => '{"match_limit": 10,
                    "refresh_rate": 30}'
  );
END;
/

向量索引屬性

向量索引的屬性可協助管理和設定向量索引的行為。您可以視需要新增自訂索引屬性。某些屬性是選擇性的,而且有預設值。

屬性

屬性名稱 數值 必要 描述
chunk_size 1024 (預設) 編號

分區輸入資料的文字大小。

對於文字資料,這表示字元數。

chunk_overlap 128 (預設) 編號 指定相鄰文字區塊之間的重疊字元數。此屬性有助於確保內容連續性和文字處理的準確性,方法是在區隔之間允許重疊,這有助於避免在區塊界限中遺失內容資訊。
location

此參數指定來源檔案 URI、目錄以及來源檔案。

來源檔案 URI 和目錄都支援萬用字元樣式。

雲端來源檔案 URI:

您可以指定儲存桶或子資料夾的來源檔案 URI。您可以使用萬用字元來指定子資料夾或檔案名稱。字元 "*" 可以作為多個字元的萬用字元使用,而字元 "?" 可以作為單一字元的萬用字元使用該字元。

使用萬用字元的範例:

location_uri => 'https://objectstorage.my$region.oraclecloud.com/n/namespace-string/b/bucketname/o/year=????/month=??/*.csv

URI 的格式取決於您使用的雲端物件儲存服務,如需詳細資訊,請參閱雲端物件儲存 URI 格式

目錄:

您可以指定一個目錄和檔案名稱。指定目錄的格式為:MY_DIR:filename.ext。依照預設,目錄名稱 MY_DIR 是資料庫物件,不區分大小寫。檔案名稱有大小寫之別。

您只能使用萬用字元在目錄中指定檔案名稱。字元 * 可作為多個字元的萬用字元使用,而字元 ? 可作為單一字元的萬用字元使用該字元。例如:MY_DIR:*MY_DIR:test?

使用雙引號來指定區分大小寫的目錄名稱。例如:"my_dir1":*"my_dir2":Test?

若要包含引號字元,請使用兩個引號。例如:MY_DIR:''filename.ext。這會指定檔案名稱開頭為引號 (')。

此位置中的檔案可以是 PDF、DOC、JSON、XML 或 HTML 等格式的文件。請參閱支援的文件格式

match_limit 5 (預設) 編號 指定要在向量搜尋查詢中傳回的結果數目上限,控制輸出大小並提升資料擷取作業的效率。
object_storage_credential_name 指定用於存取物件儲存的證明資料名稱。
pipeline_name <vector_index_name>$VECPIPELINE 編號 指定向量索引資料載入管線的名稱。此屬性會自動設定為向量索引,您無法指定或修改。您可以使用管線名稱來監督使用監督及疑難排解管線的向量索引資料載入。
profile_name AI 設定檔的名稱,用於內嵌來源資料與使用者提詞。
refresh_rate 1440 分鐘 (預設) 編號 向量儲存區中資料的更新間隔。單位為分鐘。
similarity_threshold 0 (預設) 編號 定義將兩個項目視為相符項目所需的相似度下限,有助於篩選比對演算法中的結果以確保相關性。
vector_distance_metric 對應至描述中指定之其中一個值的字串。 編號

指定用來比較資料庫中向量的距離計算類型,決定如何量化項目之間的相似度。

Oracle 23ai 的有效值:

  • EUCLIDEAN
  • L2_SQUARED (EUCLIDEAN_SQUARED)
  • COSINE (預設)
  • DOT
  • MANHATTAN
  • HAMMING
vector_db_provider oracle 指定管理和做為向量儲存的 Provider 名稱。
vector_dimension 編號 指定向量儲存區內每個向量中的元素數目,定義資料表示的大小和結構。
vector_table_name <vector_index_name>$VECTAB (預設) 編號

指定表格或集合的名稱,以儲存向量內嵌和分區資料。

範例:指定物件儲存 URI 位置

以下範例示範如何使用 OCI Generative AI 向量儲存建立向量索引。

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": 1024,
                          "vector_distance_metric": "cosine",
                          "chunk_overlap":128,
                          "chunk_size":1024
      }');
END;
/
/

範例:使用萬用字元樣式指定物件儲存 URI 位置

此範例在「物件儲存 URI」中指定萬用字元樣式 (*) 作為 location 參數。它會從物件儲存 URI 載入所有 CSV 檔案。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX',
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value 'https://objectstorage.myregion.oraclecloud.com/n/my$namespace/b/bucketname/o/year=????/month=??/file*.csv)',
                       'object_storage_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

範例:使用萬用字元樣式指定目錄物件位置

此範例使用萬用字元樣式指定 location 參數中的目錄物件。它會載入 MY_DIR 目錄中的所有 CSV 檔案。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX',
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value 'MY_DIR:*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

範例:使用萬用字元樣式指定區分大小寫的目錄物件位置

此範例使用萬用字元樣式,指定 location 參數中區分大小寫的目錄物件。它會載入 My_Dir 目錄中的所有 CSV 檔案。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX',
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value '"My_Dir":*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

範例:指定所有檔案的區分大小寫目錄物件作為萬用字元樣式

此範例使用萬用字元樣式 (*) 在 location 參數中指定區分大小寫的目錄物件。它會載入所有位於 My_Dir 目錄中的檔案。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX',
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value '"My_Dir":*',
                       'object_storage_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

範例:指定目錄物件中的檔案名稱比對

此範例指定目錄物件,並在 location 參數中使用檔案名稱前綴,例如 test 。它會載入 MY_DIR 目錄中名稱開頭為 test 的所有檔案。

BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
            index_name    => 'MY_INDEX',
            attributes    => JSON_OBJECT(
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',
                       'profile_name'      value 'OCIGENAI',
                       'location'          value 'MY_DIR:test*',
                       'object_storage_credential_name'   value 'OS_CRED',
                       'chunk_size'        value 2048,
                       'chunk_overlap'     value 256,
                       'refresh_rate'      value 720)
       );
END;
/

CREATE_CONVERSATION 程序

此程序可讓您建立對話,並在程序中自動設定 conversation_id

注意:如果您使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 程序,可以略過設定 conversation_id,因為程序會自動設定它。

語法

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
);

參數

Parameter - 參數 描述
attributes

JSON 格式的對話屬性。請參閱 CREATE_CONVERSATION 屬性以瞭解詳細資訊。

預設值為 NULL。

範例

範例:建立對話

下列範例顯示建立不含任何自訂的對話。

EXEC DBMS_CLOUD_AI.CREATE_CONVERSATION;

範例:使用自訂屬性建立對話

下列範例顯示使用自訂參數 (例如 titledescriptionretention_daysconversation_length) 建立對話。

-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

CREATE_CONVERSATION 函數

此函數會建立對話並傳回可用於其他程序或函數 (例如 DBMS_CLOUD_AI.SET_CONVERSATION_IDDBMS_CLOUD_AI.GENERATE) 的 conversation_id

Oracle 建議設定 conversation_id 以啟用對話。您可以改為在 DBMS_CLOUD_AI.GENERATE 函數中設定 conversation_id

注意:如果您使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 程序,可以略過設定 conversation_id,因為程序會自動設定它。

語法

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
) RETURN VARCHAR2;

參數

Parameter - 參數 描述
attributes

JSON 格式的對話屬性。請參閱 CREATE_CONVERSATION 屬性以瞭解詳細資訊。

預設值為 NULL。

範例

範例:建立對話

下列範例顯示使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 函數來建立不含任何自訂的對話。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION FROM DUAL;

結果:

CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92

範例:使用自訂屬性建立對話

下列範例顯示使用 DBMS_CLOUD_AI.CREATE_CONVERSATION 函數來指定屬性,例如 titleretention_daysconversation_length

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
				attributes => '{"title":"This is a test conversation",
                               "retention_days":7,
                               "conversation_length":20}')
FROM DUAL;

CREATE_CONVERSATION 屬性

這些屬性可管理對話內容,包括保留對話內容的時間、儲存或顯示回應的提示數目,以及標題和描述等描述資料以供參考。某些屬性是選擇性的,而且有預設值。

屬性

屬性名稱 預設值 描述
title 新建對話 使用者指派的對話名稱。若未提供,選取 AI 會在對話第一次與提示搭配使用時產生 LLM。
description NULL 提供摘要對話用途或相關資訊環境的使用者定義描述。如果未提供,LLM 會在對話首次與提示搭配使用時產生對話,並在第五次使用時再次更新,以包含更準確且相關的資訊。
retention_days 7 指定要保留對話歷史記錄的天數。這會從建立日期儲存於資料庫中。若省略該值,系統會將其設為預設值 7。如果設為 0,系統會保留對話,直到您使用 DBMS_CLOUD_AI.DROP_CONVERSATION 程序或 DBMS_CLOUD.DELETE_ALL_OPERATIONS('CONVERSATION') 手動刪除對話為止。
conversation_length NULL

指定要併入目前提示的最近提示與回應數目。允許的上限值為 999。您可以在 DBMS_CLOUD_AI.GENERATE 函數中指定 conversation_length 參數,或使用 SELECT AI <ACTION> <PROMPT> 在 AI 設定檔中加以設定,以覆寫此值。對 conversation_length 套用下列優先順序規則:

  1. DBMS_CLOUD_AI.GENERATE 中屬性引數的值
  2. 對話中的值集會採用下一個優先順序
  3. AI 設定檔中定義的值採用最後優先順序

如果沒有指定 conversation_length,則預設值為 10。

下列範例顯示如何在 DBMS_CLOUD_AI.CREATE_CONVERSATION 程序中自訂對話屬性。

-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

UPDATE_CONVERSATION 程序

此程序會以指定的對話屬性值更新現有的對話。

語法

DBMS_CLOUD_AI.UPDATE_CONVERSATION(
    conversation_id    IN VARCHAR2,
    attributes         IN CLOB
);

參數

Parameter - 參數 描述
conversation_id

指派給對話的唯一編號。

這是必要參數。

attributes JSON 格式的對話屬性。請參閱 CREATE_CONVERSATION 屬性以瞭解詳細資訊。

範例

EXEC DBMS_CLOUD_AI.UPDATE_CONVERSATION(
conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92',
attributes => '{"retention_days":20,
		"description":"This a sample description",
		"title":"Sample title",
		"conversation_length":20}');

SET_CONVERSATION_ID 程序

此程序會將目前的對話設為指定的 ID。後續提示包括以對話之已設定屬性為基礎的現有對話提示。

語法

DBMS_CLOUD_AI.SET_CONVERSATION_ID(
    conversation_id   IN VARCHAR2
);

參數

Parameter - 參數 描述
conversation_id

指派給目前階段作業中對話的唯一編號。

此參數為必要參數。

範例

EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');

GET_CONVERSATION_ID 函數

此函數會使用 DBMS_CLOUD_AI.SET_CONVERSATION_IDDBMS_CLOUS_AI.CREATE_CONVERSATION 程序,傳回目前在階段作業中設定的對話 ID。如果您未設定對話,函數會傳回 NULL。如果您刪除對話,系統也會清除階段作業中的對話。請參閱 CLEAR_CONVERSATION_ID Procedure。

語法

DBMS_CLOUD_AI.GET_CONVERSATION_ID
RETURN VARCHAR2;

範例

此範例顯示目前階段作業中設定的對話 ID。

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;

結果:

--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92

CLEAR_CONVERSATION_ID 程序

此程序會清除階段作業中設定的對話 ID,以停用 SELECT AI <ACTION> <PROMPT> 的對話功能。如果您未設定對話,系統不會發出任何錯誤。

語法

DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;

範例

此範例示範在階段作業中顯示目前的對話 ID、清除 ID,以及驗證變更。

-- A conversation id is set in the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;

GET_CONVERSATION_ID
--------------------------------------------------------------------------------
3A88BFF0-1D7E-B3B8-E063-9C6D46640ECD


-- Clear the conversation id
EXEC DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;

PL/SQL procedure successfully completed.


-- The conversation id is removed from the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;

GET_CONVERSATION_ID
--------------------------------------------------------------------------------

DELETE_CONVERSATION_PROMPT 程序

程序會從對話中移除特定提示。

語法

DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT(
    conversation_prompt_id  IN VARCHAR2,
    force                   IN BOOLEAN DEFAULT FALSE
);

參數

Parameter - 參數 描述
conversation_prompt_id

指派給對話中提示的唯一編號。您可以查詢 DBA/USER_CLOUD_AI_CONVERSATION_PROMPTS 視觀表來尋找提示 ID。請參閱 DBMS_CLOUD_AI 檢視

這是必要參數。

force

如果是 TRUE,則當 conversation_prompt_id 不存在時,程序會忽略錯誤。

此參數的預設值為 FALSE

範例

EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');

DROP_CONVERSATION 程序

程序會移除對話及其所有關聯的提示以及關聯的回應。刪除之後,conversation_id 就會變成無效。如果對話在階段作業中設定時被刪除,則會自動清除該對話。

語法

DBMS_CLOUD_AI.DROP_CONVERSATION(
    conversation_id  IN VARCHAR2,
    force            IN BOOLEAN  DEFAULT FALSE
);

參數

Parameter - 參數 描述
conversation_id

指派給對話的唯一編號。

這是必要參數。

force

如果是 TRUE,則當 conversation_id 不存在時,程序會忽略錯誤。

此參數的預設值為 FALSE

範例

EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');

結果:

PL/SQL procedure successfully completed.

意見回饋程序

此程序可讓您提供意見回饋給 Select AI,以提高查詢產生準確度。您可以選擇提供正面或負面意見回饋,以及文字註解或修訂的 SQL 查詢。

語法

DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_id            IN  DBMS_ID,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );

DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_text          IN  CLOB,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );

參數

Parameter - 參數 描述
profile_name

指定要使用的 AI 設定檔。如果未提供 profile_name,則 Select AI 會使用階段作業中設定的預設設定檔。

這是必要參數。

sql_id

識別 SQL 查詢。一個 sql_id 只能有一個意見回饋項目。

這是必要參數。

sql_text

包含 SQL 查詢的完整文字。

這是必要參數。

feedback_type

指定意見回饋類型。可用的值包括:

  • positive:接受產生的 SQL。
  • negative:透過識別查詢中的錯誤,提供必要的 SQL 查詢改進。

注意:DBMS_CLOUD_AI.FEEDBACK 程序可讓您指定 sql_idsql_text,因此需要 feedback_type,而如果您使用 feedback 動作,則 LLM 會動態決定或解譯意見類型。

這是 operationadd 時的必要參數。

response

代表使用者預期的正確 SQL 查詢結果。

operationaddfeedback_typenegative 時,這是必要參數。

feedback_content 擷取使用者的自然語言意見回饋。您可以選擇將此參數與 response 一起使用。
operation

指定要執行的作業。接受的值為:

  • add (預設):透過指定 feedback_type 來新增您的意見。
  • delete:提供 sql_id 以刪除您的意見

範例

範例:使用新增或刪除作業提供產生之 SQL 的意見

下列範例示範使用 DBMS_CLOUD_AI.FEEDBACK 程序,透過指定程序的參數來接受或改善產生的 SQL。

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');

FEEDBACK 的向量索引

當您第一次使用意見回饋功能時,選取 AI 會使用預設屬性建立名為 <*profile_name*>_FEEDBACK_VECINDEX 的預設向量索引。

您可以使用 DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX 程序來修改其屬性,例如 similarity_thresholdmatch_limit。此索引可協助根據提供的意見來縮小未來產生的 SQL。刪除關聯的 AI 設定檔時,便會刪除此表格。您也可以刪除 <profile_name>_FEEDBACK_VECINDEX。當您這麼做時,Select AI 不再使用意見作為 runsqlshowsqlexplainsql 動作的提示。不過,如果您使用 Select AI 意見回饋功能送出新的意見回饋,Select AI 會自動建立新的意見回饋向量索引

注意:feedback 的預設值 match_limit 為 3。

向量表格名稱

<profile_name>_FEEDBACK_VECINDEX$VECTAB 表格包含使用者意見回饋的向量表示 (內嵌) 以及其他參數,Select AI 會使用此參數來改善一段時間的 SQL 產生。

參數

描述
attributes 依照 FEEDBACK 程序包含 JSON 物件屬性。
content 包含使用者提示。
embedding 包含使用者提示的向量表示 (內嵌)。

範例

下列範例示範如何使用自動產生的向量索引表來查詢並提供意見回饋。

SQL> select content, attributes from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
CONTENT
----------------------------------------------------------------------------------------------------
how many movies
ATTRIBUTES
----------------------------------------------------------------------------------------------------

{"response":"SELECT SUM(1) FROM "ADB_USER"."MOVIES"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
DBMS_CLOUD_AI.feedback Procedure(Positive Feedback)

SUMMARIZE 函數

此函數會根據您提供作為參數的自訂選項彙總您的內容。

語法

DBMS_CLOUD_AI.SUMMARIZE(
  content         IN  CLOB     DEFAULT NULL,
  credential_name IN  VARCHAR2 DEFAULT NULL,
  location_uri    IN  VARCHAR2 DEFAULT NULL,
  profile_name    IN  VARCHAR2 DEFAULT NULL,
  user_prompt     IN  CLOB     DEFAULT NULL,
  params          IN  CLOB     DEFAULT NULL
) RETURN CLOB;

參數

Parameter - 參數 描述
content

指定要彙總的文字。必須指定 contentlocation_uri

這不是必要的參數。

credential_name

識別用來向物件存放區認證的證明資料物件。您必須使用 `DBMS_CLOUD.CREATE_CREDENTIAL` 建立此證明資料。

注意:只有在您提供 `location_uri` 時,才使用此參數。

location_uri

提供儲存文字的 URI 或本機檔案的路徑。必須指定 contentlocation_uri

舉例而言:

物件儲存:https://objectstorage.ca-toronto-1.oraclecloud.com/n/namespace-string/b/bucketname/o/data_folder/summary/test_file.txt

本機檔案:summary_gobject:test_file.txt

profile_name

指定要使用的 AI 設定檔。如果未提供 profile_name,則 Select AI 會使用階段作業中設定的預設設定檔。如果未設定預設設定檔,則會傳回錯誤:ORA-20046:階段作業中未啟用 AI 設定檔。

預設值為 NULL。

user_prompt

提供自然語言提示以引導或自訂摘要。您可以包含摘要參數以外的其他指示。

例如,摘要應以「文章摘要為 :」」開頭

此參數並非必要參數。

params 定義彙總參數。請參閱 SUMMARIZE 參數

範例

請參閱範例:選取 AI 摘要以進行探索。

SUMMARIZE 參數

這些屬性會使用自訂參數管理產生摘要。某些屬性是選擇性的,而且有預設值。

屬性

屬性名稱 預設值 描述
min_words 0

指定所產生摘要應包含的文字大概數目下限。

注意:此參數可作為準則而非嚴格限制:摘要的實際長度可能會因提供的內容和模型的解譯而有所不同。

max_words 200

指定所產生摘要應包含的大約文字數目上限。

注意:此參數的作用是作為準則而非嚴格限制,摘要的實際長度可能會因提供的內容和模型的解譯而有所不同。

summary_style 段落

指定摘要的格式樣式。以下是可用的摘要格式選項:

  • paragraph:摘要會顯示在一或多個段落中。
  • list:摘要是來自文字的關鍵點清單。

chunk_processing_method map_reduce

當文字超過 LLM 可處理的記號限制時,必須將其分割成可管理的區塊。此參數可讓您選擇處理這些區塊的方法。以下是提供的選項:

  • iterative_refinement
  • map_reduce

請參閱選取 AI 術語以瞭解詳細資訊。

extractiveness_level low 決定摘要遵循輸入原始字詞的程度。它控制模型擷取與改寫的程度。選項如下:
  • High:摘要會保持在接近原始詞組,並儘可能重複使用句子和表示式。
  • Medium:擷取和繪製均衡的組合。
  • Low:允許更自由地重新命名、重新建立或簡化輸入,專注於意義而非精確的詞組。

注意:此設定可作為模型摘要行為的指引,不會強制執行嚴格規則。摘要的實際樣式與用語可能會根據輸入內容與模型決策而有所不同。

TRANSLATE 函數

此功能可讓您將文字轉譯為指定的 target_language

您可以在函數中提供 source_languagetarget_language 參數,或者可以從使用者的 AI 設定檔取得這些參數。如果您的 AI 設定檔未包含 source_language 屬性,生成式 AI 提供者會自動偵測輸入語言。如果缺少 target_language 屬性,Select AI 會傳回錯誤。

語法

DBMS_CLOUD_AI.TRANSLATE(
   profile_name      IN VARCHAR2,
   text              IN CLOB,
   source_language   IN VARCHAR2 DEFAULT NULL,
   target_language   IN VARCHAR2 DEFAULT NULL
) RETURN CLOB;

參數

Parameter - 參數 描述
profile_name

指定要使用的 AI 設定檔。

這不是必要的參數。

text

指定您要翻譯的文字。

這是必要參數。

source_language 輸入文字的語言
target_language 文字翻譯所使用的語言。

範例

請參閱範例:選取 AI 轉譯以進行探索。

相關內容

使用 Select AI 從自然語言提示產生 SQL