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 nodofunction.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_allama afn_bque llama afn_a).
Estado: ✅ implementado y auditado (Fases 3-4, septiembre 2026). Detalles en
doc-iaflows/05-FUNCTIONS-AND-SCOPE.md.