Select AI Agentの使用例
ムービー分析、ログ分析、カスタマーサポートなどの一般的なタスクのために、Select AI Agentを構築、構成、および操作する方法を示す例をご覧ください。
例: エージェントの作成
定義されたタスクを実行するエージェントを作成します。
開始する前に
確認:
例: エージェントの作成
この例では、製品返品関連の会話を処理するCustomer_Return_Agentという名前のエージェントを作成します。
この例では、GOOGLEという名前のAIプロファイルで指定されたAIプロバイダとして Googleを使用する方法を説明します。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;
/ノート
ノート:マルチエージェント・チームの各エージェントは個別のAIプロファイルを持つことができ、各プロファイルは異なるAIプロバイダまたはLLM(あるいはその両方)を使用できます。
例: 組込みツールの作成
SQL、RAG、Websearch、Email、Slackなどの組込みツールを作成します。これらのツールを使用すると、エージェントおよびタスクでデータの問合せ、ナレッジの取得、Webの検索および通知の送信を行うことができます。
開始する前に
確認:
Select AI Agentは、次のタイプのツールを受け入れます。
-
SQL -
RAG -
WEBSEARCH -
NOTIFICATION-
EMAIL -
SLACK
-
ノート
ノート:組込みツール(SQLやRAGなど)には、内部命令が含まれています。オプションで、ユーザー指定の指示を追加して、ユース・ケースの動作を調整できます。命令を追加すると、タスク固有のコンテキストを追加できます(たとえば、問合せを特定のスキーマにスコープ指定したり、レスポンス・フォーマットを強制できます)。これにより、特殊なシナリオの関連性が向上します。不適切に記述された命令や過度に規定された命令は、ツールのパフォーマンスを低下させる可能性があります。指示を短く、具体的で、ツールの目的と一致させてください。
例: SQLツール
この例では、自然言語問合せをSQL文に変換するSQLツールを作成します。SQLツールは、プロンプトをSQL問合せにマップすることで、エージェントがデータ関連の質問に回答するのに役立ちます。
この例では、nl2sql_profileというAIプロファイルで指定されたAIプロバイダとしてOCIを使用しています。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": "ocid
1.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 (Retrieval Augmented Generation)ツールを作成します。RAGツールを使用すると、エージェントはエンタープライズ・ドキュメントでレスポンスを取得して接地できるため、ナレッジベースの回答の精度が向上します。
この例では、資格証明、ベクトル索引を使用してRAG_PROFILEを定義し、プロファイル・パラメータを指定しています。次に、ドキュメント埋込み用のベクトル索引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;
/例: 電子メール・タイプの通知ツール
この例では、電子メール通知ツールを作成します。Eメール・ツールを使用すると、エージェントはワークフローの一部として通知Eメールを送信できます。
この例では、パスワードを使用して資格証明EMAIL_CREDを作成し、データベース・ユーザーのSMTPアクセスを許可し、タイプEMAILの通知ツール(SMTP詳細、送信者および受信者アドレスを含む)を作成します。
ノート
ノート: Autonomous AI Databaseで資格証明を作成する前に、Oracle Cloud InfrastructureでSMTP資格証明を生成する必要があります。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'EMAIL_CRED',
username => '<SMTP username>',
password => '<SMTP 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_CREDおよびターゲット・チャネルにリンクするタイプ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;
/
BEGIN
DBMS_CLOUD_AI_AGENT.create_tool(
tool_name => 'slack',
attributes => '{"tool_type": "SLACK",
"tool_params": {"credential_name": "SLACK_CRED",
"channel": "<channel_number>"}}'
);
END;
/例: タスクの作成
エージェントが実行できるタスクを作成します。
開始する前に
確認:
ノート
ノート: EXECUTE権限およびネットワークACLプロシージャを付与できるのは、DBAのみです。
例: 電子メール・タスクの作成
この例では、構造化データを使用して標準確認Eメールを作成するようLLMに指示するGenerate_Email_Taskを作成します。
次の例では、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;
/完全な例は、例: Product Return Agentの作成を参照してください。
例: マルチエージェント・チームの作成
この例では、Ops_Issues_Solution_Teamチームを作成し、ログ分析およびトラブルシューティングを処理する2つのエージェント(Data_EngineerおよびOps_Manager)を含めます。Data_Engineerエージェントはタスクfetch_logs_taskを実行し、Ops_Managerエージェントはタスクanalyze_log_taskを実行します。processは、定義された順序でタスクを実行するために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エージェントを作成し、EMAILおよびSLACK型のSQL、RAG、WEBSEARCHおよびNOTIFICATIONツールなどの複数の組込みツールを使用します。エージェントは、自然言語プロンプトを使用してムービー関連の質問に回答します。
この例では、DBAがDBMS_CLOUD_AI_AGENT、DBMS_CLOUD_AI、DBMS_CLOUD_PIPELINEパッケージ、AIプロバイダのACLアクセス、SMTPアクセスおよびSlackアクセスに対してEXECUTE権限を付与した後、まずMOVIE_ANALYSTエージェントを作成します。
エージェントの作成
プロファイル(GROK)と、映画、俳優およびジャンルに関する質問に回答する役割を持つMOVIE_ANALYSTというエージェントを作成します。
タスクの作成
ムービー関連の問合せに回答する指示を含むANALYZE_MOVIE_TASKというタスクを作成します。
チームを作成
エージェントとしてMOVIE_ANALYST、タスクをANALYZE_MOVIE_TASKとしてMOVIE_AGENT_TEAMチームを作成し、それをアクティブなチームとして設定します。
SQL、RAG、Websearch、Notificationなどのツールを後でアタッチして、その機能を拡張できます。
Select AI Agentチームの実行
プロンプトの接頭辞として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 AI 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.例: 製品返品エージェントの作成
この例では、Select AI Agentを使用して複数ターンの会話型エージェントを作成する方法を示します。この例では、製品の返品を処理し、データベースの返品ステータスを更新する顧客サービス・エージェントを設定します。
開始する前に
確認:
この例では、Customer_Return_Agentという名前のエージェントとUpdate_Order_Status_Toolという名前のツールを作成し、製品返品を処理するタスクとチームを定義します。
この例では、DBAがDBMS_CLOUD_AI_AGENTおよびDBMS_CLOUD_AIに対するEXECUTE権限を付与した後、まず顧客のサンプル・データ、顧客のオーダー・ステータスおよび顧客のオーダー・ステータスを更新するファンクションを作成します。次に、Customer_Return_Agentという名前のエージェントを作成します。
エージェントの作成
リターン・リクエストを管理するプロファイル(OCI_GENAI_GROK)およびロールを持つCustomer_Return_Agentというエージェントを作成します。
ツールの作成
次に、Update_Order_Status_Toolという名前のエージェント・ツールを作成して、データベース内の順序のステータスを更新します。
タスクの作成
フローをガイドするHandle_Product_Return_Taskというタスクを作成します。理由(不要になった、到着が遅すぎた、ボックスが壊れた、または欠陥がある)を尋ねます。欠陥のある返品フローに進みます。
チームを作成
Customer_Return_AgentをエージェントとしてReturn_Agency_Teamというエージェント・チームを作成し、それをアクティブなチームとして設定します。
Select AI Agentチームの実行
プロンプトの接頭辞として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!例: データベース・アクションおよびAPEXでのSelect AIエージェントの使用
データベース・アクションなどのWeb SQLクライアントを使用している場合は、DBMS_CLOUD_AI_AGENT.RUN_TEAMファンクションを使用してエージェント・チームを実行し、ファンクション内にプロンプトを指定します。
ノート
ノート:データベース・アクションまたはAPEXサービスでは、DBMS_CLOUD_AI_AGENT.SET_TEAMを使用しないでください。かわりに、DBMS_CLOUD_AI_AGENT.RUN_TEAMのteam_name引数を使用してエージェント・チームを指定します。
次の例では、会話IDを作成して顧客の会話履歴を追跡し、DBMS_CLOUD_AI_AGENT.RUN_TEAM関数を使用して製品リターン・エージェントと対話します。
詳細は、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;例: ログ・レポートのフェッチおよび分析
この例では、2つのエージェント・タスク・ペアを使用してエージェント・チームを作成し、ログを取得して分析する方法を示します。
開始する前に
確認:
-
-
プロバイダとしてGoogleを使用してAIプロファイルを作成します。例: Googleを使用したSelect AIを参照してください。
-
プロバイダとしてOpenAIを使用してAIプロファイルを作成します。例: OpenAIを使用したSelect AIを参照してください。
-
この例では、次のものを作成します。
-
Data_EngineerおよびOps_Managerのトラブルシューティングのための2エージェント・ワークフロー
-
1つのツール:
log-fetcher。その後、ログをフェッチして分析するタスクおよびチームを定義します。
ノート
ノート: EXECUTE権限およびネットワークACLプロシージャを実行できるのは、DBAのみです。
この例では、DBAがAIプロバイダのDBMS_CLOUD_AI_AGENTパッケージ、DBMS_CLOUD_AIパッケージおよびACLアクセスに対するEXECUTE権限を付与した後、まずData_EngineerおよびOps_Managerエージェントを作成します。
エージェントの作成
AIプロバイダとしてGoogleを使用し、複雑なデータを取得および処理するロールを使用するプロファイル(GOOGLE)を使用して、Data_Engineerというエージェントを作成します。
OpenAIをAIプロバイダとして使用し、ロールを使用してデータを分析するプロファイル(OPENAI)を持つOps_Managerというエージェントを作成します。
ツールの作成
次に、エージェント・ツールlog_fetcherを作成します。指定した日付より後のログ・エントリを返します。これは、カスタム・プロシージャfetch_logsを使用します。
タスクの作成
フローをガイドするために、2つのタスクfetch_logs_taskおよびanalyze_log_taskを定義します。fetch_logs_taskは、log_fetcherをコールして、リクエストに基づいてログを取得します。analyze_log_taskは、フェッチされたログを分析します。
チームを作成
Data_EngineerおよびOps_Managerを使用してOps_Issues_Solution_Teamチームを作成し、順次実行します。
Select AI Agentの実行
これで、アクティブ・チームを設定し、プロンプトの接頭辞として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 back-end 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ファンクションを定義します。その後、Select AI Agentツールにファンクションが追加されます。
開始する前に
確認:
DBMS_CLOUD.SEND_REQUESTプロシージャを使用してRESTリクエストを送信し、レスポンスをテキストとして返すカスタム・ツールを作成できます。この例では、PL/SQLファンクションを記述し、エージェント・タスクで使用するツールとして追加する方法を示します。
ファンクションget_url_contentは、GETリクエストをターゲットURLに送信し、レスポンスをCLOBとして返します。DBMS_CLOUD_AI_AGENT.CREATE_TOOLは、get_url_contentファンクションを使用し、タスクでURLからコンテンツをフェッチする必要がある場合にSelect AIエージェントがコールできるHTTP_TOOLという名前のツールを作成します。
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エージェント・アクティビティをデバッグできます。
開始する前に
確認:
この例では、最新の Select AI Agentチーム実行から詳細なログを取得して表示します。この例では、USER_AI_AGENT_TEAM_HISTORYビュー、USER_AI_AGENT_TASK_HISTORYビューおよびUSER_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_HISTORYビュー、USER_AI_AGENT_TASK_HISTORYビューおよびUSER_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関数の使用例は、例: Product Return Agentの作成を参照してください。
--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;