使用 Select AI 代理程式建置自治式代理程式

Select AI Agent (自治式代理程式架構) 可讓您在 Autonomous AI Database 內建置互動式和自治式代理程式,結合規劃、工具使用、反射和記憶體,以提供多輪流工作流程。

附註:

從 19.29 版開始,Oracle Database 19c 以及從 23.26 版開始的 Oracle Database 26ai 中提供 Select AI Agent 和 DBMS_CLOUD_AI_AGENT 套件的支援。

關於 Select AI 代理程式

Select AI Agent (自主代理程式架構) 是在 Autonomous AI Database 中建立和管理互動式和自主代理程式的程式。專員有關要求、呼叫工具、反映結果,以及使用由 AI 設定檔指定的 LLM (含 ReAct (原因與動作) 專員模式提供支援的短期和長期記憶體來維護相關資訊環境。

選取 AI 代理程式可使用內建工具 (例如 RAG 和 Natural Language to SQL (NL2SQL)、自訂 PL/SQL 程序以及外部 REST API) 來完成作業。此架構會保留多週轉記憶體,在對話之間維持相關內容。這些功能可搭配使用,支援與企業資料和工作流程整合的可擴展情境感知生成式 AI。

DBMS_CLOUD_AI_AGENT 套裝軟體封裝了管理、協調和安全邊界。如需詳細資訊,請參閱 DBMS_CLOUD_AI_AGENT 套件

Select AI Agent 的功能

主要功能包括整合式智慧、彈性工具、情境感知對話,以及更快速的部署。

  • 整合智慧:

    結合規劃、工具使用和反射,讓專員能夠推理任務、選擇和執行工具、觀察結果、調整計畫,以及改善整個對話的回應。專員規劃步驟、執行工具、評估觀察,以及在結果超出預期時更新其方法。此迴圈可強化準確性、減少重工,並持續追蹤對話。

  • 彈性工具:

    支援和使用內建的 RAG 和 NL2SQL、自訂 PL/SQL 程序和外部 REST 服務,而不需要協調元件或個別基礎架構,因此您可以視需要將核心邏輯保留在資料庫中,同時整合外部功能。

  • 有情境感知的對話:

    維持短期和長期的記憶體,以在多輪流工作期間維持情境、個人化回應、儲存偏好,並支援人為迴圈控制,以進行更正和確認。短期記憶體讓目前的對話保持一致。長期記憶體記錄偏好和先前結果,支援後續互動並進行人工複查者監督。

  • 可擴充性與安全性:

    Autonomous AI Database 中執行、繼承其安全控制、稽核和效能、減少資料移動,以及大規模標準化企業部署和受規範環境的治理。代理程式有利於資料庫安全性、稽核及效能特性。將處理保持在接近資料狀態可減少移動,並符合治理實務。

  • 更快速的開發:

    使用熟悉的 SQL 和 PL/SQL 定義專員、任務和工具、更快地重複使用現有程序和出貨功能,同時讓邏輯與營運資料和團隊緊密相連,無需建置個別的基礎架構。

ReAct 代理程式樣式

選取 AI 代理程式使用 ReAct (原因與動作) 代理程式模式,其中代理程式有關要求的原因、選擇工具、執行動作,以及評估結果以達成目標。

下列是每一個重複的樣式:
  1. 查詢:使用者提出問題或提出要求。代理程式會讀取它、擷取金鑰詳細資訊,以及準備規劃後續步驟。

  2. 思維和行動:與選項相關的服務人員原因、選擇工具,然後執行工具來收集資料或視需要變更任務的狀態。

  3. 觀察:觀察包括工具或查詢結果、確認訊息以及錯誤。這些會成為服務人員下一輪推理的輸入。代理程式會記錄監測項目,並檢查結果是否支援下一個步驟或最後的回應。

  4. 最終回應:經過足夠的成功思維和觀察後,專員將清楚回答、解釋重要決策,並分享任何後續步驟或後續行動。

選取 AI 代理程式架構

Select AI Agent 將工作分為四個層:規劃、工具使用、反射和記憶體管理。這些圖層協調推理、工具執行、評估及內容多週轉互動。

Planning :Planning 會解譯使用者要求、將其細分為已排序的動作、選取候選工具,並使用階段作業環境定義、先前結果及相關知識草擬計畫。專員會分析要求、識別遺漏的詳細資料,並提出一系列排序的動作。它會選擇符合政策、資料範圍和預期結果的工具。

工具使用:「工具使用」會選取並執行每個動作的工具。支援的類型包括 RAG、NL2SQL、建立工具時可新增的自訂 PL/SQL 程序,以及 Web 搜尋和電子郵件等外部 REST 服務。每個步驟都會呼叫一個含有參數的工具。內建工具可處理擷取和 SQL 產生。自訂 PL/SQL 會封裝網域邏輯。REST 工具會連線至外部服務。

反射:「反射」會根據預期來評估工具結果,並繼續進行最終回應。代理程式會比較觀察與目標。如果結果顯示錯誤,或有工具呼叫錯誤或使用者未核准的結果,專員會修訂推理、選擇其他工具,或在重試前更新計畫。當結果不符合時,它會調整計劃、選取不同的工具,或是在繼續之前先詢問釐清問題。您可以使用 USER_CLOUD_AI_CONVERSATION_PROMPTS 查詢 Select AI Agent 思維。如需詳細資訊,請參閱 DBMS_CLOUD_AI 檢視

記憶體管理:「記憶體管理」會儲存每個代理程式團隊的階段作業相關資訊環境和知識。短期記憶體會保留每個專員團隊的最新訊息與中繼結果。長期記憶體會記錄偏好、歷史記錄和策略,以提升持續性、個人化和規劃。長期記憶體會持續在各個階段作業中提供有用的知識,提升各個代理程式團隊的指導與回應品質。

選取 AI 代理程式術語

探索與 Select AI Agent (自治式代理程式架構) 相關的概念與術語。

下列是與「選取 AI 代理程式」相關的詞彙:

詞彙 定義
專線服務員作業

在代理程式的環境定義中,動作是觸發具有參數之工具的指示。此平台會執行工具、處理錯誤,並傳回下一個推理步驟迴圈的監測。

動作可將規劃與執行連結。它們定義要執行的工具以及要使用的輸入。

代理程式

代理程式會針對定義的目的執行工作。服務人員是一個已設定的職工,其原因是要求、選取工具、執行步驟、評估結果,以及產生資料庫內容中基於基礎的回應。

代理程式會封裝特定工作的行為、原則和可用工具,例如傳回處理或知識擷取。

專員團隊

執行專員工作流程的一或多個專員。團隊負責協調職責、分享情境,並執行代理任務配對,以可靠地完成多步驟互動。

團隊將工作劃分給專業專員,並排序其貢獻。團隊會保持共享內容,並產生統一的回應。

您可以使用下列歷史記錄檢視來檢視專員與團隊執行詳細資料: USER_AI_AGENT_TEAM_HISTORY USER_AI_AGENT_TASK_HISTORY USER_AI_AGENT_TOOL_HISTORY。這些檢視會記錄每個專員、任務及團隊的提示、回應及工具執行,以提供跨專員工作流程的透明度與可追蹤性。如需這些歷史記錄檢視的詳細資訊,請參閱 DBMS_CLOUD_AI_AGENT 歷史記錄檢視

MCP 伺服器

MCP 伺服器 (模型相關資訊環境協定伺服器) 透過一致的協定公開模型功能、相關資訊環境擷取及擴充功能,為應用程式提供與生成式 AI 模型和工具互動的標準化方式。

您可以使用「選取 AI 代理程式」定義可透過「自治式 AI 資料庫 MCP 伺服器」公開的工具。這些工具可包含用於 SQL 產生、RAG、通知 (電子郵件和 Slack) 和 Websearch 的內建工具,以及自訂工具。自訂工具可以顯示資料庫中定義的函數。

監測

從工具執行傳回的資料:資料列、訊息或錯誤,服務人員會在反映期間記錄與評估。觀察會引導下一個推理步驟,並提供最終回應的證據。

作業

任務代表工作單位。它會引導工具選擇、參數對應和執行原則,產生下游步驟可以讀取和摘要的結果。

任務可指定目標、輸入、工具選擇及監護。它們會傳回結構化輸出,以供後續步驟使用。

您可以查詢 USER_AI_AGENT_TASK_HISTORY 檢視,以檢查在代理程式執行中如何定義、執行和完成工作。如需詳細資訊,請參閱 DBMS_CLOUD_AI_AGENT 歷史記錄檢視

工具

工具會執行如更新資料、擷取文件或呼叫外部服務的動作。工具採用參數,可以確定地執行或非確定性執行,並傳回推理的觀察。

封裝可重複作業的工具。它們保持副作用控制和可觀察,支援稽核和除錯。

在「選取 AI 助理」架構中,工具代表專員可在任務處理期間使用的功能建置區塊。工具可能是:
  • 確定性工具 (例如 PL/SQL 函數) 會針對相同的輸入傳回相同的輸出。
  • 非確定性工具,例如 Web 搜尋或 LLM 型摘要,輸出可能會因時間、網路結果或隨機而異。

專員可根據任務需求選取工具,並使用輸出 (稱為觀察) 來推理、決定後續步驟或產生回應。系統會記錄工具中繼資料與執行歷史記錄,以支援除錯、可觀察性及安全性。

您可以查詢 USER_AI_AGENT_TOOL_HISTORY 檢視來監督工具使用狀況,以及複查每個代理程式作業的執行結果。如需詳細資訊,請參閱 DBMS_CLOUD_AI_AGENT 歷史記錄檢視

選取 AI 代理程式使用案例

Select AI Agent 支援跨角色的實際案例:連接外部服務、使用 PL/SQL 工具建立以工作為中心的自動化,並使用自然語言互動啟用資料的對話式存取。

使用案例包括:

整合外部 API 以執行強化的回應:

連線 REST 服務,例如出貨狀態、知識文章或訊息。代理程式將外部結果與資料庫事實混合,並及時傳回可操作的指引。

使用 PL/SQL 工具建立作業特定代理程式:

建立呼叫 PL/SQL 工具以進行更新、驗證或轉換的重點代理程式,讓邏輯與資料相近、提升效能,以及一致地簡化跨環境的維護。將現有的 PL/SQL 換行以進行更新和檢查。專員在保持交易控制狀態的同時,協調任務、強制執行參數及記錄結果。

啟用企業資料的交談式存取:

透過資料庫物件上的自然語言問題公開資料。使用 NL2SQL 在遵守安全性與治理需求的同時,清楚擷取、套用原則及呈現發現項目。NL2SQL 會將問題轉譯為已核准物件的 SQL。專員在遵循物件清單與存取規則時,總結結果與後續步驟。

使用 Select AI 代理程式的先決條件

使用「選取 AI 代理程式」之前,您必須具有使用 DBMS_CLOUD_AI_AGENT 套裝軟體以及 Select AI 所需之所有其他權限的權限。

若要使用「選取 AI 代理程式」,您必須執行下列動作:

授予 Select AI 代理程式的權限

若要設定 DBMS_CLOUD_AI_AGENT,請執行下列動作:

DBMS_CLOUD_AI_AGENT 套裝程式的 EXECUTE 權限授予想要使用「選取 AI 代理程式」的使用者。

依照預設,只有系統管理員具備 EXECUTE 權限。管理員可以將 EXECUTE 權限授與其他使用者。

執行 Select AI 代理程式的權限範例

下列範例將 EXECUTE 權限授與 ADB_USER

GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;

如何使用 Select AI Agent

您可以使用 agent 動作或 DBMS_CLOUD_AI_AGENT.RUN_TEAM 函數來使用「選取 AI 代理程式」。

您可以透過下列方式使用「選取 AI 代理程式」:
  • 使用 agent 作為 Select AI 動作:Select AI agent <prompt>

  • 呼叫 DBMS_CLOUD_AI_AGENT.RUN_TEAM,並在函數內提供提示與其他參數。

這兩個選項會將提示遞送至選擇的專員團隊,並傳回團隊的回覆。

另請參閱:

瞭解詳情。

使用 Select AI Agent 的範例

探索示範如何建置、設定及與 Select AI Agent 互動的範例,以執行影片分析、日誌分析及客戶支援等常見任務。

範例:建立代理程式

建立代理程式以執行已定義的作業。

此範例會建立一個名為 Customer_Return_Agent 的代理程式,負責處理與退貨相關的產品對話。

此範例說明使用 Google 作為 AI 提供者,如名為 GOOGLE 的 AI 設定檔中所指定。AI 設定檔可識別代理程式用於推理和回應的 LLM。role 屬性提供引導代理程式的指示。

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
    agent_name => 'CustomerAgent',
    attributes =>'{
       "profile_name": "GOOGLE",
                       "role": "You are an experienced customer agent who deals with customers return request."
     }'
  );
