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

Autonomous Database on Dedicated Exadata Infrastructure Select AI 可讓您使用自然語言查詢資料。

Select AI 功能允許 Autonomous Database 使用生成式 AI 與大型語言模型 (LLM),將使用者的輸入文字轉換為 Oracle SQL。選取 AI 會處理自然語言提示、以中繼資料補充提示,然後產生和執行 SQL 查詢。

術語

請務必先瞭解 Select AI 所使用的各種術語,再加以使用。

以下是與 Select AI 功能相關的術語:

詞彙 定義

資料庫證明資料

「資料庫證明資料」是用來存取資料庫並與資料庫互動的認證證明資料。它們通常由使用者名稱和密碼組成,有時也會由其他認證因素 (例如安全記號) 補充。這些證明資料是用來建立應用程式或使用者與資料庫之間的安全連線,確保只有經過授權的個人或系統才能存取和操控資料庫中儲存的資料。

LLM 幻覺

「大型語言模型」的脈絡是指模型產生與輸入提示不正確、非語意或無關之文字的現象。儘管模型嘗試產生一致的文字,但這些實例可以包含結構化、誤導或純粹想像的資訊。由於訓練資料的偏差、缺乏適當的情境理解,或模型訓練過程中的限制,因此會發生虛構。

IAM Oracle Cloud Infrastructure Identity and Access Management (IAM) 可讓您控管可存取雲端資源的人員。您可以控制某個群組的使用者可具備的存取類型,以及可存取哪些特定資源。若要深入瞭解,請參閱身分識別與存取管理概要

大型語言模型 (LLM)

「大型語言模型」是指針對大量文字資料進行訓練的進階人工智慧模型,以瞭解並產生類似人類的語言、軟體程式碼和資料庫查詢。這些模型能夠執行各種自然語言處理工作,包括文字產生、翻譯、摘要、問題回答、情感分析等。LLM 通常是神經網路架構,可從輸入資料學習模式、環境定義和語意,讓它們能夠產生一致且相關的文字。

一般語言提示

自然語言提示是人類可閱讀的指示或要求,用來引導生成式 AI 模型 (例如大型語言模型)。使用者無須使用特定的程式設計語言或指令,而是可以透過在更具對話性或自然語言表單中輸入提示,與這些模型互動。接著,模型會根據提供的提示產生輸出。

網路存取控制清單 (ACL)

「網路存取控制清單」是一組規則或權限,定義允許哪些網路流量通過網路裝置,例如路由器、防火牆或閘道。ACL 會根據各種條件 (例如 IP 位址、連接埠號碼以及協定) 來控制和篩選內送和外送流量。他們在網路安全中扮演重要角色,讓管理員能夠管理和限制網路流量,以防止未經授權的存取、潛在攻擊及資料外洩。

使用 Select AI 的範例

探索如何將 Oracle 的 Select AI 與 OpenAI、Cohere、Azure Open AI 和 OCI Generative AI 等各種 AI 提供者整合,以直接從自然語言產生 SQL 查詢。

這些範例展示了常見的 Select AI 動作,並引導您與不同的 AI 供應商建立設定檔,以利用這些動作。

範例:選取 AI 動作

下列範例說明可使用 SELECT AI 執行的動作,例如 runsqlshowsqlnarratechatexplainsql。這些範例使用 sh 綱要與 DBMS_CLOUD_AI.CREATE_PROFILE 函數中設定的 AI 提供者及設定檔屬性。

SQL> select ai how many customers exist;
 
CUSTOMER_COUNT
--------------
         55500
 
SQL> select ai showsql how many customers exist;
 
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
 
 
SQL> select ai narrate how many customers exist;
 
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
 
SQL> select ai chat how many customers exist;
 
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.


SQL> select ai explainsql how many customers in San Francisco are married;
 
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
 
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
  - 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
  - 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
 
Remember to adjust the table and column names based on your actual schema if they differ from the example.
 
Feel free to ask if you have more questions related to SQL or database in general.

用法指導方針

提供使用準則,以確保有效且正確地使用 SQL 產生所需的自然語言提示,以確保增強的使用者體驗。

用途

此功能用於產生與執行由使用者提供的自然語言提示所產生的 SQL 查詢。它會結合使用者選擇的大型語言模型 (LLM),自動根據使用者綱要描述資料執行手動作業。

