Cómo se usa la IA aquí. Los fragmentos son código real del repositorio.
Usuario a ser usado: admin@empresa.mx (contraseña Demo2026!)
Herramientas que el modelo puede usar (71):
buscar_clientesobtener_clienteconsultar_interacciones_clienteobtener_prospectoconsultar_metricas_conversioncrear_clienteactualizar_clienteagregar_contacto_clientecambiar_estatus_clienteconsultar_proveedorconsultar_orden_comprabuscar_proveedoreslistar_ordenes_compracrear_proveedorcrear_orden_compraregistrar_recepcion_ordencancelar_orden_compraconsultar_polizaconsultar_estados_financieroslistar_polizasconsultar_catalogo_cuentassugerir_polizaconsultar_tipos_documentosolicitar_eliminacion_documentoconsultar_documentoconsultar_documentos_por_vencerbuscar_documentosconsultar_comprobantebuscar_comprobante_por_foliolistar_pagos_proveedorlistar_comprobantes_pendientes_cobroconsultar_cuenta_por_pagarregistrar_pago_comprobanteconsultar_existenciasconsultar_trazabilidad_lotelistar_articulos_bajo_minimolistar_movimientos_articulocrear_articuloregistrar_movimiento_inventariocrear_orden_operacioncrear_almacenconsultar_politicasconsultar_indicadoresconsultar_reporteregistrar_indicadorconsultar_usuariopreparar_alta_usuariolistar_usuariosconsultar_pedidosresumen_ventasobtener_cotizacionobtener_pedidoconsultar_tasas_ivaconsultar_monedaspreparar_pedido_borradorcrear_prospecto_borradorconfirmar_pedidocancelar_pedidoregistrar_entrega_pedidoenviar_cotizacionaceptar_cotizacionconvertir_cotizacion_en_pedidocrear_cotizacion_borradorreemplazar_lineas_pedidoregistrar_devolucion_pedidocambiar_estatus_prospectoconvertir_prospecto_en_clienteregistrar_interaccion_clienteconfirmar_accioncancelar_accionconsultar_estado_accion
01 Cliente de chat con advisors: filtro de datos sensibles y registro de tokens
Cliente de chat con advisors: filtro de datos sensibles y registro de tokens.
this.herramientas = ToolCallbacks.from(reportes, clientes, ventas, compras, finanzas, contabilidad,
inventario, documentos, usuarios, politicas);
PromptVersionado prompt = prompts.obtener(PROMPT);
this.cliente = ChatClient.builder(modelo)
.defaultSystem(prompt.texto())
.defaultAdvisors(
new FiltroDatosSensiblesAdvisor(),
new RegistroTokensAdvisor(registro))
.build();
02 Cada pregunta pasa por los advisors y solo llegan las herramientas permitidas al rol
Cada pregunta pasa por los advisors y solo llegan las herramientas permitidas al rol.
var solicitud = cliente.prompt()
.user(pregunta.texto())
.advisors(a -> a
.param(RegistroTokensAdvisor.CLAVE_SERVICIO, SERVICIO)
.param(RegistroTokensAdvisor.CLAVE_USUARIO, pregunta.usuario())
.param(FiltroDatosSensiblesAdvisor.CLAVE_CORREO_PERMITIDO, pideAltaDeAdmin(pregunta.texto())));
ToolCallback[] permitidas = Arrays.stream(herramientas)
.filter(h -> AlcanceHerramientas.puedeUsar(h.getToolDefinition().name()))
.toArray(ToolCallback[]::new);
if (permitidas.length > 0) {
solicitud = solicitud.toolCallbacks(permitidas);
}
RegistroHerramientasUsadas.iniciar();
try {
ChatResponse respuesta = solicitud.call().chatResponse();
03 Permiso por herramienta y rol
Permiso por herramienta y rol.
static boolean puedeUsar(String herramienta) {
Set<String> roles = ROLES_POR_HERRAMIENTA.get(herramienta);
return roles != null && tieneAlgunRol(roles);
}
04 La confirmación es una herramienta aparte, no un efecto de la lectura
La confirmación es una herramienta aparte, no un efecto de la lectura.
@Tool(name = "confirmar_accion",
description = "Confirma una acción pendiente con su identificador y su código de confirmación. "
+ "Solo funciona para la persona que la preparó y dentro de su vigencia. "
+ "Un código incorrecto cancela la acción.")
public String confirmarAccion(
@ToolParam(description = "Identificador de la acción preparada", required = true) String accionId,
@ToolParam(description = "Código de confirmación de 8 dígitos que devolvió la preparación", required = true) String codigo) {
RegistroHerramientasUsadas.registrar("confirmar_accion");
return confirmaciones.confirmarConCodigo(UUID.fromString(accionId), usuarioActual(), codigo);
}