END;
/  

範例:建立內建工具

建立內建工具,例如 SQL、RAG、Websearch、Email 和 Slack。這些工具可讓專員與任務查詢資料、擷取知識、搜尋 Web 及傳送通知。

內建工具 (例如 SQL 和 RAG) 包括內部指示。您可以選擇性地附加使用者提供的指示,為您的使用案例量身打造行為。附加指示可以新增工作特定相關資訊環境 (例如,範圍查詢至特定綱要或協助強制實行回應格式)。這可以改善特殊方案的相關性。書寫不當或規範過多的指示可能會降低工具效能。將指示保持短暫、具體且與工具的目的一致。

範例:SQL 工具

此範例會建立一個 SQL 工具,將自然語言查詢轉譯為 SQL 敘述句。SQL 工具可藉由將提示對應至 SQL 查詢,協助代理程式回答資料相關問題。

此範例顯示使用 OCI 作為 AI 提供者,如名為 nl2sql_profile 的 AI 設定檔中所指定。AI 設定檔可識別代理程式用於推理和回應的 LLM。在此範例中,AI 設定檔 nl2sql_profile 定義了專員可以查詢的一組 SH 綱要表格,讓一般語言存取常用的銷售歷史記錄資料,例如客戶、產品、促銷及國家。SQL 工具會使用 AI 設定檔中指定的資料庫物件,確保產生的 SQL 陳述式保持準確且與 SH 資料集相關。

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name => 'nl2sql_profile',
      attributes   => '{"provider": "oci",
        "credential_name": "GEN1_CRED",
        "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
	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"}]

       }');
