RunnableParallel
Componente RunnableParallel
El componente RunnableParallel es una herramienta diseñada para trabajar con agentes o cadenas de procesamiento de lenguaje (como chatbots o analistas de texto). Su función principal es tomar una sola pregunta o instrucción y enviarla simultáneamente a varios agentes diferentes para obtener múltiples perspectivas o resultados al mismo tiempo.
Imagina que tienes una pregunta compleja y quieres asegurarte de obtener la mejor respuesta posible. En lugar de preguntar a un solo agente y esperar, puedes usar este componente para preguntar a tres o cuatro agentes distintos al mismo tiempo. Una vez que todos han terminado de pensar, el componente une sus respuestas en un solo mensaje organizado para que puedas leerlas fácilmente.
Esto es especialmente útil en sistemas de automatización cuando necesitas comparar respuestas, obtener datos de múltiples fuentes simultáneamente o validar una respuesta con distintos puntos de vista.
¿Cómo funciona?
El funcionamiento de este componente se puede entender en tres pasos sencillos:
- Distribución de la Tarea: Cuando conectas un mensaje o texto a la entrada de este componente, el sistema crea una copia de ese mensaje y lo envía a cada uno de los “agentes” o herramientas que hayas conectado. Todos trabajan con la misma información inicial.
- Ejecución Paralela: Los agentes conectados procesan la información simultáneamente. No esperan a que el otro termine; trabajan en “paralelo”, lo que hace el proceso más rápido y eficiente.
- Combinación de Resultados: Una vez que cada agente termina su trabajo, el componente recoge las respuestas. Toma el texto de cada respuesta y lo organiza en un solo bloque de texto. Cada respuesta irá etiquetada con el nombre del agente que la generó, separadas por saltos de línea para que sea fácil distinguir quién dijo qué.
El componente es “inteligente” al momento de leer las respuestas: intenta encontrar el texto útil dentro de los datos complejos que suelen devolver las herramientas de IA, ignorando códigos o datos técnicos que no son relevantes para ti.
Entradas
A continuación, se detallan los campos necesarios para configurar este componente:
Campos de Entrada
- Input: [El mensaje, pregunta o texto que deseas que todos los agentes procesen. Debes conectar aquí la salida de un nodo anterior que contenga la información a analizar.]
- Agent Executor: [Aquí debes conectar los agentes, cadenas de herramientas o cualquier otro componente de IA que desees ejecutar. Puedes conectar uno o varios; todos se ejecutarán al mismo tiempo.]
- Input Key: [Es un campo avanzado que define el nombre interno que usará el componente para referirse a tu entrada. Por defecto es “input”. Solo cámbialo si tus agentes requieren un nombre específico para la entrada.]
- Output Key: [Es un campo avanzado que ayuda al componente a encontrar la respuesta correcta dentro de los datos complejos que devuelve un agente. Por defecto es “output”. Úsalo si sabes que tus agentes guardan la respuesta bajo una etiqueta específica.]
Salidas
El componente produce una única salida principal:
Text
Esta salida contiene el resultado combinado de todos los agentes que conectaste. Es un texto plano donde se muestran las respuestas de cada agente, precedidas por su nombre.
Por ejemplo, si conectaste un “Agente de Traducción” y un “Agente de Resumen”, la salida de texto dirá algo como: text Agente de Traducción: (Traducción del texto…) Agente de Resumen: (Resumen del texto…)
Puedes conectar esta salida de texto a otros componentes para mostrar el resumen final en una interfaz, guardarlo en una base de datos o para realizar más análisis.
Ejemplo de Respuesta JSON
Dado que el componente devuelve un texto plano estructurado y no un objeto JSON estricto, el formato de salida se ve como una cadena de texto estándar. Sin embargo, si tuvieras que mapear este dato en un sistema que espera estructura, se vería conceptualmente así: json { “text”: “Agente A: Respuesta obtenida del agente A.\nAgente B: Respuesta obtenida del agente B.\nAgente C: Respuesta obtenida del agente C.” }
Conectividad
Este componente se conecta lógicamente de la siguiente manera:
- Entrada (Input): Recibe datos de cualquier componente que genere texto, como un Chat Input, un Read Document o un HTTP Request.
- Conexiones Internas (Agent Executor): Debes conectar aquí agentes de LangChain, herramientas de IA o procesadores de texto.
- Salida (Text): Conecta este campo a componentes que puedan recibir texto, como un LLM (para un resumen final), un String Formatter, un Send Email o directamente a una salida visual en tu dashboard de Nappai.
Ejemplo de Uso
Escenario: Quieres analizar un correo electrónico de un cliente para extraer su problema principal, su tono emocional y generar una posible respuesta sugerida.
- Conectas el texto del correo electrónico al campo Input.
- Conectas tres agentes diferentes al campo Agent Executor:
- Un agente especializado en Análisis de Sentimiento.
- Un agente especializado en Extracción de Datos (para encontrar el problema).
- Un agente de Redacción de Respuestas.
- El componente RunnableParallel envía el correo a los tres al mismo tiempo.
- La salida Text contendrá las tres perspectivas. Puedes enviar esa salida final a un agente experto que lea esas tres respuestas y redacte el correo de respuesta definitiva al cliente.
Notas Importantes
🔒 Security Run Trusted Runnables Only 🔴 Debido a que este componente ejecuta código o lógica de agentes externos, solo debes usar agentes de fuentes que confíes. El uso de agentes de fuentes desconocidas podría comprometer la seguridad de tus datos o ejecutar código no deseado.
⚠️ Limitation Supports Only Runnable Subclasses 🟡 Este componente solo funciona con objetos estándar de IA (como Cadenas o Agentes de LangChain). Si intentas conectar otro tipo de herramienta o código no compatible, es probable que obtengas un error.
⚠️ Limitation Simple Result Parsing Only 🟡 El componente intenta leer automáticamente la respuesta, pero asume que los datos son relativamente simples (como un diccionario plano o una lista corta). Si tus agentes devuelven estructuras de datos extremadamente complejas o anidadas, es posible que parte de la información se pierda o se malinterprete.
⚠️ Limitation Input Key Mismatch Warning 🟡 Si la clave de entrada que defines no coincide con lo que espera el agente, el componente seguirá funcionando pero añadirá una advertencia en el texto de salida. Revisa siempre la salida final para ver si hay advertencias.
⚠️ Limitation List Outputs Truncated to First Element 🟢 Si un agente devuelve una lista de respuestas, el componente solo tomará la primera respuesta de esa lista. El resto se ignorará.
📋 Requirement LangChain Core Runtime 🟡
Este componente depende de las librerías fundamentales de LangChain. Asegúrate de que tu entorno en Nappai tenga instaladas las dependencias necesarias (langchain-core).
📋 Requirement orjson Library Needed 🟡
Para analizar rápidamente las respuestas en formato JSON, el componente necesita la librería orjson. Si no está instalada en tu entorno, es posible que el componente falle.
💡 Best Practice Use Consistent Input and Output Keys 🟢 Para obtener los mejores resultados, intenta que todos los agentes conectados usen las mismas claves para entrada y salida (por ejemplo, “input” y “output”). Esto facilita que el componente extraiga la información correcta.
💡 Best Practice Check Result Message for Warnings 🟢 Después de ejecutar el flujo, revisa el texto de salida. Si ves advertencias, significa que la estructura de la respuesta del agente fue inesperada y podrías necesitar ajustar cómo están configurados tus agentes.
ℹ️ Behavior Aggregated Text Output 🟢 Recuerda que la salida es un texto plano con etiquetas. No es un archivo JSON estructurado. Si necesitas usar los datos en otro sistema, deberás analizar ese texto o conectarlo a un componente que pueda parsear (leer) ese formato.
Consejos y Mejores Prácticas
- Validación de Datos: Usa este componente cuando necesites validar una respuesta. Si un agente te dice “Sí” y otro dice “No”, puedes decidir cuál seguir basándote en las dos perspectivas.
- Gestión de Errores: Siempre revisa la salida final. Si un agente falla, el componente suele mostrar una advertencia en el texto en lugar de detener todo el flujo, lo cual es útil para mantener la automatización activa.
- Simplicidad: Funciona mejor cuando los agentes devuelven respuestas directas. Evita conectar agentes que devuelvan gráficos complejos o datos binarios, ya que el componente solo procesa texto.
Consideraciones de Seguridad
⚠️ Seguridad de Agentes de Confianza:
Este es un punto crítico. Dado que RunnableParallel ejecuta lógica de agentes automáticamente, nunca conectes agentes creados por terceros o fuentes no verificadas. La ejecución de código arbitrario puede exponer tus datos sensibles o permitir la ejecución de comandos no autorizados en tu servidor de automatización. Utiliza únicamente agentes oficiales o creados internamente por tu equipo de confianza.