雖然可以提供任何提示,包括與產生 SQL 查詢結果無關的提示,但 Select AI 著重於產生 SQL 查詢。選取 AI 可透過 chat 動作提交一般要求。

提示擴增資料

資料庫會以資料庫中繼資料來增強使用者指定的提示,以減輕 LLM 的幻燈片。然後,增強提示會傳送至使用者指定的 LLM 以產生查詢。

資料庫只會以綱要描述資料來增強提示。此描述資料可能包括綱要定義、表格和資料欄註解,以及資料說明和目錄中可用的內容。為了產生 SQL,在擴增提示時,資料庫不會提供表格或檢視內容 (實際列或欄值)。

不過,narrate 動作會將查詢的結果 (可能包含資料庫資料) 提供給使用者指定的 LLM,以產生描述查詢結果的自然語言文字。

警告:

大型語言模型 (LLM) 已接受廣泛的文字文件和內容 (通常來自網際網路) 訓練。因此,LLM 可能整合了無效或惡意內容的模式,包括 SQL 資料隱碼。因此,LLM 在產生實用且相關的內容時,也可能產生不正確和偽的資訊,包括產生不正確結果的 SQL 查詢和 (或) 危害資料的安全性。

由使用者指定的 LLM 供應商代替您產生的查詢將在您的資料庫中執行。貴方對此功能的使用須自行承擔風險,即使與 Oracle 提供的服務有關的任何其他條款及條件,亦構成貴方對此風險的接受,並明確排除 Oracle 對此使用所造成之損害賠償責任或責任。

關於產生 SQL

現在,使用自然語言與資料庫資料互動,即可使用 LLM。這表示您可以使用自然語言 (例如英文) 來查詢資料庫。

當您使用 Select AI 時,Autonomous Database 會管理將自然語言轉換為 SQL 的程序。這表示您可以提供自然語言提示,而非 SQL 程式碼來與資料互動。選取 AI 可作為 SQL 使用者和開發人員的生產力工具,讓非專家 SQL 使用者無須瞭解資料結構或技術語言,即可從資料中取得有用的洞察力。

Autonomous Database 中的 DBMS_CLOUD_AI 套件可與使用者指定的 LLM 整合,以使用自然語言提示產生 SQL 程式碼。套件可協助 LLM 提供資料庫架構的知識,並指示其撰寫與該架構一致的 SQL 查詢。DBMS_CLOUD_AI 套件可與 OpenAI、Cohere、Azure OpenAI Service 和 Oracle Cloud Infrastructure Generative AI 等 AI 供應商搭配使用。

附註:

使用者必須擁有 AI 提供者的帳戶,並透過 Autonomous Database 使用的 DBMS_CLOUD_AI 物件提供其證明資料。

使用 DBMS_CLOUD_AI 設定 AI 設定檔

