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)
Idea clave: GeneXus envía el prompt + contexto y recibe una respuesta (texto/JSON) y metadatos. Si es un agente, puede devolver también intenciones/acciones para que tu app las ejecute.

Paso a paso en GEAI (The Lab)

  1. Permisos y proyecto: accedé a The Lab y creá un Assistant o Agent.
  2. Definir propósito: qué resuelve, inputs esperados y formato de salida (texto/JSON).
  3. Probar: ajustar prompts, roles y límites (tokens, temperatura, timeouts).
  4. Tener claros estos datos para poder invocar:
    1. BaseURLhttps://api.saia.ai/chat o algo parecido.
    2. Nombre del agente/asistente 
      1. Para asistente :  "saia:assistant:%1"
      2. Para agente: "saia:agent:%1"
      3. Para RAG:   "saia:search:%1"
    3. Obtener el Token de autenticación : BaererToken="adadsfadsf....."
Los que yo programe, recibian un texto de entrada y tenian un texto estructurado de salida 
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á StatusCode y 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. 


Comentarios

Entradas más populares de este blog

Migrando de GeneXus 9.0 a GeneXus X.

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?