Guillaume Duvernay

Dominar los sub-workflows de n8n puede hacerte peligrosamente bueno en IA

n8nagentsAI efficiencyarchitecture

Un sub-workflow en n8n es un flujo de trabajo cuyo disparador es When executed by another workflow. Defines lo que entra, construyes los pasos y el resultado del último nodo es lo que recibe quien lo llama.

Es una función, o un microservicio si prefieres esa palabra. Puedes construirlo todo sin usar nunca uno, que es la razón por la cual mucha gente no lo hace.

Quiero hacer una afirmación más ambiciosa de lo que sugiere el título del vídeo. Dominar esto no es una habilidad de n8n. Es donde aprendes, en un lienzo donde cada paso es visible, las cuatro cosas que deciden si algo que construyes con IA es rentable: dividir un trabajo repetitivo en pasos, dar a cada paso solo el contexto necesario, elegir un modelo por paso y dejar de delegar decisiones a un agente una vez que ya conoces el orden. n8n no es el tema. Es el lugar donde esas cuatro cosas son más fáciles de ver.

Los sub-workflows son útiles para dos cosas. La primera es la obvia y te ahorra mantenimiento. La segunda es la que me enseñó todo esto.

La ventaja aburrida: construirlo una sola vez

Ejemplo de operaciones de ventas. Un flujo de trabajo gestiona las solicitudes de demostración. Otro procesa un CSV de asistentes a un evento. Ambos, en algún momento, necesitan enriquecer un lead: tomar un correo electrónico, obtener la empresa y el sector de un proveedor de datos, hacer que un modelo resuma la actividad de la empresa y calificar el lead.

Eso son cinco o seis nodos. Podrías construirlos en el flujo de solicitudes de demostración, luego volver a construirlos en el flujo del CSV y repetirlo en los otros ocho lugares que acaben necesitando lo mismo.

La salida del último nodo es la salida del subflujo, por lo que termino estos con un nodo Edit Fields. Es el contrato, y conviene escribirlo explícitamente en lugar de dejar que se filtre cualquier cosa que haya devuelto el nodo anterior.

La recompensa llega a los seis meses, cuando el proveedor de datos cambia o alguien quiere un campo más en la salida. Editas un solo flujo de trabajo y todos los que lo llaman se actualizan.

La ventaja interesante: una herramienta que devuelve solo lo importante

Este es el escenario. Un curso de biología está en Airtable: 15 capítulos, cada uno con un nombre, un resumen y el contenido completo. Un agente responde preguntas sobre él.

Este agente ya es mejor que la versión básica. Tiene dos herramientas en lugar de un volcado masivo de datos: buscar en todos los capítulos, que devuelve solo IDs y resúmenes, y obtener el contenido de un capítulo. El prompt del sistema le indica que lea primero los resúmenes, elija de uno a tres capítulos y luego los solicite.

Ese diseño de dos pasos ya supone la mayor parte de la mejora.

Medido pegando las salidas reales de la herramienta en un contador de caracteres. La tercera barra es lo que envía una configuración básica en cada pregunta, incluso en las que tratan sobre un solo capítulo.

Entonces, ¿por qué cambiar algo? Por dos razones, y ninguna tiene que ver con el recuento de palabras.

El modelo grande se ejecuta una vez por llamada a la herramienta

Analicemos una ejecución. GPT-5.1 está conectado, es caro y es bueno, y fue llamado tres veces: una para decidir buscar capítulos, otra para decidir obtener el contenido y otra para redactar la respuesta.

Cada una de esas llamadas incluye el mensaje del sistema y la memoria acumulada de los resultados de las herramientas anteriores. La entrada crece en cada turno.

Dos de esas tres llamadas no requirieron un razonamiento que justificara un modelo caro. Simplemente eligieron qué capítulos parecían relevantes a partir de una lista de resúmenes.

La herramienta devuelve campos que no has pedido

La herramienta Get Record de Airtable no tiene filtro de campos. Si pides el contenido completo de un capítulo, también recibes el nombre, la fecha de creación y el resumen, datos que ya tenías de la primera llamada y que ahora duplicas.

Eso no se puede solucionar en la herramienta. Se puede solucionar un paso después, si existe ese paso.

Un subflujo para gestionar toda la recuperación

Elimina ambas herramientas. Sustitúyelas por una única herramienta de subflujo que pase de un tema al contenido completo de los capítulos correctos.

El único nodo coloreado es el único modelo de este lienzo, y es uno pequeño. Todo lo demás es movimiento de datos, que es para lo que n8n sirve realmente.

El paso de selección es en el que vale la pena detenerse. Su prompt de sistema es una sola frase: el mensaje del usuario indica un tema, encuentra de uno a tres capítulos relevantes, y aquí tienes la lista completa de capítulos con sus resúmenes. Su salida estructurada es una lista de IDs de registro.

Se trata de una tarea de clasificación frente a una lista de 15 resúmenes. GPT-4.1 Mini lo hace correctamente y rápido, y nunca pago precios de modelos frontera por ello.

De dos a una en la decisión, y el paso que se eliminó es el que cargaba con la mayor memoria acumulada.

Y debido a que hay un nodo Set entre Airtable y la salida, devuelvo el título del capítulo y el contenido completo. No viaja nada más.

El prompt de sistema del agente también se vuelve más corto, y no esperaba que esto importara tanto como importa. Ahora es: responde basándote en el curso de biología, llama siempre primero a esta herramienta y luego responde solo con lo que te haya dado. Una herramienta, sin reglas de orden, nada que pueda salir mal.