end;
/

EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('SQL');
BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'SQL',
    attributes => '{"tool_type": "SQL",
                    "tool_params": {"profile_name": "nl2sql_profile"}}'
  );
END;
/
範例:RAG 工具

此範例會建立 RAG (檢索增強生成) 工具。RAG 工具可讓專員在企業文件中擷取和接地回應,提升知識型答案的準確性。

此範例說明使用證明資料、向量索引以及指定設定檔參數來定義 RAG_PROFILE。然後,在 Object Storage 中建立用於內嵌文件的向量索引 RAG_INDEX,並建立連結至您設定檔的 RAG_TOOL

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name =>'RAG_PROFILE',
          attributes   =>'{"provider": "oci",
            "credential_name": "GENAI_CRED",
            "vector_index_name": "RAG_INDEX",
            "oci_compartment_id": "ocid1.compartment.oc1..aaaa..",   
            "temperature": 0.2,
            "max_tokens": 3000
          }');
END;
/

BEGIN
   DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
           index_name  => 'RAG_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": "RAG_PROFILE",
                            "chunk_overlap":128,
                            "chunk_size":1024
   }');
END;
/

EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('RAG_TOOL');
BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'RAG_TOOL',
    attributes => '{"tool_type": "RAG",
                      "tool_params": {"profile_name": "RAG_PROFILE"}}'
  );
END;
/
範例:Websearch 工具

此範例會建立一個從網際網路擷取詳細資訊的 Websearch 工具。Web 搜尋工具可讓專員從 Web 查詢資訊,例如產品價格或描述。

此範例說明新增 OpenAI 提供者的 ACL 項目。使用您的 API 金鑰建立證明資料 OPENAI_CRED,並建立描述其用途的 Websearch 工具,將其連結至證明資料。

附註:

OpenAI 是唯一支援的 Websearch AI 提供者。
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;
/

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OPENAI_CRED',
    username        => 'OPENAI',
    password        => '<OPENAI_API_KEY>'
  );
END;
/

EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('Websearch');
BEGIN
  DBMS_CLOUD_AI_AGENT.create_tool(
    tool_name  => 'Websearch',
    attributes => '{"instruction": "This tool can be used for searching the details about topics mentioned in notes and prepare a summary about prices, details on web",
                      "tool_type": "WEBSEARCH",
                      "tool_params": {"credential_name": "OPENAI_CRED"}}'
  );
END;
/
範例:電子郵件類型的通知工具

此範例會建立電子郵件通知工具。「電子郵件」工具可讓專員在工作流程中傳送通知電子郵件。

此範例說明使用您的密碼建立證明資料 EMAIL_CRED、允許對資料庫使用者進行 SMTP 存取,以及建立類型為 EMAIL 的通知工具 (包括 SMTP 詳細資訊、寄件者和收件者地址)。

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'EMAIL_CRED',
    username => '<username>',
    password => '<password>');
END;
/
-- Allow SMTP access for user
BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
     host => 'smtp.email.us-ashburn-1.oci.oraclecloud.com',
     lower_port => 587,
     upper_port => 587,
     ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                        principal_name => 'ADB_USER',
                        principal_type => xs_acl.ptype_db));
END;
/

EXEC DBMS_CLOUD_AI_AGENT.DROP_TOOL('Email');
BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'EMAIL',
    attributes => '{"tool_type": "NOTIFICATION",
                    "tool_params": {"notification_type" : "EMAIL",
                                    "credential_name": "EMAIL_CRED",
                                    "recipient": "example_recipient@oracle.com",
                                    "smtp_host": "smtp.email.us-ashburn-1.oci.oraclecloud.com",
                                    "sender": "example_sender@oracle.com"}}'
  );
END;
/
範例:含有 Slack 類型的通知工具

此範例會建立 Slack 通知工具。Slack 工具可讓代理程式直接將通知傳遞至 Slack 工作區通道。

此範例說明新增 Slack 的 ACL 項目,以及建立類型為 SLACK 的通知工具,並將其連結至 SLACK_CRED 和目標通道。

BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
  host         => 'slack.com',
  lower_port   => 443,
  upper_port   => 443,
  ace          => xs$ace_type(
      privilege_list => xs$name_list('http'),
      principal_name => 'ADB_USER',
      principal_type => xs_acl.ptype_db));
END;
/
 
BEGIN
  DBMS_CLOUD_AI_AGENT.create_tool(
    tool_name  => 'slack',
    attributes => '{"tool_type": "SLACK",
                    "tool_params": {"credential_name": "SLACK_CRED",
                                    "channel": "<channel_number>"}}'
  );
END;
/

範例:建立任務

建立專員可執行的工作。

附註:

只有 DBA 才能授予 EXECUTE 權限和網路 ACL 程序。

範例:建立電子郵件任務

此範例會建立 Generate_Email_Task,指示 LLM 使用結構化資料產生標準確認電子郵件。

下列範例說明使用 instruction 屬性,並提供電子郵件應包含內容的指示。

BEGIN DBMS_CLOUD_AI_AGENT.DROP_TASK('Generate_Email_Task');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
    task_name => 'Generate_Email_Task',
    attributes => '{"instruction": "Use the customer information and product details to generate an email in a professional format. The email should:' || 
                    '1. Include a greeting to the customer by name' || 
                    '2. Specify the item being returned, the order number, and the reason for the return' ||
                    '3. If it is a refund, state the refund will be issued to the credit card on record.' ||
                    '4. If it is a replacement, state that the replacement will be shipped in 3-5 business days."}'
    );
END;
範例:建立擷取日誌作業

此範例會建立一個根據要求擷取日誌的 FETCH_LOGS_TASK

此範例說明建立使用 log_fetcher 工具擷取日誌的工作。此自訂工具指定 PL/SQL 程序 fetch_logs。任務指示會指定任務需要完成的項目。屬性 enable_human_tool 設為 true,讓人員可以視需要逐步引導或核准工作流程。如需完整範例,請參閱

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TASK(
    task_name  =>'FETCH_LOGS_TASK',
    attributes =>'{
       "instruction": "Fetch the log entries from the database based on user request: {query}",
       "tools": ["log_fetcher"],
       "enable_human_tool" : "true"
     }'
  );
END;
/
範例:建立日誌分析作業

此範例會建立一個分析擷取之日誌的 ANALYZE_LOG_TASK

下列範例說明使用 FETCH_LOGS_TASK 作為 input 屬性。名稱為 ANALYZE_LOG_TASK 的工作會在收集日誌後開始,以輸入 FETCH_LOGS_TASK 輸出。任務指示會指定任務需要完成的項目。屬性 enable_human_tool 設為 false,表示缺少人工迴圈複查。

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name  =>'ANALYZE_LOG_TASK',
      attributes =>'{"instruction": "Analyze the fetched log entries retrieved based on user request: {query} ' ||
                      'Generate a detailed report include issue analysis and possible solution.",
         "input" : "FETCH_LOGS_TASK",
         "enable_human_tool" : "false"
       }'
    );
