Cómo integrar GeneXus 18 con Globant Enterprise AI
Si trabajás con GeneXus 18, podés potenciar tus apps con Globant Enterprise AI (GEAI) para sumar inteligencia conversacional, recuperación de conocimiento (RAG) y automatización mediante agentes. En esta guía vas a ver: conceptos clave, arquitectura, paso a paso del lado de GEAI y del lado de GeneXus, y ejemplos de código listos para adaptar.
¿Qué es Globant Enterprise AI?
GEAI es una plataforma empresarial para crear y gobernar asistentes y agentes que combinan modelos generativos, herramientas externas y pipelines de recuperación (RAG) dentro de un entorno controlado. Actúa como capa de orquestación: desacopla tu aplicación del modelo, gestiona credenciales, costos, métricas, versiones y cumplimiento.
Componentes típicos
- The Lab: diseño, test y despliegue de agentes/asistentes.
- RAG: conexión a fuentes/documentos para respuestas con evidencia.
- Tools: integraciones a APIs internas/externas.
- Gobernanza: métricas, logs, versiones y seguridad.
¿Por qué usarlo?
- Modelo-agnóstico (cambiás de modelo sin reescribir tu app).
- Observabilidad y control de costos/tokens.
- Escenarios multi-paso/autónomos con agentes.
- Mejor time-to-value en equipos low-code.
Definiciones: Asistente, Agente y Asistente RAG
| Tipo | Qué hace | Autonomía | Cuándo usar | |
|---|---|---|---|---|
| Asistente | Responde a un prompt (chat clásico). | Baja | Q&A, redacción, transformaciones. | |
| Asistente RAG | Busca evidencia antes de responder. | Media | Soporte, políticas, catálogos, procedimientos. | |
| Agente | Orquesta pasos y tools, toma decisiones. | Alta | Flujos multi-paso, automatización, acciones. |
Arquitectura de la integración
Usuario → App GeneXus (UI / evento)
→ Llamada REST a GEAI (endpoint de Asistente/Agente)
→ Ejecución en GEAI (opcional: RAG + Tools)
→ Respuesta estructurada
→ GeneXus (renderiza / ejecuta acciones de negocio)
Paso a paso en GEAI (The Lab)
- Permisos y proyecto: accedé a The Lab y creá un Assistant o Agent.
- Definir propósito: qué resuelve, inputs esperados y formato de salida (texto/JSON).
- Probar: ajustar prompts, roles y límites (tokens, temperatura, timeouts).
- Tener claros estos datos para poder invocar:
- BaseURL = https://api.saia.ai/chat o algo parecido.
- Nombre del agente/asistente
- Para asistente : "saia:assistant:%1"
- Para agente: "saia:agent:%1"
- Para RAG: "saia:search:%1"
- Obtener el Token de autenticación : BaererToken="adadsfadsf....."
Es importante ponerle a los asistentes/agentes que la salida sea de un formato especifico (puede ser json, xml, CSV, HTML pero que se pueda procesar correctamente desde GeneXus.
Tambien es importante explicitarle en el prompt que no agregue nada mas a la salida y conviene ponerle ejemplo de lo que quiero como salida.
Paso a paso en GeneXus 18
1) Variables y propiedades
Con las valores anteriores, ya podemos consumir los asistentes / agentes desarrollados.
En mi caso, use procedimiento que haga el llamdo REST, pero tambien agregue el manejo de un CACHE
DE INVOCACIONES, para ahorrar cuando se realizan invocaciones con el mismo texto.
El texto puede incluir caracteres que hagan invalido el request, por lo que hay que hacer la sustitucion para que siempre sea valido, es lo que hago con el procedure TextoEscapado()
2) Llamada HTTP (REST) desde un Procedure o Event
&HttpClient.Timeout = 140
if not ExisteCacheAsistente(&Asistente,&TextoIN,&TextoOUT)
&HttpClient.AddHeader(!"Authorization", format(!"Bearer %1", BearerToken()))
&HttpClient.AddHeader(!"Content-Type", !"application/json")
&HttpClient.AddString(format(!'{"model":"%1",
"messages": [{"role": "user","content": "%2"}],"stream": false}',
&Asistente,TextoEscapado(&TextoIN)))
&HttpClient.Execute(!"POST", BaseURL())
if &HttpClient.ErrCode<> 0
&Msg = format("Error: %1 - %2 - %3", &Pgmname,&HttpClient.ErrCode, &HttpClient.ErrDescription)
Log.Error(&Msg)
Msg(&Msg,status)
else
&TextoOUT = &HttpClient.ToString()
&AsistenteResponse.FromJson(&HttpClient.ToString())
&TextoOUT = &AsistenteResponse.choices.Item(1).message.content
GraboCacheAsistente(&Asistente,&TextoIN,&TextoOUT)
endif
Endif
Simplifique un poco el codigo, para que quedara mas lindo, pero le falta chequeo de errores y ver si tiene mas de una respuesta.
3) Parseo de respuesta
Si la salida es json, lo que hice es desde GX generar un SDT con el JSON (Tools / Application Integration / JSON Import)
y eso genera un SDT.
En el código, se puede hacer
&SDT.FromJson(&SalidaDelAgente)
if NoHayErrores()
Proceso(&SDT)
endif
Si la salida es un HTML se puede mostrar en pantalla, luego de hacer alguna validación que no contenga nada peligroso.
Buenas prácticas y checklist
- Prompts estructurados: preferí entradas con campos (“objetivo”, “restricciones”, “formato de salida”).
- Manejo de errores: validá
StatusCodey contemplá timeouts/reintentos. - Versionado: mantené IDs/versions de agentes y feature flags para canary.
- Observabilidad: log de prompts/latencias/tokens (sin datos sensibles).
- Seguridad: protegé el token de GEAI; sanitizá entradas (no confiar en el modelo).
- Contratos claros: definí bien el JSON de ida/vuelta; documentá ejemplos.
- Costos: cacheá resultados repetibles; limitá longitud de prompts.
Conclusiones.
La combinación GeneXus 18 + Globant Enterprise AI te permite construir soluciones con bajo tiempo de desarrollo y alto impacto. Empezá con un Asistente, incorporá RAG para responder con evidencia y evolucioná a Agentes que orquestan procesos y herramientas.
GeneXus NEXT hace todo este proceso mucho mas facil y queda todo mucho mas integrado, pero quienes ya tenemos aplicaciones en Genexus vamos a necesitar un tiempo de transicion para incorporar agentes de IA a los sistemas que ya tenemos, por lo que este me parece un camino valido.
Estimado Enrique un saludo cordial desde Cuenca - Ecuador; ingrese a tu blog al ver que todas mis consultas realizadas en la web me dirigen a tí; por favor necesito tu ayuda; el caso es el siguiente: Al borrar el &context (el que genera la kb por defecto) e importar otro context que tenia otra ubicacion (General.context) en la kb donde la mayoría de objetos están referenciados a este 2do context, donde lo uso en el login; al momento de ejecutar la aplicación esta super lento en el arranque en genexus 18 u13 con wwplus 16 (no utilizo el context del wwplus), la lentitud se presenta al dar click en todas las opciones; no presenta errores de compilación Auxilio! gracias por tu ayuda.
ResponderBorrarNo entendi bien, pero parecen 2 problemas que no tienen nada que ver uno con el otro.
ResponderBorrarPor un lado, creo entender que tenes 2 SDT que se llamana Context en tu KB, y lo tenes en diferentes modulos. Si queres quedarte con uno solo, deberias elegir cual es el correcto y corregir todas las referencias al segundo y cambiarlas por el primero.
Algo que ayuda para no marearse con las referencias, es cambiarle el nombre a uno de ellos, y ponerle por ejemplo Context_A_Borrar al SDT que no quieras usar mas. De esta forma queda mas claro que todo lo que referencie a ese SDT tiene que ser corregido.
La lentitud con WorkwithPlus, puede deberse a a varias cosas. Si pasa en todos lados, lo mas seguro que sea algun proceso de la masterpage que esta haciendo algun procesamiento o accediendo a tablas de forma lenta.
Podes activar el log y ver que es lo que tu aplicacion esta haciendo y ver que operaciones se repiten mucho o demoran mucho.
Suerte