add ai agents
This commit is contained in:
146
lab/agents/01_agents.sql
Normal file
146
lab/agents/01_agents.sql
Normal 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;
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user