END;
/

範例:建立專員團隊

建立專員團隊以完成您的任務。

範例:建立專員團隊

此範例會建立 ReturnAgency 團隊,並包含單一代理程式 Customer_Return_Agent。工作 Return_And_Price_Match 已指定給代理程式。此作業會詢問原因並更新您資料庫中的訂單狀態,以管理退貨請求。process 設為 sequential,以定義的順序執行工作。

BEGIN                                                                
  DBMS_CLOUD_AI_AGENT.CREATE_TEAM( 
    team_name  => 'ReturnAgency',                                                            
    attributes => '{"agents": [{"name":"Customer_Return_Agent","task" : "Return_And_Price_Match"}],
                    "process": "sequential"}');                                                                
END;                                                                      
/

如需完整範例,請參閱

範例:建立多重代理團隊

此範例會建立 Ops_Issues_Solution_Team 團隊,並包含兩個代理程式來處理日誌分析和疑難排解:Data_EngineerOps_ManagerData_Engineer 代理程式會執行工作 fetch_logs_task,而 Ops_Manager 代理程式則會執行工作 analyze_log_taskprocess 設為 sequential,以定義的順序執行工作。

BEGIN
      DBMS_CLOUD_AI_AGENT.create_team(
        team_name  => 'Ops_Issues_Solution_Team',
        attributes => '{"agents": [{"name":"Data_Engineer","task" : "fetch_logs_task"},
                                   {"name":"Ops_Manager","task" : "analyze_log_task"}],
                "process": "sequential"
                }');
END;
/

如需完整範例,請參閱

範例:使用內建工具建立影片分析代理程式

此範例顯示如何使用 Select AI Agent 建立影片分析代理程式。在此範例中,您可以設定影片分析代理程式,以擷取資料、回答問題、搜尋 Web,並以電子郵件傳送分析或傳送 Slack 通知。

下列範例假設資料可供您使用。

此範例會建立 MOVIE_ANALYST 代理程式,並使用多種內建工具,例如 SQLRAGWEBSEARCHNOTIFICATION 類型工具:EMAILSLACK。專員使用自然語言提示回答與影片相關的問題。

In this example, after your DBA grants EXECUTE privileges for: the DBMS_CLOUD_AI_AGENT, DBMS_CLOUD_AI, DBMS_CLOUD_PIPELINE packages, ACL access for your AI provider, SMTP access, and Slack access, you begin by creating the MOVIE_ANALYST agent.

建立代理程式

您可以建立一個名為 MOVIE_ANALYST 的代理程式,其中包含設定檔 (GROK),以及回答電影、動作者和類型相關問題的角色。

建立工作

您會建立一個名為 ANALYZE_MOVIE_TASK 的工作,並附上回答影片相關查詢的指示。

建立小組

您將 MOVIE_AGENT_TEAM 團隊建立為 MOVIE_ANALYST 作為代理程式,並將任務設為 ANALYZE_MOVIE_TASK,並將其設為有效團隊。

您稍後可以附加 SQL、RAG、Websearch 或 Notification 等工具來擴充其功能。

執行 Select AI 代理團隊

您現在可以使用 select ai agent 作為提示的前置碼來執行代理程式團隊。

建立的工具

然後,您可以附加不同的內建代理程式工具:
  • SQL:使用 NL2SQL 設定檔將問題轉譯為 SQL 查詢和其他支援的 Select AI 動作。
  • RAG:從儲存的文件擷取知識型內容。
  • WEBSEARCH:在網上收集電影詳情或價格。
  • NOTIFICATION:
    • EMAIL:將答案傳送給使用者提示、影片報表或評論給收件人。
    • SLACK:將答案直接傳送給 Slack 的使用者提示、摘要或更新。

完整的範例如下:

--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_PIPELINE to ADB_USER;

-- Websearch tool accesses OPENAI endpoint, allow ACL access
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;
/

-- To allow Email tool in Autonomous Database, allow SMTP access

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
     host => 'smtp.email.us-ashburn-1.oci.oraclecloud.com',
     lower_port => 587,
     upper_port => 587,
     ace => xs$ace_type(privilege_list => xs$name_list('SMTP'),
                        principal_name => 'ADB_USER,
                        principal_type => xs_acl.ptype_db));
END;
/

-- Allow ACL access to Slack

BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
  host         => 'slack.com',
  lower_port   => 443,
  upper_port   => 443,
  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 an agent
BEGIN
   DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
     agent_name => 'MOVIE_ANALYST',
     attributes => '{"profile_name": "GROK",
                     "role": "You are an AI Movie Analyst. Your can help answer a variety of questions related to movies. "
             }'
   );
END;
/

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name  => 'ANALYZE_MOVIE_TASK',
      attributes => '{"instruction": "Help the user with their request about movies. User question: {query}",
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

BEGIN                                                                 
  DBMS_CLOUD_AI_AGENT.CREATE_TEAM(  
    team_name  => 'MOVIE_AGENT_TEAM',                                                            
    attributes => '{"agents": [{"name":"MOVIE_ANALYST","task" : "ANALYZE_MOVIE_TASK"}],
                    "process": "sequential"
                    }');                                                                 
END;                                                                        
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');

PL/SQL procedure successfully completed.

select ai agent who are you?;

RESPONSE
--------------------------------------------------------------------------------
I'm MOVIE_ANALYST, an AI Movie Analyst here to assist with any questions or topi
cs related to movies. Whether you need information on films, actors, directors,
genres, or recommendations, I'm ready to help. What can I assist you with regard
ing movies?

-- SQL TOOL
BEGIN   
  DBMS_CLOUD_AI.CREATE_PROFILE(  
    profile_name =>'nl2sql_profile',                                                            
    attributes => '{"provider": "oci",                                                                  
      "credential_name": "GENAI_CRED",
      "oci_compartment_id" : "ocid1.compartment.oc1..aaaaa...",                               
      "object_list": [{"owner": "ADB_USER", "name": "GENRE"},
                      {"owner": "ADB_USER", "name": "CUSTOMER"},
                      {"owner": "ADB_USER", "name": "WATCH_HISTORY"},
                      {"owner": "ADB_USER", "name": "STREAMS"},
                      {"owner": "ADB_USER", "name": "MOVIES"},
                      {"owner": "ADB_USER", "name": "ACTORS"}]
      }');                                                                 
END;                                                                        
/

PL/SQL procedure successfully completed.

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'SQL',
    attributes => '{"tool_type": "SQL",
                    "tool_params": {"profile_name": "nl2sql_profile"}}'
  );
END;
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.drop_task('ANALYZE_MOVIE_TASK');

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name => 'ANALYZE_MOVIE_TASK',
      attributes =>'{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
                       'You can use SQL tool to search the data from database",
        "tools": ["SQL"],
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');

PL/SQL procedure successfully completed.

-- SQL tool retrieves the movie with the highest popularity view count from the watch_history table
select ai agent what is the most popular movie?;

RESPONSE
----------------------------------------------------------------
The most popular movie is "Laugh Out Loud" released in 2008.

