Beispiele für die Verwendung von Select AI Agent

Entdecken Sie Beispiele, die zeigen, wie Sie Select AI Agent für allgemeine Aufgaben wie Filmanalyse, Protokollanalyse und Kundensupport erstellen, konfigurieren und mit ihm interagieren.

Beispiel: Agent erstellen

Erstellen Sie einen Agenten, um eine definierte Aufgabe auszuführen.
Beispiel: Agent erstellen

In diesem Beispiel wird ein Agent namens Customer_Return_Agent erstellt, der für die Verarbeitung von Unterhaltungen im Zusammenhang mit Produktrückgaben verantwortlich ist.

Dieses Beispiel veranschaulicht die Verwendung von Google als KI-Provider, wie im AI-Profil GOOGLE angegeben. Das AI-Profil identifiziert das LLM, das der Agent für Argumentation und Antworten verwendet. Das Attribut role enthält Anweisungen, die den Agent leiten.

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

Jeder Agent in einem Team mit mehreren Agents kann ein eindeutiges KI-Profil aufweisen, und jedes Profil kann einen anderen KI-Provider und/oder ein anderes LLM verwenden.

Beispiel: Integrierte Tools erstellen

Erstellen Sie integrierte Tools wie SQL, RAG, Websearch, Email und Slack. Mit diesen Tools können Agents und Aufgaben Daten abfragen, Wissen abrufen, im Web suchen und Benachrichtigungen senden.

Select AI Agent akzeptiert die folgenden Tools:

  • SQL

  • RAG

  • WEBSEARCH

  • NOTIFICATION

    • EMAIL
    • SLACK
Beispiel: SQL-Tool

In diesem Beispiel wird ein SQL-Tool erstellt, das Abfragen in natürlicher Sprache in SQL-Anweisungen übersetzt. Mit dem SQL-Tool können Agents datenbezogene Fragen beantworten, indem sie Prompts in SQL-Abfragen zuordnen.

Dieses Beispiel veranschaulicht die Verwendung von OCI als KI-Provider, wie im KI-Profil nl2sql_profile angegeben. Das AI-Profil identifiziert das LLM, das der Agent für Argumentation und Antworten verwendet.

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

In diesem Beispiel wird ein RAG-Tool (Retrieval Augmented Generation) erstellt. Mit dem RAG-Tool können Agents Antworten in Unternehmensdokumenten abrufen und auf diese Weise die Genauigkeit für wissensbasierte Antworten verbessern.

Dieses Beispiel veranschaulicht die Definition einer RAG_PROFILE mit Zugangsdaten, einem Vektorindex und die Angabe von Profilparametern. Erstellen Sie dann einen Vektorindex RAG_INDEX in Object Storage für Dokumenteinbettungen, und erstellen Sie die RAG_TOOL, die mit Ihrem Profil verknüpft ist.

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",
                            "vector_dimension": 1024,
                            "vector_distance_metric": "cosine",
                            "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;
/
Beispiel: Websearch-Tool

In diesem Beispiel wird ein Websearch-Tool zum Abrufen von Details aus dem Internet erstellt. Mit dem Websearch-Tool können Agents Informationen aus dem Web suchen, z.B. Produktpreise oder Beschreibungen.

Dieses Beispiel veranschaulicht das Hinzufügen eines ACL-Eintrags für den Provider OpenAI. Zugangsdaten OPENAI_CRED mit Ihrem API-Schlüssel erstellen und das Websearch-Tool erstellen, dessen Zweck beschreiben und mit den Zugangsdaten verknüpfen.

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;
/
Beispiel: Benachrichtigungstool mit E-Mail-Typ

In diesem Beispiel wird ein Tool für E-Mail-Benachrichtigungen erstellt. Mit dem Tool "E-Mail" können Agents Benachrichtigungs-E-Mails als Teil ihres Workflows senden.