El mismo truco en una herramienta de búsqueda web

Segundo ejemplo, misma estructura. Un agente con una herramienta de búsqueda web, en mi caso Linkup, aunque Perplexity o cualquier otra herramienta se comporta igual.

Si conectas la API directamente, te topas con dos problemas. Acepta una pregunta por llamada, por lo que una pregunta amplia debe hacerse por partes, un viaje de ida y vuelta cada vez. Y la respuesta incluye la lista completa de fuentes, que acaba en el contexto quieras o no.

Cuatro nodos, y dos de ellos existen solo para descartar datos. La llamada a la API en el centro es la parte que habrías tenido al conectar la API directamente.

Pregunta algo como cómo encajan el SEO y la optimización de motores generativos en 2026, y el agente lo divide solo en tres búsquedas: tendencias y estrategias, cómo optimizar para ambos y mejores prácticas según el tamaño de la empresa. Una llamada a la herramienta, tres búsquedas paralelas, un solo elemento agregado y limpio de vuelta.

El paralelismo es lo que se percibe como velocidad. Tres llamadas secuenciales de diez segundos suponen medio minuto del usuario mirando un indicador de carga.

Es un único esqueleto, no tres workflows

Construí un tercero de estos para un agente RAG, sobre un curso vectorizado en Supabase. Se ve diferente en el lienzo, pero es lo mismo otra vez.

Todos mis sub-workflows de recuperación son así. Los pasos que varían son la fuente en el medio y si hay algo que filtrar.

El filtro es el paso que los otros dos no tienen, y está ahí porque un almacén de vectores devuelve una puntuación de similitud y Airtable no. Cuando la fuente te da un número, puedes descartar los resultados que no son lo suficientemente buenos. En ese workflow el límite es 0.4, y cualquier cosa por debajo nunca llega al agente.

Dos cosas que aprendí construyendo el tercero y que ahora aplicaría en todos.

Nombra los campos de salida. El agregado al final no produce un bloque anónimo, produce un campo llamado Knowledge base retrieval, y dentro de él, cada entrada empareja Query to the knowledge base con Chunks returned. El modelo lee esos nombres. Entregarle un array y esperar que deduzca qué resultado responde a qué pregunta es un coste que se paga en la respuesta final.

Indica cuando no hayas encontrado nada. Un filtro que elimina todo no produce elementos, y sin elementos el siguiente nodo nunca se ejecuta y el agente recibe silencio. Por eso hay un IF después del filtro, y su rama vacía escribe una frase: nada alcanzó el umbral de relevancia para esta consulta. En n8n, esto también implica configurar el filtro para que siempre devuelva datos, de lo contrario la rama que escribiste para este caso nunca se activa.

Ese segundo paso cambia lo que el agente puede hacer. Su prompt de sistema termina con la instrucción de decir que no lo sabe en lugar de responder basándose en conocimientos generales, y esa instrucción solo es sincera si la recuperación posterior es sincera al devolver un resultado vacío.

Nada de esto trata realmente sobre n8n

Los tres hacen lo mismo: intercalan pasos entre el agente y la respuesta bruta, y en esos pasos descartan información. He aquí por qué creo que esto vale más que un flujo de trabajo.

Dividir una tarea repetitiva en pasos es la clave. Una tarea que ejecutas una sola vez puede ser descuidada. Una tarea que ejecutas trescientas veces paga ese descuido trescientas veces, y un agente que decide el orden en cada una de esas ejecuciones es pagar a un modelo para que redescubra un esquema que podrías haber dibujado en un papel. En el momento en que conoces los pasos, escribirlos no es una pérdida de flexibilidad, es el objetivo.

Cada paso recibe el contexto que necesita y nada más. Eso es lo que hace cada nodo de limpieza de este artículo. Es también lo que medí con Jev: colocar un pequeño clasificador delante de un agente para decidir qué habilidades precarga y eliminar los campos que nunca leerá de cada respuesta de la herramienta resultó un 29 % más barato de media y un 61 % en la mejor tarea, sin pérdida de calidad. Misma idea, un nivel más arriba. El contexto no es gratuito y la mayor parte de lo que llega en él nunca llegaría a leerse.

El modelo adecuado para cada paso. Una tarea de clasificación frente a quince resúmenes no requiere el modelo más avanzado. Una vez que los pasos están separados, esto deja de ser una opinión y se convierte en un ajuste que puedes cambiar por nodo.

Orquestar, en lugar de delegar. Los pasos deben pasarse entre sí algo útil, por eso los campos de salida tienen nombre y por eso un resultado vacío lo indica explícitamente. Eso es orquestación, y es la parte que un agente hace de forma invisible y deficiente.

Es el mismo razonamiento que me hizo dejar de usar MCP en cualquier cosa que repita: un script contra la API puede hacer el filtrado, el mapeo y el bucle sin un modelo en medio, y MCP no puede, porque el modelo es el medio.

Los agentes ocultan estos cuatro puntos, que es exactamente por qué merece la pena haber construido uno a mano. Cuando estoy en Claude Code y algo parece lento o caro, lo que busco es el paso que devolvió todo cuando yo solo necesitaba tres campos. Casi siempre está ahí, y solo sé buscarlo porque una vez conecté ese paso yo mismo y observé el recuento de tokens.

Fuentes