Crea un Asistente de Redacción con APEX_AI
¿Cuántas veces has visto un campo de “Observaciones” en tu sistema con textos como “cliente enojado llamar luego” o “el pedido llego mal”?
Como desarrolladores, solemos validar que el campo no esté vacío, pero rara vez validamos la calidad del contenido. En Oracle APEX 24.2, podemos solucionar esto sin crear microservicios complejos. Vamos a usar el paquete APEX_AI para convertir notas rápidas y sucias en resúmenes ejecutivos impecables.
El Objetivo
Queremos transformar un campo de texto simple en un “Editor Inteligente” donde el usuario pueda escribir ideas sueltas y, con un clic, la IA las reescriba con tono profesional.
Paso 1: Workspace Utilities
Lo primero es la seguridad. No queremos hardcodear API Keys en nuestro código PL/SQL.
- Ve a App Builder > Workspace Utilities > Generative AI.
- Crea un nuevo servicio (puedes usar OpenAI, Cohere o OCI Generative AI).
- Clave: Dale un Static ID fácil de recordar, por ejemplo:
MY_AI_SERVICE. - APEX guardará las credenciales en su bóveda segura (Web Credentials).
Paso 2: La Interfaz (UI)
En tu página de APEX (digamos, pág 10), crea:
- Text Area (Input):
P10_RAW_NOTES(Donde el usuario escribe “mal”). - Select List (Opcional):
P10_TONEcon valores:'Formal', 'Directo', 'Empático'. - Botón: “✨ Mejorar Texto”.
- Text Area (Output):
P10_POLISHED_NOTES(Donde va la magia).
Paso 3: El Código
Olvídate de APEX_WEB_SERVICE.MAKE_REST_REQUEST y de parsear JSON manualmente. En APEX 24.2, la IA es nativa.
Crea una Dynamic Action en el botón “Mejorar Texto”:
- Action: Execute Server-side Code.
- Items to Submit:
P10_RAW_NOTES,P10_TONE. - Items to Return:
P10_POLISHED_NOTES.
Código PL/SQL:
SQL
DECLARE
l_response CLOB;
l_system_prompt VARCHAR2(4000);
BEGIN
-- 1. Definimos la "Personalidad" del Asistente
-- Usamos el System Prompt para darle contexto estricto.
l_system_prompt := 'Actúa como un secretario ejecutivo experto. ' ||
'Tu tarea es reescribir el texto del usuario para que sea claro, ' ||
'profesional y gramaticalmente perfecto en Español. ' ||
'Mantén los datos fácticos, elimina jerga coloquial y usa un tono ' ||
NVL(:P10_TONE, 'Formal') || '.';
-- 2. Llamada Nativa (APEX 24.2)
-- Nota: 'MY_AI_SERVICE' es el Static ID que definimos en Workspace Utilities.
l_response := apex_ai.generate(
p_prompt => :P10_RAW_NOTES,
p_service_static_id => 'MY_AI_SERVICE',
p_system_prompt => l_system_prompt,
p_temperature => 0.4, -- Bajo para ser preciso, no creativo
p_max_tokens => 500
);
-- 3. Entregamos el resultado
:P10_POLISHED_NOTES := l_response;
EXCEPTION
WHEN OTHERS THEN
-- Gestión de errores
apex_error.add_error(
p_message => 'El asistente está tomando un café (Error de IA): ' || SQLERRM,
p_display_location => apex_error.c_inline_in_notification
);
END;
Todo sin usar web services en Python o Java
- Latencia: La llamada sale directamente desde la base de datos hacia el proveedor de IA. No hay saltos intermedios (Browser -> App Server -> Python Microservice -> OpenAI).
- Contexto de Sesión: Podrías concatenar fácilmente datos de otras tablas en el prompt (ej: “Ten en cuenta que este cliente es VIP”) usando simples
SELECT INTO. - Mantenimiento: Si cambias de OpenAI a OCI GenAI (Llama 3), solo cambias la configuración en Workspace Utilities. Cero cambios de código.
Conclusión
La IA en el desarrollo empresarial no tiene por qué ser agentes autónomos complejos. A veces, la mayor victoria rápida (quick win) es simplemente ayudar a tus usuarios a comunicarse mejor. Con APEX_AI, esto te toma literalmente 10 minutos implementar.