-- RAG TOOL
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
         profile_name => 'RAG_PROFILE',
         attributes =>'{"provider": "oci",
            "credential_name": "GENAI_CRED",
            "vector_index_name": "RAG_INDEX",
            "oci_compartment_id": "ocid1.compartment.oc1..aaaaa...",   
            "temperature": 0.2,
            "max_tokens": 3000
          }');
END;
/

PL/SQL procedure successfully completed.

BEGIN
   DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
           index_name  => 'RAG_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": "MY_OCI_CRED",
                            "profile_name": "RAG_PROFILE",
                            "vector_dimension": 1024,
                            "vector_distance_metric": "cosine",
                            "chunk_overlap":128,
                            "chunk_size":1024
   }');
END;
/
PL/SQL procedure successfully completed.

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'RAG_TOOL',
    attributes => '{"tool_type": "RAG",
                      "tool_params": {"profile_name": "RAG_PROFILE"}}'
  );
END;
/

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name =>'ANALYZE_MOVIE_TASK',
      attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
                       'You can use RAG tool to search the information from the knowledge base user give.",
        "tools": ["RAG_TOOL"],
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');

PL/SQL procedure successfully completed.

-- Rag seach the object store to find review or comments of Movie Laugh out Loud 
select ai agent Please find the comments of Movie Laugh out Loud;

RESPONSE
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The comments for the movie "Laugh Out Loud" (2008) are as follows:
1. A lighthearted comedy that delivers plenty of laughs, though the plot is fairly predictable.
2. The performances are fun, especially from the lead actor who keeps the energy high.
3. Some jokes feel a bit outdated, but overall it is an enjoyable watch for a casual movie night.
4. Good chemistry between the cast members, which makes the humor more natural.
5. Not a groundbreaking comedy, but it does what it promises makes you laugh out loud.

-- WEBSEARCH TOOL
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OPENAI_CRED',
    username        => 'OPENAI',
    password        => '<API_KEY>'
  );
END;
/

PL/SQL procedure successfully completed.

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'WEBSEARCH_TOOL',
    attributes => '{"instruction": "This tool can be used for searching the details about topics mentioned in notes and prepare a summary about prices, details on web",
                      "tool_type": "WEBSEARCH",
                      "tool_params": {"credential_name": "OPENAI_CRED"}}'
  );
END;
/

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name => 'ANALYZE_MOVIE_TASK',
      attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
                       'You can use WEBSEARCH_TOOL tool to search the information from internet.",
        "tools": ["WEBSEARCH_TOOL"],
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');

PL/SQL procedure successfully completed.

select ai agent What is the most popular movie of 2023?;

RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Determining the most popular movie of 2023 can depend on various metrics such as box office earnings, streaming viewership, critical acclaim, or audience reception. Based on global box office data, which is often a strong indicator of popularity, the most successful movie of 2023 is "Barbie," directed by Greta Gerwig. Released in July 2023, it grossed over $1.4 billion worldwide, making it the highest-grossing film of the year and one of the biggest cultural phenomena, often discussed alongside "Oppenheimer" due to the "Barbenheimer" trend. Its widespread appeal, marketing, and social media buzz further solidify its status as the most popular movie of 2023. However, if you are looking for popularity based on a different metric (like streaming numbers or awards), please let me know, and I can adjust the analysis accordingly.

-- NOTIFICATION TOOL WITH EMAIL TYPE

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'EMAIL',
    attributes => q'[{"tool_type": "Notification",
                      "tool_params": {"notification_type" : "EMAIL",
                                      "credential_name": "EMAIL_CRED",
                                      "recipient": "example@oracle.com",
                                      "smtp_host": "smtp.email.us-ashburn-1.oci.oraclecloud.com",
                                      "sender": "example@oracle.com"}}]'
  );
END;
/

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name => 'ANALYZE_MOVIE_TASK',
      attributes =>'{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
                       'You can use EMAIL TOOL tool to send email to the user.",
        "tools": ["EMAIL"],
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;

PL/SQL procedure successfully completed.

EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('MOVIE_AGENT_TEAM');

PL/SQL procedure successfully completed.

select ai agent Please help me write a review of Movie "Barbie" and send the review to my email;

RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I have written a review for the movie "Barbie" (2023) and sent it to your email. Please check your inbox for the detailed review. If you have any additional feedback or would like me to revise the review, let me know!

-- NOTIFICATION TOOL WITH SLACK TYPE

DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
    tool_name  => 'SLACK_TOOL',
    attributes => '{"tool_type": "SLACK",
                    "tool_params": {"credential_name": "SLACK_CRED",
                                    "channel": "<channel_number>"}}'
  );
END;
/

PL/SQL procedure successfully completed.

BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TASK(
      task_name  => 'ANALYZE_MOVIE_TASK',
      attributes => '{"instruction": "Help the user with their request about movies. User question: {query}. ' ||
                       'You can use SLACK TOOL to send the notification to the user.",
        "tools": ["SLACK_TOOL"],
         "enable_human_tool" : "true"
       }'
    );
END;
/

PL/SQL procedure successfully completed.

select ai agent Please help me find the top 3 most-watched movies of 2023 and send them to me on slack;

RESPONSE
------------------------------------------------------------------------------------------------------------------------------------
I have sent the list of the top 3 most-watched movies of 2023 to you via Slack. Please check your Slack notifications for the details.

範例:建立產品退回代理程式

此範例顯示如何使用「選取 AI 代理程式」建立多週轉對話代理程式。在此範例中,您設定一個處理產品退貨的客戶服務專員,並更新您資料庫中的退貨狀態。

此範例會建立名為 Customer_Return_Agent 的代理程式和名為 Update_Order_Status_Tool 的工具,然後定義處理產品退貨的任務和團隊。

在本範例中,當您的 DBA 授予 DBMS_CLOUD_AI_AGENTDBMS_CLOUD_AIEXECUTE 權限之後,您就可以開始建立客戶範例資料、客戶訂單狀態,以及更新客戶訂單狀態的功能。然後,建立名為 Customer_Return_Agent 的代理程式。

建立代理程式

您可以使用設定檔 (OCI_GENAI_GROK) 和角色建立名為 Customer_Return_Agent 的代理程式,以管理傳回要求。

建立的工具

然後建立名為 Update_Order_Status_Tool 的代理程式工具,以更新資料庫中訂單的狀態。

建立工作

您可以建立一個名為 Handle_Product_Return_Task 的工作來引導流程:要求原因 (不再需要、太晚到達、方塊中斷或有瑕疵)。繼續進行有缺陷的退貨流程。

建立小組

您建立名為 Return_Agency_Team 的專員團隊,並以 Customer_Return_Agent 作為專員,並將其設為有效團隊。

執行 Select AI 代理團隊

您現在可以使用 select ai agent 作為提示的前置碼來執行代理程式團隊。

完整的範例如下:

--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;

BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
    agent_name => 'Customer_Return_Agent',
    attributes => '{"profile_name": "OCI_GENAI_GROK",
                    "role": "You are an experienced customer return agent who deals with customers return requests."}');
END;
/
 
PL/SQL procedure successfully completed.
 
  

--Sample customer data
CREATE TABLE CUSTOMERS (
    customer_id  NUMBER(10) PRIMARY KEY,
    name         VARCHAR2(100),
    email        VARCHAR2(100),
    phone        VARCHAR2(20),
    state        VARCHAR2(2),
    zip          VARCHAR2(10)
);