Autonomous 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 Database 執行處理。
  • 支援 AI 提供者的付費 API 帳戶,其中之一:
    • OpenAI:若要讓 OpenAI 從自然語言提示產生 SQL,請從您的 OpenAI 付費帳戶取得 API 金鑰。

      您可以在使用者設定當中找到您的私密 API 金鑰。

    • Cohere:若要讓 Cohere 能夠從自然語言提示中產生 SQL,請從您的 Cohere 付費帳戶取得 API 金鑰。

      按一下儀表板,然後按一下左側導覽中的 API 金鑰。複製預設 API 金鑰或建立其他金鑰。請參閱 API-Keys 以瞭解詳細資訊。

    • Azure OpenAI Service:若要啟用 Azure OpenAI Service ,從自然語言提示產生 SQL,請設定並提供 AI 提供者的存取權。

      若要使用 Azure OpenAI Service ,請執行下列步驟:

      1. 取得您的秘密 API 金鑰。您可以在 Azure 入口網站的 Resource Management 區段中找到您的 API 金鑰。在您的 Azure OpenAI 服務資源頁面上,按一下金鑰和端點。您可以複製 KEY1 或 KEY2。
      2. 建立 Azure OpenAI Service 資源並部署模型:建立及部署 Azure OpenAI Service 資源

        秘訣:

        • 請注意資源名稱和部署名稱,這些參數會用來提供網路存取權限,並使用 DBMS_CLOUD_AI.CREATE_PROFILE 程序建立 Azure OpenAI Service 設定檔。
        • 若要深入瞭解模型上每分鐘記號的速率限制,請參閱 Azure OpenAI 服務配額和限制
      3. 允許存取 Azure OpenAI 服務:
        • 您可以使用加密密碼 API 金鑰來允許存取 Azure OpenAI Service 。若要深入瞭解,請參閱使用 Select AI 的範例
    • OCI Generative AI:請參閱 How to Generate the API Signing Key
    • Google:若要讓 Google AI Studio 產生您自然語言提示的 SQL 和文字回應,請從您的 Google AI Studio 付費帳戶取得 API 金鑰。
      1. 前往 Google AI Studio
      2. 按一下「登入 Google AI Studio」。
      3. 按一下提示畫面上的「取得 API 金鑰」。
      4. 選取下一頁所有適用的選項。
      5. 按一下「建立 API 金鑰」。
      6. 按一下新專案中的「建立 API」金鑰。

        此畫面會顯示進度並產生 API 金鑰。複製金鑰並儲存。

    • Anthropic:若要啟用「Anthropic 開發人員主控台」以產生自然語言提示的 SQL 和文字回應,請從您的「Antropic 開發人員主控台」付費帳戶取得 API 金鑰。
      1. 前往 Anthropic Developer Console
      2. 若您還沒有註冊帳號,請註冊該帳號。
      3. 登入後,導覽至 API 區段或儀表板。
      4. 尋找產生或檢視 API 金鑰的選項。
      5. 按一下即可建立新的 API 金鑰。
      6. 複製產生的 API 金鑰並加以儲存。

        Claude API 是付費服務。您必須先將點數新增至帳戶,才能使用 API 金鑰。

    • 擁抱臉部:為了讓您的 AI 提供者能夠產生自然語言提示的 SQL 和文字回應,請從 Hugging Face 付費帳戶取得 API 金鑰。
      1. 前往 Hugging Face
      2. 若您還沒有註冊帳號,請註冊該帳號。
      3. 瀏覽至您的帳號設定。
      4. 在導覽功能表中,尋找「存取權杖」。
      5. 按一下即可建立新的 API 金鑰。
      6. 複製產生的 API 金鑰並加以儲存。
  • 存取您外部 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 Provider 端點的使用者。

    ADMIN 使用者可以授予網路 ACL 存取權。請參閱 Oracle Database 19c PL/SQL Packages and Types Reference 中的 APPEND_HOST_ACE ProcedureOracle Database 23ai PL/SQL Packages and Types Reference 以瞭解詳細資訊。

  3. 建立證明資料以啟用 AI 提供者的存取權。

    如需詳細資訊,請參閱CREATE_CREDENTIAL 程序

下列範例將 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 Service ,請使用 <azure_resource_name>.openai.azure.com。請參閱設定檔屬性以瞭解 azure_resource_name 的詳細資訊。

若為 Google,請使用 generativelanguage.googleapis.com

對於人類,請使用 api.anthropic.com

對於 Hugging Face,請使用 api-inference.huggingface.co

ace

存取控制項目 (ACE)。提供 XS$ACE_TYPE 類型來建構 ACL 的每個 ACE 項目。如需詳細資訊,請參閱 Oracle Database 19c Real Application Security Administrator's and Developer's Guide 中的 Creating ACLs and ACEsOracle Database 23ai Real Application Security Administrator's and Developer's Guide

以下範例說明如何建立證明資料以啟用 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、Antropic 或 Hugging Face。如需詳細資訊,請參閱設定 DBMS_CLOUD_AI 套裝軟體的需求

建立和設定 AI 設定檔

描述建立和啟用 AI 設定檔的步驟。

請使用 DBMS_CLOUD_AI.CREATE_PROFILE 建立 AI 設定檔。接下來啟動 DBMS_CLOUD_AI.SET_PROFILE 以啟用 AI 設定檔,以便搭配使用 SELECT AI 搭配自然語言提示。

附註:

您必須先在每個新的資料庫階段作業 (連線) 中執行 DBMS_CLOUD_AI.SET_PROFILE ,才能使用 SELECT AI

下列使用 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 關鍵字輸入提示

使用 AI 作為 SELECT 敘述句中的關鍵字,以使用自然語言提示與資料庫互動。

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 提供者,以產生自然語言說明。

使用注意事項

  • 「資料庫動作」或 APEX 服務不支援選取 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