In diesem Beispiel wird veranschaulicht, wie Sie Zugangsdaten EMAIL_CRED mit Ihrem Kennwort erstellen, SMTP-Zugriff für den Datenbankbenutzer zulassen und ein Benachrichtigungstool mit dem Typ EMAIL erstellen, einschließlich SMTP-Details, Absender- und Empfängeradressen.

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;
/
Beispiel: Benachrichtigungstool mit Slack-Typ

In diesem Beispiel wird ein Slack-Benachrichtigungstool erstellt. Mit dem Slack-Tool können Agents Benachrichtigungen direkt an einen Slack-Workspace-Kanal senden.

Dieses Beispiel veranschaulicht das Hinzufügen eines ACL-Eintrags für Slack und das Erstellen eines Benachrichtigungstools mit dem Typ SLACK, das ihn mit SLACK_CRED und dem Zielkanal verknüpft.

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

Beispiel: Aufgabe erstellen

Erstellen Sie eine Aufgabe, die ein Agent ausführen kann.
Hinweis

Nur ein DBA kann EXECUTE-Berechtigungen und eine Netzwerk-ACL-Prozedur erteilen.

Beispiel: E-Mail-Aufgabe erstellen

In diesem Beispiel wird Generate_Email_Task erstellt, das das LLM anweist, eine Standardbestätigungs-E-Mail mit strukturierten Daten zu erstellen.

Das folgende Beispiel veranschaulicht die Verwendung des Attributs instruction und gibt Anweisungen dazu, was die E-Mail enthalten soll.

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;
Beispiel: Fetch-Logaufgabe erstellen

In diesem Beispiel wird eine FETCH_LOGS_TASK erstellt, die Logs basierend auf der Anforderung abruft.

Dieses Beispiel veranschaulicht das Erstellen einer Aufgabe, die das Tool log_fetcher zum Abrufen von Logs verwendet. Dieses benutzerdefinierte Tool gibt die PL/SQL-Prozedur fetch_logs an. Die Aufgabenanweisung gibt an, was die Aufgabe erfüllen muss. Das Attribut enable_human_tool ist auf "true" gesetzt, sodass eine Person den Taskflow bei Bedarf leiten oder genehmigen kann. Ein vollständiges Beispiel finden Sie unter Beispiel: Logberichte abrufen und analysieren.

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;
/
Beispiel: Loganalyseaufgabe erstellen

In diesem Beispiel wird eine ANALYZE_LOG_TASK erstellt, mit der die abgerufenen Logs analysiert werden.

Das folgende Beispiel veranschaulicht, wie Sie FETCH_LOGS_TASK als Attribut input verwenden. Die Aufgabe ANALYZE_LOG_TASK wird gestartet, nachdem Logs erfasst wurden, damit FETCH_LOGS_TASK als Eingabe ausgegeben wird. Die Aufgabenanweisung gibt an, was die Aufgabe erfüllen muss. Das Attribut enable_human_tool ist auf "false" gesetzt, das angibt, dass keine Human-in-the-Loop-Prüfung vorhanden ist.

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

Beispiel: Agent-Team erstellen

Erstellen Sie Agent-Teams, um Ihre Aufgaben zu erfüllen.
Beispiel: Agent-Team erstellen

In diesem Beispiel wird das Team ReturnAgency erstellt und ein einzelner Agent Customer_Return_Agent enthalten. Die Aufgabe Return_And_Price_Match ist dem Agent zugewiesen. Diese Aufgabe verwaltet Retourenanforderungen, indem der Grund abgefragt und der Bestellstatus in Ihrer Datenbank aktualisiert wird. Die process ist auf sequential gesetzt, um die Aufgaben in einer definierten Reihenfolge auszuführen.

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

Ein vollständiges Beispiel finden Sie unter Beispiel: Product Return Agent erstellen.

Beispiel: Multi-Agent-Team erstellen