INSERT INTO CUSTOMERS (customer_id, name, email, phone, state, zip) VALUES
(1, 'Alice Thompson', 'alice.thompson@example.com', '555-1234', 'NY', '10001'),
(2, 'Bob Martinez', 'bob.martinez@example.com', '555-2345', 'CA', '94105'),
(3, 'Carol Chen', 'carol.chen@example.com', '555-3456', 'TX', '73301'),
(4, 'David Johnson', 'david.johnson@example.com', '555-4567', 'IL', '60601'),
(5, 'Eva Green', 'eva.green@example.com', '555-5678', 'FL', '33101');

--create customer order status
CREATE TABLE CUSTOMER_ORDER_STATUS (
    customer_id     NUMBER(10),
    order_number    VARCHAR2(20),
    status          VARCHAR2(30),
    product_name    VARCHAR2(100)

);

INSERT INTO CUSTOMER_ORDER_STATUS (customer_id, order_number, status, product_name) VALUES
(2, '7734', 'delivered', 'smartphone charging cord'),
(1, '4381', 'pending_delivery', 'smartphone protective case'),
(2, '7820', 'delivered', 'smartphone charging cord'),
(3, '1293', 'pending_return', 'smartphone stand (metal)'),
(4, '9842', 'returned', 'smartphone backup storage'),
(5, '5019', 'delivered', 'smartphone protective case'),
(2, '6674', 'pending_delivery', 'smartphone charging cord'),
(1, '3087', 'returned', 'smartphone stand (metal)'),
(3, '7635', 'pending_return', 'smartphone backup storage'),
(4, '3928', 'delivered', 'smartphone protective case'),
(5, '8421', 'pending_delivery', 'smartphone charging cord'),
(1, '2204', 'returned', 'smartphone stand (metal)'),
(2, '7031', 'pending_delivery', 'smartphone backup storage'),
(3, '1649', 'delivered', 'smartphone protective case'),
(4, '9732', 'pending_return', 'smartphone charging cord'),
(5, '4550', 'delivered', 'smartphone stand (metal)'),
(1, '6468', 'pending_delivery', 'smartphone backup storage'),
(2, '3910', 'returned', 'smartphone protective case'),
(3, '2187', 'delivered', 'smartphone charging cord'),
(4, '8023', 'pending_return', 'smartphone stand (metal)'),
(5, '5176', 'delivered', 'smartphone backup storage');

--Create a update customer order status function
CREATE OR REPLACE FUNCTION UPDATE_CUSTOMER_ORDER_STATUS (
    p_customer_name IN VARCHAR2,
    p_order_number  IN VARCHAR2,
    p_status        IN VARCHAR2
) RETURN CLOB IS
    v_customer_id  customers.customer_id%TYPE;
    v_row_count    NUMBER;
BEGIN
    -- Find customer_id from customer_name
    SELECT customer_id
    INTO v_customer_id
    FROM customers
    WHERE name = p_customer_name;
    
    UPDATE customer_order_status
    SET status = p_status
    WHERE customer_id = v_customer_id
      AND order_number = p_order_number;

    v_row_count := SQL%ROWCOUNT;

    IF v_row_count = 0 THEN
        RETURN 'No matching record found to update.';
    ELSE
        RETURN 'Update successful.';
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        RETURN 'Error: ' || SQLERRM;
END;

--Create Tool
BEGIN
    DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
        tool_name => 'Update_Order_Status_Tool',
        attributes => '{"instruction": "This tool updates the database to reflect return status change. Always confirm user name and order number with user before update status",
                        "function" : "update_customer_order_status"}',
        description => 'Tool for updating customer order status in database table.'
    );
END;
/
--Create Task
BEGIN
  DBMS_CLOUD_AI_AGENT.CREATE_TASK(
    task_name => 'Handle_Product_Return_Task',
    attributes => '{"instruction": "Process a product return request from a customer:{query}' || 
                    '1. Ask customer the order reason for return (no longer needed, arrived too late, box broken, or defective)' || 
                    '2. If no longer needed:' ||
                    '   a. Inform customer to ship the product at their expense back to us.' ||
                    '   b. Update the order status to return_shipment_pending using Update_Order_Status_Tool.' ||
                     '3. If it arrived too late:' ||
                    '   a. Ask customer if they want a refund.' ||
                    '   b. If the customer wants a refund, then confirm refund processed and update the order status to refund_completed' || 
                    '4. If the product was defective or the box broken:' ||
                    '   a. Ask customer if they want a replacement or a refund' ||
                    '   b. If a replacement, inform customer replacement is on its way and they will receive a return shipping label for the defective product, then update the order status to replaced' ||
                    '   c. If a refund, inform customer to print out the return shipping label for the defective product, return the product, and update the order status to refund' ||
                    '5. After the completion of a return or refund, ask if you can help with anything else.' ||
                    '   End the task if user does not need help on anything else",
                    "tools": ["Update_Order_Status_Tool"]}'
  );
END;
/
SQL> BEGIN                                                                
  DBMS_CLOUD_AI_AGENT.CREATE_TEAM( 
    team_name  => 'Return_Agency_Team',                                                            
    attributes => '{"agents": [{"name":"Customer_Return_Agent","task" : "Handle_Product_Return_Task"}],
                    "process": "sequential"}');                                                                
END;                                                                      
/
 
PL/SQL procedure successfully completed.
 
SQL> EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('Return_Agency_Team');
 
PL/SQL procedure successfully completed.

--Validate that the agent team is set in the current session with get_team
SQL> SELECT DBMS_CLOUD_AI_AGENT.GET_TEAM from DUAL;
 
--Interact with the agent
SQL> select ai agent I want to return a smartphone case;

RESPONSE
Could you please tell me the reason for returning the smartphone case? Is it no longer needed, arrived too late, box broken, or defective?

SQL> select ai agent the item is defective

RESPONSE
I'm sorry to hear that the smartphone case is defective. Would you like a replacement or a refund?

SQL> select ai agent I will need a replacement

RESPONSE
Can you please confirm your name and order number so I can update the status and process the replacement?

SQL> select ai agent I''m Bob Martinez and my order number is 7820

RESPONSE
Is there anything else I can help you with?

SQL> select ai agent No, I''m all set. Thanks

RESPONSE
Thank you for reaching out, Bob. I'm glad I could assist with the return of your smartphone case and stand. If you have any further questions or need assistance in the future, feel free to contact us. Have a great day!
範例:搭配 Database Actions 和 APEX 使用 Select AI Agent

如果您使用 Web SQL 從屬端 (例如資料庫動作 ),請使用 DBMS_CLOUD_AI_AGENT.RUN_TEAM 函數來執行代理程式團隊,並在函數中提供提示。

附註:

請勿在「資料庫動作」或 APEX 服務中使用 DBMS_CLOUD_AI_AGENT.SET_TEAM。請改為使用 DBMS_CLOUD_AI_AGENT.RUN_TEAMteam_name 引數來指定代理程式團隊。

下列範例會建立對話 ID 來追蹤客戶交談歷史記錄,然後使用 DBMS_CLOUD_AI_AGENT.RUN_TEAM 函數與產品退貨代理程式互動。

