add ai agents

This commit is contained in:
Fernando Melo
2026-05-28 19:41:13 -03:00
parent 052eb23d54
commit dd6bbdbd92
2 changed files with 150 additions and 16 deletions

146
lab/agents/01_agents.sql Normal file
View File

@@ -0,0 +1,146 @@
set serveroutput on
set long 9999999
set pagesize 1000
set linesize 200
-- ============================================================================
-- Lab: AI Agents con DBMS_CLOUD_AI_AGENT
-- ============================================================================
-- Este lab crea un tool SQL, un agente, una tarea y un team.
-- El agente usa el profile PROFILE_GPT_5_5_SELECTAI, que ya fue creado con el
-- scope de tablas del workshop y con annotations habilitadas.
--
-- Tablas del ejemplo:
-- - T_COMERCIOS: comercios participantes, rubros y procesadora de pago.
-- - T_BENEFICIOS_POR_NIVEL: reglas de reintegro por nivel de cliente.
-- ============================================================================
-- Limpieza para poder repetir el lab
-- ============================================================================
-- El orden evita dependencias: primero team, despues task, agente y tool.
BEGIN
DBMS_CLOUD_AI_AGENT.DROP_TEAM(
team_name => 'TEAM_PROMO_BENEFICIOS',
force => TRUE
);
END;
/
BEGIN
DBMS_CLOUD_AI_AGENT.DROP_TASK(
task_name => 'TASK_ANALIZAR_PROMO_BENEFICIOS',
force => TRUE
);
END;
/
BEGIN
DBMS_CLOUD_AI_AGENT.DROP_AGENT(
agent_name => 'AGENT_ANALISTA_PROMOCIONES',
force => TRUE
);
END;
/
BEGIN
DBMS_CLOUD_AI_AGENT.DROP_TOOL(
tool_name => 'TOOL_SQL_PROMO_BENEFICIOS',
force => TRUE
);
END;
/
-- ============================================================================
-- Tool SQL
-- ============================================================================
-- El tool SQL usa Select AI para traducir preguntas de negocio a SQL.
-- El profile restringe el contexto a las tablas del lab y envia las annotations
-- de tablas, columnas y relaciones al modelo.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TOOL(
tool_name => 'TOOL_SQL_PROMO_BENEFICIOS',
attributes => '{"tool_type": "SQL",
"tool_params": {"profile_name": "PROFILE_GPT_5_5_SELECTAI"}}',
description => 'Tool SQL para consultar comercios y beneficios por nivel usando Select AI.'
);
END;
/
-- ============================================================================
-- Agente
-- ============================================================================
-- El role define la especialidad del agente. El profile_name indica que sus
-- respuestas usan el mismo LLM configurado para el lab de Select AI.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_AGENT(
agent_name => 'AGENT_ANALISTA_PROMOCIONES',
attributes => '{"profile_name": "PROFILE_GPT_5_5_SELECTAI",
"role": "Eres un analista de promociones bancarias. Respondes en espanol claro, usas datos en la base de datos para responder preguntas.",
"enable_human_tool": "false"}',
description => 'Agente analista para comercios participantes y beneficios por nivel.'
);
END;
/
-- ============================================================================
-- Task
-- ============================================================================
-- La instruccion usa {query}; RUN_TEAM reemplaza ese marcador con la pregunta
-- enviada por el usuario. El tool SQL queda disponible para consultar la base.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TASK(
task_name => 'TASK_ANALIZAR_PROMO_BENEFICIOS',
attributes => '{"instruction": "Responde la siguiente pregunta del usuario: {query}. Identifica si requiere datos de comercios, categorias, procesadoras, niveles, porcentajes, compra minima o tope de reintegro. Si requiere datos, usa TOOL_SQL_PROMO_BENEFICIOS para consultar T_COMERCIOS y T_BENEFICIOS_POR_NIVEL. Devuelve una respuesta corta, util para negocio, incluyendo valores relevantes.",
"tools": ["TOOL_SQL_PROMO_BENEFICIOS"],
"enable_human_tool": "false"}',
description => 'Task para responder preguntas de negocio sobre promociones, comercios y beneficios.'
);
END;
/
-- ============================================================================
-- Team
-- ============================================================================
-- El team orquesta que agente ejecuta que tarea. En este lab hay un solo agente
-- y una sola tarea, pero el patron permite agregar mas pasos despues.
BEGIN
DBMS_CLOUD_AI_AGENT.CREATE_TEAM(
team_name => 'TEAM_PROMO_BENEFICIOS',
attributes => '{"agents": [{"name": "AGENT_ANALISTA_PROMOCIONES", "task": "TASK_ANALIZAR_PROMO_BENEFICIOS"}],
"process": "sequential"}',
description => 'Team para consultas agenticas sobre comercios y beneficios por nivel.'
);
END;
/
-- ============================================================================
-- Chat rapido con RUN_TEAM
-- ============================================================================
-- RUN_TEAM inicia la conversacion con el team y pasa el texto a {query}.
-- conversation_id permite aislar una conversacion cuando una aplicacion llama
-- el team de forma stateless, por ejemplo desde APEX o una API.
DECLARE
l_conversation_id VARCHAR2(4000);
l_response CLOB;
BEGIN
l_conversation_id := DBMS_CLOUD_AI.CREATE_CONVERSATION;
DBMS_CLOUD_AI.SET_CONVERSATION_ID(l_conversation_id);
l_response := DBMS_CLOUD_AI_AGENT.RUN_TEAM(
team_name => 'TEAM_PROMO_BENEFICIOS',
user_prompt => 'Que Zapaterias tienen beneficios y cuales son los topes por nivel',
params => JSON_OBJECT('conversation_id' VALUE l_conversation_id)
);
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(l_response, 4000, 1));
DBMS_CLOUD_AI_AGENT.CLEAR_TEAM;
DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;
END;
/

View File

@@ -1,3 +1,4 @@
set serveroutput on
set long 9999999
set pagesize 1000
@@ -81,22 +82,6 @@ SELECT JSON_SERIALIZE(
action => 'runsql'
) returning CLOB pretty);
-- dbms_cloud_ai
DECLARE
l_response CLOB;
BEGIN
l_response := DBMS_CLOUD_AI.GENERATE(
prompt => 'Muestra los locales participantes por rubro, indicando el comercio, la categoria y la procesadora de pago.',
profile_name => 'PROFILE_GPT_5_5_SELECTAI',
action => 'showsql'
);
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(l_response, 4000, 1));
END;
/
-- ============================================================================
-- Ejemplo 2: beneficio por segmento, compra minima y tope
-- ============================================================================
@@ -121,3 +106,6 @@ SELECT AI runsql
Muestra rubro, comercio, procesadora, nivel del cliente, porcentaje de reintegro, compra minima
y limite maximo de devolucion.
;