¡Hola! He estado teniendo problemas con algo, no sé qué es. En el mensaje de error aparece “Bad request - please check your parametersInvalid parameter: messages with role ‘tool’ must be a response to a preceeding message with ‘tool_calls’.” ¿Te ha pasado algo similar? Estoy muy atrapado con esto
Bad request - please check your parameters
Invalid parameter: messages with role ‘tool’ must be a response to a preceeding message with ‘tool_calls’.
Información sobre tu configuración de n8n
- versión de n8n: 2.30.6 (Auto-alojado)
- Base de datos: PostgreSQL
¡Hola @Christian_G! ¡Bienvenido!
Esto sucede cuando el historial de chat enviado al modelo tiene un mensaje tool que no está precedido directamente por un mensaje de asistente que contenga sus tool_calls, por lo que el proveedor rechaza la solicitud. Tu memoria almacenada se ha desincronizado para una sesión, generalmente por una ejecución interrumpida a mitad de una llamada de herramienta o un cambio de modelo, y como estás usando Postgres Chat Memory, ese historial roto se guarda y se reproduce en cada ejecución.
Borra la memoria de esa sesión. Comprobación más rápida: cambia la Session Key (o pasa un nuevo sessionId) y ejecuta nuevamente; el error debería desaparecer. Para limpiar la sesión actual, conecta un nodo Chat Memory Manager al mismo Postgres Chat Memory, establece Operation en Delete Messages y Delete Mode en All Messages, y ejecútalo una vez.
Hola Sr. Anshul, aplicaremos sus recomendaciones y le diremos cómo funciona.
Muchas gracias por su respuesta rápida
.
Inspecciona el array de mensajes en la ejecución fallida y empareja cada respuesta de herramienta con la llamada de herramienta del asistente que la creó. Filtrar o fusionar el historial de chat puede dejar un mensaje de herramienta huérfano incluso cuando el prompt actual se ve bien.
Basándome en el punto de @Anshul_Namdev: la causa raíz de este error en n8n AI Agents es generalmente Truncamiento de Buffer de Ventana de Memoria.
La API de OpenAI requiere estrictamente que cualquier mensaje con role: "tool" DEBE seguir inmediatamente a un mensaje assistant que contenga el array de ID tool_calls coincidente.
Esto es cómo sucede en n8n y cómo evitarlo permanentemente:
### La Causa Raíz:
Si utilizas un Buffer de Ventana de Memoria (o Memoria Postgres) configurado para mantener, por ejemplo, los últimos 10 mensajes:
-
Un mensaje assistant genera una tool_call.
-
El nodo tool se ejecuta y añade un mensaje de respuesta tool.
-
A medida que la conversación progresa y alcanza 11 mensajes, el nodo Memory elimina el mensaje más antiguo.
-
Si el corte de truncamiento divide el mensaje assistant con tool_calls pero deja el mensaje de respuesta tool en la parte superior de la ventana de historial, el payload enviado a OpenAI se vuelve inválido.
### Cómo Solucionarlo:
-
Utiliza Buffer de Ventana de Memoria con Recuentos de Mensajes Pares (o Aumenta K):
Asegúrate de que el tamaño de tu buffer de memoria K sea lo suficientemente grande para que los pares de tool-call activos no se truncen a mitad de sesión.
-
Limpia Sesiones Obsoletas mediante el Administrador de Memoria de Chat:
Si una sesión se queda atascada con este error, usa un Nodo Chat Memory Manager configurado en Eliminar Mensajes para ese sessionId específico.
-
Maneja Fallos de Tool (Error Trigger / Sub-Workflow):
Si una herramienta MCP o Custom falla durante la ejecución, envuelve la lógica de la herramienta en un Try/Catch o configuración Continue on Fail para que siempre devuelva un payload JSON válido al agente en lugar de desconectar el socket y corromper el historial de memoria.