請參閱 ,以取得詳細資訊。

CREATE OR REPLACE PACKAGE my_globals IS
  l_team_cov_id varchar2(4000);
END my_globals;
/
-- Create conversation
DECLARE
  l_team_cov_id varchar2(4000);
BEGIN
  l_team_cov_id := DBMS_CLOUD_AI.create_conversation();
  my_globals.l_team_cov_id := l_team_cov_id;
  DBMS_OUTPUT.PUT_LINE('Created conversation with ID: ' || my_globals.l_team_cov_id);
END;

--Interact with the agent
DECLARE
  v_response VARCHAR2(4000);
BEGIN
  v_response :=  DBMS_CLOUD_AI_AGENT.RUN_TEAM(
    team_name   => 'Return_Agency_Team',
    user_prompt => 'I want to return a smartphone case',
    params      => '{"conversation_id": "' || my_globals.l_team_cov_id || '"}'
  );
  DBMS_OUTPUT.PUT_LINE(v_response);
END;

範例:擷取及分析日誌報表

此範例顯示如何使用兩個代理程式工作組來擷取日誌及分析日誌,來建立代理程式團隊。

此範例會建立:
  • 一個用於疑難排解的雙代理程式工作流程:Data_EngineerOps_Manager
  • 一項工具:log-fetcher
然後定義擷取日誌及分析日誌的作業和小組。

附註:

只有 DBA 才能執行 EXECUTE 權限和網路 ACL 程序。

在本範例中,當您的 DBA 授與 EXECUTE 權限給您的 AI 提供者: DBMS_CLOUD_AI_AGENT 套裝程式、DBMS_CLOUD_AI 套裝程式以及 ACL 存取之後,您必須先建立 Data_EngineerOps_Manager 代理程式。

建立代理程式

您可以使用設定檔 (GOOGLE) 建立名為 Data_Engineer 的代理程式,該設定檔使用 Google 作為 AI 提供者和角色來擷取和處理複雜的資料。

使用使用 OpenAI 作為 AI 提供者和角色來分析資料的設定檔 (OPENAI),建立名為 Ops_Manager 的代理程式。

建立的工具

然後建立代理程式工具:log_fetcher:傳回指定日期之後的日誌項目。這會使用自訂程序 fetch_logs

建立工作

您可以定義兩個工作 fetch_logs_taskanalyze_log_task 來引導流程。fetch_logs_task 會根據要求呼叫 log_fetcher 以擷取日誌。analyze_log_task 會分析擷取的日誌。

建立小組

您可以使用 Data_EngineerOps_Manager 建立 Ops_Issues_Solution_Team 群組,以依序執行。

執行 Select AI 代理程式

您現在設定有效的團隊,並以 select ai agent 作為提示字首來執行服務人員團隊。

完整的範例如下:

--Grants EXECUTE privilege to ADB_USER
--
GRANT EXECUTE on DBMS_CLOUD_AI_AGENT to ADB_USER;
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for 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;
/
--Grant Network ACL for Google endpoint
BEGIN
      DBMS_NETWORK_ACL_ADB_USER.APPEND_HOST_ACE(
        host => 'generativelanguage.googleapis.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 a table with Database logs and insert sample data

SQL> CREATE TABLE app_logs (
  log_id         NUMBER GENERATED BY DEFAULT AS IDENTITY,
  log_timestamp  DATE,
  log_message    VARCHAR2(4000)
);

Table created.

SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
  TO_DATE('2025-03-22 03:15:45', 'YYYY-MM-DD HH24:MI:SS'),
  'INFO: Database Cluster: Failover completed successfully. Standby promoted to primary. Downtime duration: 33 seconds. Correlation ID: dbfailover102.'
);

1 row created.

SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
  TO_DATE('2025-03-23 08:44:10', 'YYYY-MM-DD HH24:MI:SS'),
  'INFO: Switchover Process: Synchronization restored. Performing scheduled switchover. Correlation ID: dbswitchover215.'
);

1 row created.

SQL> INSERT INTO app_logs (log_timestamp, log_message) VALUES (
  TO_DATE('2025-03-24 03:15:12', 'YYYY-MM-DD HH24:MI:SS'),
  'ERROR: Database Cluster: Primary database unreachable, initiating failover to standby. Correlation ID: dbfailover102.'
);

1 row created.

SQL> COMMIT;

Commit complete.

-- create data engineer agent
SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
        agent_name => 'Data_Engineer',
        attributes => '{"profile_name": "GOOGLE",
                        "role": "You are a specialized data ingestion engineer with expertise in   ' ||
                         'retrieving and processing data from complex database systems."
               }'
      );
    END;
    /
PL/SQL procedure successfully completed.

-- create ops manager agent
SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
        agent_name => 'Ops_Manager',
        attributes => '{"profile_name": "OPENAI",
                        "role": "You are an experienced Ops manager who excels at analyzing ' ||
                'complex log data, diagnosing the issues."
         }'
      );
    END;
    /
 
 
PL/SQL procedure successfully completed.
 
-- create log_fetcher tool
-- fetch_logs is a customized procedure.
-- Please make sure you have created your own procedure before use it in the tool

--Create a customized fetch_logs procedure
SQL> CREATE OR REPLACE FUNCTION fetch_logs(since_date IN DATE) RETURN CLOB IS
  l_logs CLOB;
BEGIN
  SELECT JSON_ARRAYAGG(log_message RETURNING CLOB)
    INTO l_logs
    FROM app_logs
   WHERE log_timestamp >= since_date
   ORDER BY log_timestamp;

  RETURN l_logs;
EXCEPTION
  WHEN OTHERS THEN
    RETURN 'Error fetching logs: ' || SQLERRM;
END fetch_logs;
/

Function created.

SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
        tool_name => 'log_fetcher',
        attributes => '{"instruction": "retrieves and returns all log messages with a LOG_TIMESTAMP greater than or equal to the input date.",
                        "function": "fetch_logs"}'
      );
    END;
    /
 
PL/SQL procedure successfully completed.
 
-- create task with log fetcher tool

SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.CREATE_TASK(
        task_name  => 'fetch_logs_task',
        attributes => '{"instruction": "Fetch the log entries from the database based on user request: {query}}.",
                        "tools": ["log_fetcher"]}'
      );
    END;
    /
 
PL/SQL procedure successfully completed.
 
-- create task with predefined rag and slack tool

SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.create_task(
        task_name => 'analyze_log_task',
        attributes => '{"instruction": "Analyze the fetched log entries retrieved based on user request: {query} ' ||
                      'Generate a detailed report include issue analysis and possible solution.",
           "input" : "fetch_logs_task"
        }'
     );
    END;
    /
 
PL/SQL procedure successfully completed.

-- create team and set agent team
SQL> BEGIN
      DBMS_CLOUD_AI_AGENT.create_team(
        team_name  => 'Ops_Issues_Solution_Team',
        attributes => '{"agents": [{"name":"Data_Engineer","task" : "fetch_logs_task"},
                                    {"name":"Ops_Manager","task" : "analyze_log_task"}],
                "process": "sequential"
                }');
    END;
    /
 