In diesem Beispiel wird das Team Ops_Issues_Solution_Team erstellt. Es enthält zwei Agents zur Verarbeitung der Loganalyse und Fehlerbehebung: Data_Engineer und Ops_Manager. Der Agent Data_Engineer führt die Aufgabe fetch_logs_task aus, und der Agent Ops_Manager führt die Aufgabe analyze_log_task aus. Die process ist auf sequential gesetzt, um die Aufgaben in einer definierten Reihenfolge auszuführen.

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

Ein vollständiges Beispiel finden Sie unter Beispiel: Logberichte abrufen und analysieren.

Beispiel: Erstellen eines Filmanalyse-Agents mit integrierten Tools

In diesem Beispiel wird gezeigt, wie Sie mit Select AI Agent einen Filmanalyse-Agent erstellen können. In diesem Beispiel richten Sie einen Filmanalyse-Agent ein, der Daten abruft, Fragen beantwortet, im Web sucht und die Analyse per E-Mail versendet oder Slack-Benachrichtigungen sendet.

In diesem Beispiel wird ein MOVIE_ANALYST-Agent erstellt und mehrere integrierte Tools wie SQL, RAG, WEBSEARCH und NOTIFICATION vom Typ EMAIL und SLACK verwendet. Der Agent beantwortet filmbezogene Fragen mit Eingabeaufforderungen in natürlicher Sprache.

In diesem Beispiel erstellen Sie zunächst den MOVIE_ANALYST-Agent, nachdem Ihr DBA EXECUTE-Berechtigungen erteilt hat für: die Packages DBMS_CLOUD_AI_AGENT, DBMS_CLOUD_AI, DBMS_CLOUD_PIPELINE, ACL-Zugriff für Ihren AI-Provider, SMTP-Zugriff und Slack-Zugriff.

Agent erstellen

Sie erstellen einen Agent mit dem Namen MOVIE_ANALYST mit einem Profil (GROK) und der Rolle, Fragen zu Filmen, Schauspielern und Genres zu beantworten.

Aufgabe erstellen

Sie erstellen eine Aufgabe mit dem Namen ANALYZE_MOVIE_TASK mit Anweisungen zur Beantwortung filmbezogener Abfragen.

Team einrichten

Sie erstellen ein MOVIE_AGENT_TEAM-Team mit MOVIE_ANALYST als Agent und der Aufgabe ANALYZE_MOVIE_TASK und legen es als aktives Team fest.

Sie können später Tools wie SQL, RAG, Websearch oder Notification anhängen, um ihre Funktionen zu erweitern.

Select AI Agent-Team ausführen

Sie führen das Agent-Team jetzt aus, indem Sie select ai agent als Präfix für Ihre Prompts verwenden.

Tools erstellen

Anschließend hängen Sie verschiedene integrierte Agent-Tools an:
  • SQL: Verwendet ein NL2SQL-Profil, um Fragen in SQL-Abfragen und andere unterstützte Select AI-Aktionen zu übersetzen.
  • RAG: Ruft wissensbasierten Kontext aus gespeicherten Dokumenten ab.
  • WEBSEARCH: Sammeln Sie Filmdetails oder Preise online.
  • NOTIFICATION:
    • EMAIL: Senden Sie Antworten auf Benutzereingabeaufforderungen, Filmberichte oder Bewertungen an einen Empfänger.
    • SLACK: Antworten auf Benutzereingabeaufforderungen, Zusammenfassungen oder Aktualisierungen direkt an Slack senden.

Das vollständige Beispiel lautet wie folgt:

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

Beispiel: Produktretouren-Agent erstellen

In diesem Beispiel wird gezeigt, wie Sie mit Select AI Agent einen Conversational Agent mit mehreren Turns erstellen können. In diesem Beispiel richten Sie einen Kundenservice-Agent ein, der Produktretouren verarbeitet und den Retourenstatus in Ihrer Datenbank aktualisiert.

In diesem Beispiel werden ein Agent namens Customer_Return_Agent und ein Tool namens Update_Order_Status_Tool erstellt. Anschließend werden eine Aufgabe und ein Team für die Verarbeitung der Produktrückgabe definiert.

