Saltar al contenido principal

Funciones reutilizables

Una función en AIFlows es un bloque reutilizable que encapsula lógica. Puede actuar como subrutina dentro de un grafo, como herramienta (tool) expuesta al LLM en modo agente, o ambas cosas.

Tipos de función

  • Subrutina (functionCall): invocada explícitamente desde un nodo function.call. No es visible para el LLM.
  • Tool (functionTool): registrada como herramienta del LLM. El modelo puede decidir llamarla cuando el modo agente está activo.
  • Mixta: ambas a la vez. La subrutina es invocable manualmente y la tool es invocable por el modelo.

Alcance (scope)

Las funciones tienen alcance léxico:

  • Global (scope: global): visibles desde cualquier flujo del proyecto.
  • Local (scope: local): visibles solo dentro del flujo donde están definidas.
  • Inline (scope: inline): declaradas dentro de un nodo, no reutilizables.

El motor resuelve el alcance en tiempo de compilación del grafo y reporta errores de scope antes de publicar.

Definición

{
"id": "fn_lookup_customer",
"name": "lookupCustomer",
"description": "Busca un cliente por teléfono y devuelve su nombre y saldo.",
"scope": "global",
"type": "mixed",
"inputs": [
{ "name": "phone", "type": "string", "required": true }
],
"outputs": [
{ "name": "name", "type": "string" },
{ "name": "balance", "type": "number" }
],
"implementation": {
"kind": "http",
"method": "GET",
"url": "https://api.example.com/customers?phone={{phone}}",
"headers": { "Authorization": "Bearer {{env.CRM_TOKEN}}" }
}
}

Uso como subrutina

Dentro de un grafo, agregá un nodo function.call y referenciá el id:

[ ai.text ] -> [ function.call: lookupCustomer(phone) ] -> [ ai.text with name+balance ]

Uso como herramienta del LLM

Si la función tiene type: "tool" o "mixed", queda automáticamente disponible para el LLM cuando el nodo ai.text, ai.json o el modo agente se ejecutan con el flag tools: [lookupCustomer].

El LLM recibe la firma (nombre + descripción + inputs/outputs) y puede decidir llamarla. La llamada se enruta al motor de AIFlows, que la ejecuta con el scope y variables disponibles.

Variables y scope en funciones

Cuando una función se llama, hereda un snapshot de las variables del caller. Las modificaciones que la función haga a variables en su propio scope no contaminan el scope del caller, a menos que declares la variable como output.

Validación

El validador del grafo verifica:

  • Que toda función llamada exista y esté en scope.
  • Que los inputs coincidan con la firma (tipo + required).
  • Que no haya ciclos de funciones (fn_a llama a fn_b que llama a fn_a).

Estado: ✅ implementado y auditado (Fases 3-4, septiembre 2026). Detalles en doc-iaflows/05-FUNCTIONS-AND-SCOPE.md.