PL/SQL procedure successfully completed.
 
SQL> EXEC DBMS_CLOUD_AI_AGENT.SET_TEAM('Ops_Issues_Solution_Team');
 
 
PL/SQL procedure successfully completed.
 

SQL> select ai agent fetch and analyze the logs after 03/15 2025;
 
RESPONSE
-----------------------------------------------------------------------------------------------------------------------------------------------
1. Issue: High volume of 500 Internal Server Errors between 03/22 and 03/24.
   Solution: Review server application logs to identify failing components; add better exception handling and fallback mechanisms to prevent service crashes.
 
2. Issue: Increased response time on /api/v1/user and /checkout, peaking on 03/25.
   Solution: Profile backend queries and services, apply caching where applicable, and offload static content to a CDN.
 
3. Issue: Detected brute-force login attack with over 500 failed POST attempts from a single IP.
   Solution: Add rate-limiting, temporary IP bans, and CAPTCHA on the /login endpoint to prevent credential stuffing.
 
4. Issue: Suspicious User-Agent headers such as curl/7.58.0 or empty headers mimicking mobile devices.
   Solution: Block malformed or uncommon User-Agent strings and log them for threat intelligence analysis.
 
5. Issue: DDoS-like traffic spike from distributed IPs observed on 03/20.
   Solution: Enable DDoS protection at the CDN or cloud provider level, and configure autoscaling to absorb burst traffic.

範例:建立自訂的 HTTP 工具

此範例定義傳送 HTTP GET 要求並傳回回應文字的 PL/SQL 函數。然後,函數就會新增至「選取 AI 代理程式」工具中。

您可以建立使用 DBMS_CLOUD.SEND_REQUEST 程序傳送 REST 要求的自訂工具,並以文字形式傳回回應。此範例顯示如何撰寫 PL/SQL 函數,並將它新增為用於代理程式作業的工具。

函數 get_url_content 會將 GET 要求傳送至目標 URL,並以 CLOB 的形式傳回回應。當工作需要從 URL 擷取內容時,DBMS_CLOUD_AI_AGENT.CREATE_TOOL 會使用 get_url_content 函數並建立名為 HTTP_TOOL 的工具,供 Select AI 代理程式呼叫。

CREATE OR REPLACE FUNCTION get_url_content (
    url IN CLOB
) RETURN CLOB
AS
    l_resp   DBMS_CLOUD_TYPES.RESP;
    l_result CLOB;
BEGIN
    l_resp := DBMS_CLOUD.SEND_REQUEST(
                credential_name => NULL,
                method          => 'GET',
                uri             => url
             );
    l_result := DBMS_VECTOR_CHAIN.UTL_TO_TEXT(DBMS_CLOUD.GET_RESPONSE_RAW(l_resp);
    RETURN l_result;
END get_url_content;
/

BEGIN
  DBMS_CLOUD_AI_AGENT.create_tool(
    tool_name  => 'HTTP_TOOL',
    attributes => '{
      "instruction": "This tool fetches and returns the plain text content from the specified URL. ",
      "function": "get_url_content"
    }'
  );
END;
/

範例:檢視最新團隊執行的專員提示與回應

此範例使用歷史檢視與對話資料顯示最近服務人員團隊執行的提示、回應及服務人員想法,以協助對最近的 Select AI Agent 活動進行除錯。

此範例會從最近的 Select AI Agent 團隊執行中擷取並顯示詳細的日誌。此範例使用 USER_AI_AGENT_TEAM_HISTORYUSER_AI_AGENT_TASK_HISTORYUSER_CLOUD_AI_CONVERSATION_PROMPTS 檢視來顯示每個專員的團隊名稱、任務、相關提示及回應。使用此查詢可藉由複查輸入提示與從最新團隊執行產生的回應,來疑難排解問題。

WITH latest_team AS (
  SELECT team_exec_id, team_name, start_date
  FROM user_ai_agent_team_history
  ORDER BY start_date DESC
  FETCH FIRST 1 ROW ONLY
),
latest_task AS (
    SELECT team_exec_id, task_name, agent_name, conversation_params, start_date,
           ROW_NUMBER() OVER (PARTITION BY team_exec_id, task_name, agent_name 
                             ORDER BY start_date DESC) as rn
  FROM user_ai_agent_task_history
)
SELECT
  team.team_name,
  task.task_name,
  task.agent_name,
  p.prompt,
  p.prompt_response
FROM latest_team team
JOIN latest_task task
  ON team.team_exec_id = task.team_exec_id
 AND task.rn = 1
LEFT JOIN user_cloud_ai_conversation_prompts p
  ON p.conversation_id = JSON_VALUE(task.conversation_params, '$.conversation_id')
ORDER BY task.start_date DESC NULLS LAST,
         p.created     DESC NULLS LAST;
此範例會從工具、任務及團隊歷史記錄檢視擷取詳細日誌。使用下列查詢來稽核工具、任務和團隊使用狀況,以及疑難排解問題和日誌分析。查詢使用 USER_AI_AGENT_TOOL_HISTORYUSER_AI_AGENT_TASK_HISTORYUSER_AI_AGENT_TASK_HISTORY 檢視。
--View the tool history

select * from USER_AI_AGENT_TOOL_HISTORY
order by START_DATE desc

--View the task history

select * from USER_AI_AGENT_TASK_HISTORY
order by START_DATE desc

--View the team history
select * from USER_AI_AGENT_TEAM_HISTORY
order by START_DATE desc

範例:從 WAITING_FOR_HUMAN 狀態繼續代理程式團隊執行

此範例顯示當工作歷史記錄狀態為 WAITING_FOR_HUMAN 時,如何恢復服務人員團隊執行。當專員團隊進入 WAITING_FOR_HUMAN 狀態時,會暫停直到使用者提供下一個輸入或確認為止。您可以根據使用代理程式團隊的方式繼續執行:在 SQL 命令行或透過 DBMS_CLOUD_AI_AGENT.RUN_TEAM

範例:使用 SQL 命令行繼續代理程式團隊執行

如果您在 SQL 命令行上使用 SELECT AI AGENT <prompt>,則 Select AI Agent 會自動恢復暫停的團隊執行。不需要其他參數,即可維護對話相關資訊環境 (包括先前的提示和推理)。

範例:使用 DBMS_CLOUD_AI_AGENT.RUN_TEAM 繼續代理程式團隊執行

如果您使用 DBMS_CLOUD_AI_AGENT.RUN_TEAM 程序,您可以傳送在初始執行中使用的相同 conversation_id 來恢復已暫停的代理程式團隊。系統會保留專員團隊執行狀態 (包括待處理動作與上下文),且專員團隊會從其停止處完全繼續。

如需使用 DBMS_CLOUD_AI_AGENT.RUN_TEAM 函數的範例,請參閱

--Interact with the agent
DECLARE
  v_response VARCHAR2(4000);
BEGIN
  v_response :=  DBMS_CLOUD_AI_AGENT.RUN_TEAM(
    team_name   => '<same initial team name>',
    user_prompt => 'response to request',
    params      => '{"conversation_id": "<same initial conversation_id>"}'
  );
  DBMS_OUTPUT.PUT_LINE(v_response);
END;