In diesem Beispiel erstellen Sie zunächst Beispieldaten zu Kunden, Kundenauftragsstatus und einer Funktion zur Aktualisierung des Kundenauftragsstatus, nachdem Ihr DBA EXECUTE-Berechtigungen erteilt hat für: DBMS_CLOUD_AI_AGENT und DBMS_CLOUD_AI. Erstellen Sie dann einen Agent namens Customer_Return_Agent.

Agent erstellen

Sie erstellen einen Agent namens Customer_Return_Agent mit einem Profil (OCI_GENAI_GROK) und einer Rolle zur Verwaltung von Retourenanforderungen.

Tools erstellen

Anschließend erstellen Sie ein Agent-Tool namens Update_Order_Status_Tool, um den Status der Bestellung in Ihrer Datenbank zu aktualisieren.

Aufgabe erstellen

Sie erstellen eine Aufgabe mit dem Namen Handle_Product_Return_Task, um den Ablauf zu leiten: fragen Sie nach dem Grund (nicht mehr benötigt, zu spät angekommen, Box defekt oder defekt). Fahren Sie mit einem fehlerhaften Rückfluss fort.

Team einrichten

Sie erstellen das Team ReturnAgency mit Customer_Return_Agent und legen es als aktives Team fest.

Select AI Agent-Team ausführen

Sie führen das Agent-Team jetzt aus, indem Sie select ai agent als Präfix für Ihre Prompts verwenden.

Das vollständige Beispiel lautet wie folgt:

--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  => 'ReturnAgency',                                                            
    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('ReturnAgency');
 
PL/SQL procedure successfully completed.
 
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!

Beispiel: Logberichte abrufen und analysieren

In diesem Beispiel wird gezeigt, wie Sie ein Agent-Team mit zwei Agenten-Aufgabenpaaren erstellen können, um Logs abzurufen und zu analysieren.
Bevor Sie beginnen
Beurteilung:
In diesem Beispiel wird Folgendes erstellt:
  • Zwei-Agent-Workflows zur Fehlerbehebung: Data_Engineer und Ops_Manager
  • ein Tool: log-fetcher
und definiert Aufgaben und Team, um Protokolle abzurufen und zu analysieren.
Hinweis

Nur ein DBA kann EXECUTE-Berechtigungen und eine Netzwerk-ACL-Prozedur ausführen.

In diesem Beispiel erstellen Sie zunächst die Agents Data_Engineer und Ops_Manager, nachdem Ihr DBA EXECUTE-Berechtigungen für Folgendes erteilt hat: das Package DBMS_CLOUD_AI_AGENT, das Package DBMS_CLOUD_AI und den ACL-Zugriff für Ihre AI-Provider.

Agent erstellen

Sie erstellen den Agent namens Data_Engineer mit einem Profil (GOOGLE), das Google als KI-Provider und -Rolle verwendet, um komplexe Daten abzurufen und zu verarbeiten.

Erstellen Sie den Agent mit dem Namen Ops_Manager mit einem Profil (OPENAI), das OpenAI als KI-Provider und -Rolle zur Analyse der Daten verwendet.

Tool erstellen

Anschließend erstellen Sie ein Agent-Tool:log_fetcher: gibt Logeinträge nach einem bestimmten Datum zurück. Dabei wird die benutzerdefinierte Prozedur fetch_logs verwendet.

Aufgaben erstellen

Sie definieren zwei Aufgaben fetch_logs_task und analyze_log_task, um den Ablauf zu steuern. Die fetch_logs_task ruft log_fetcher auf, um Logs basierend auf der Anforderung abzurufen. Die analyze_log_task analysiert die abgerufenen Logs.

Team einrichten

Sie erstellen ein Ops_Issues_Solution_Team-Team mit Data_Engineer und Ops_Manager, um nacheinander auszuführen.

Select AI Agent ausführen

Sie legen jetzt das aktive Team fest und führen das Agent-Team mit select ai agent als Präfix für Ihre Prompts aus.

Das vollständige Beispiel lautet wie folgt:

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