Error de nodo de Azure OpenAI Chat

Describe el problema/error/pregunta

El nodo Azure OpenAI chat no funciona en nuestros flujos de trabajo del agente de chat. Aunque no hemos realizado cambios en la configuración o el contenido de estos flujos, estamos recibiendo un error de solicitud incorrecta. Creemos que algo en el lado de la API de OpenAI ha cambiado pero el nodo aún no ha sido actualizado para reflejar ese cambio.

¿Cuál es el mensaje de error (si hay alguno)?

Solicitud incorrecta - por favor verifica tus parámetros

Parámetro requerido faltante: ‘tools[0].type’.

Por favor comparte tu flujo de trabajo

Comparte el resultado devuelto por el último nodo

Solicitud incorrecta - por favor verifica tus parámetros
Parámetro requerido faltante: ‘tools[0].type’.

Información sobre tu configuración de n8n

  • Versión de n8n: 2.29.10
  • Base de datos (predeterminado: SQLite): SQLite
  • Configuración n8n EXECUTIONS_PROCESS (predeterminado: own, main): own
  • Ejecutar n8n a través de (Docker, npm, n8n cloud, aplicación de escritorio): Docker
  • Sistema operativo: RHEL

¿Puedes usar el modelo de chat de OpenAI?
Solo cambia la URL base. ¿Funciona?

¡Oye, gracias por la respuesta rápida!

La URL base para nuestra credencial de Azure OpenAI es “https://swedencentral.api.cognitive.microsoft.com/

¿Crees que funcionaría con OpenAI node? ¿Cómo deberíamos modificar la URL base?

Para que el nodo de OpenAI funcione con Azure, necesitarías configurar un proxy (como LiteLLM) que traduzca solicitudes en formato OpenAI a solicitudes en formato Azure.

Este error ‘Missing required parameter: tools[0].type’ casi siempre es la api-version de Azure, no la credencial en sí. Recientemente algunas regiones (Sweden Central inclusive) comenzaron a validar el array de tools de forma estricta, exigiendo que cada tool venga como {“type”:“function”,“function”:{…}}. Si tu api-version apunta a ‘latest’/preview, el endpoint espera el formato nuevo pero el payload que sale del node no coincide, y ves este error aunque no hayas cambiado nada en el flujo. Fija la api-version en una GA estable, como 2024-10-21 (o 2024-08-01-preview), directamente en la credencial/base URL del deployment, en vez de dejar la más nueva. Esto realinea el payload que el node envía con lo que el endpoint acepta. Dos verificaciones rápidas para confirmar el diagnóstico antes de hacer cambios: 1) quita temporalmente los sub-nodos de tool del AI Agent y ejecuta solo el chat puro; si funciona, está confirmado que es la serialización de las tools vinculada a la api-version, y no la credencial. 2) confirma que el deployment es un modelo que soporta tool calling en una versión reciente (gpt-4o / gpt-4-turbo); deployments antiguos de gpt-35-turbo rechazan el formato de tools. Un proxy como LiteLLM lo resuelve, pero es un workaround, no lo necesitas para este caso.

¡Hola, muchas gracias por tu respuesta tan detallada! Después de cambiar la versión de la API e intentar con los ejemplos GA estables que proporcionaste, estamos obteniendo otro error, pero esta vez proviene del nodo AI Agent, no del nodo Azure OpenAI Chat. Aquí está el seguimiento del error:

NodeOperationError: Cannot read properties of undefined (reading ‘toLowerCase’) at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_2c7f106572ec97ecf6e9416b33a264bd/node_modules/@n8n/n8n-nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts:418:13 at Array.forEach (<anónimo>) at ExecuteContext.toolsAgentExecute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_2c7f106572ec97ecf6e9416b33a264bd/node_modules/@n8n/n8n-nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts:406:17) at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_2c7f106572ec97ecf6e9416b33a264bd/node_modules/@n8n/n8n-nodes-langchain/nodes/agents/Agent/V2/AgentV2.node.ts:142:10) at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1080:8) at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1380:11) at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1842:27 at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2534:11

¿Crees que podría estar relacionado con el cambio de versión de la API en el nodo de chat? Porque en el editor de depuración, estoy viendo este mensaje en la ventana de chat en la esquina inferior izquierda:

El error de toLowerCase en el AI Agent (ToolsAgentV2) es un problema separado de la api-version - normalmente ocurre cuando una llamada de herramienta devuelve undefined o null en lugar de una cadena de texto, y el agente intenta llamar a .toLowerCase() en ella para normalizar el nombre de la herramienta antes de enrutarla. Hay dos cosas que verificar:

  1. Aísla cuál es la herramienta que lo causa - elimina las herramientas una por una del AI Agent hasta que el agente se ejecute sin fallar. La herramienta que lo rompe está devolviendo un formato de respuesta incorrecto.
  2. Asegúrate de que cada nodo de herramienta conectado siempre devuelva { json: { output: "some string" } } - el AI Agent espera el resultado de la herramienta en el campo output como una cadena de texto. Si tu nodo de herramienta no devuelve nada o una forma inesperada, te encontrarás con este error.

El error “Connection rejected” en la ventana de chat sugiere que la conexión a Azure OpenAI en sí sigue fallando en la parte superior, así que estabilizar eso primero (arreglando la api-version como nocoderobots describió) ayudará a aislar si el error de la herramienta es secundario.

¡Hola!

¡Gracias por tu respuesta tan detallada! En realidad fue causado por un nodo de Chat conectado al Agente de IA como una herramienta. Así que cuando lo eliminamos, volvió a funcionar. Investigaré cómo podemos solucionarlo y conectarlo de nuevo al Agente de IA.

¡Gracias a todos por su tiempo y apoyo!

Hola @nguyenthieutoan ,

Hemos estado intentando solucionar el problema en el nodo de chat human-in-the-loop, pero parece que hay un problema en la comunicación entre los nodos.

{
  "nodes": [
    {
      "parameters": {
        "availableInChat": true,
        "agentIcon": {
          "type": "icon",
          "value": "brain"
        },
        "agentName": "Skye",
        "options": {
          "responseMode": "responseNodes"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.4,
      "position": [
        -3472,
        480
      ],
      "id": "b03a6cac-d84f-4e7a-b166-8797ece194e9",
      "name": "When chat message received",
      "webhookId": "448a433f-b790-488b-b2ef-68ad19d89c96"
    },
    {
      "parameters": {
        "message": "={{ $json.output }}",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chat",
      "typeVersion": 1.2,
      "position": [
        -2880,
        480
      ],
      "id": "4c5a4e38-a28c-4c09-a78b-4f9cae3fe312",
      "name": "Chat3",
      "webhookId": "a46aa6d8-b57c-4bd7-9101-378577634cc5"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -3200,
        480
      ],
      "id": "fd7eadf2-b2dc-4b4f-b453-0188ec0d72a2",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": "n8n-gpt-4.1",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "typeVersion": 1,
      "position": [
        -3584,
        1152
      ],
      "id": "c7064aa7-b13e-4afe-98a6-aee71981c25a",
      "name": "Azure OpenAI Chat Model",
      "credentials": {
        "azureOpenAiApi": {
          "id": "Sd2Rr1eXpv8GChqr",
          "name": "Azure Open AI account"
        }
      }
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        -3392,
        1136
      ],
      "id": "66b3ce47-c5c2-4dc4-8211-040a3d17a0e8",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "message": "=Skye wil een mail uitsturen met de volgende eigenschappen:\n{{ JSON.stringify($tool.parameters, null, 2) }}",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        },
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeAmount": 10,
              "resumeUnit": "minutes"
            }
          }
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chatHitlTool",
      "typeVersion": 1.3,
      "position": [
        -3536,
        704
      ],
      "id": "3b2d8e57-6ee7-40dc-9fe1-65f0e8dfcb46",
      "name": "Chat1",
      "webhookId": "b1c1ec2f-33a6-4a4b-90fe-131801234aa8"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "MS7xbrVN9zX5vAWC",
          "mode": "list",
          "cachedResultUrl": "/workflow/MS7xbrVN9zX5vAWC",
          "cachedResultName": "Util — AI - Mail"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "to": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('to', `The email addresses it will be send to, split by ';' character.`, 'string') }}",
            "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('subject', \"Subject of email. If it is related to a Hive case, always start the subject with `[#123]` which is the Hive case number.\", 'string') }}",
            "body": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body', `Content of email in HTML format. Note that this value will be placed within an 
<html><body><div></div></body></html> part, so those HTML tags should not be included. Also email signatures are provided and should not be within this content.`, 'string') }}",
            "body_markdown": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body_markdown', `Content of email in Markdown format. Note that the content should be identical as to HTML format but only now in Markdown format.`, 'string') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "to",
              "displayName": "to",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "subject",
              "displayName": "subject",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "body",
              "displayName": "body",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "body_markdown",
              "displayName": "body_markdown",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        -3648,
        832
      ],
      "id": "46b90ed9-6d7b-4386-8670-9644c8094ce2",
      "name": "Call 'AI - Mail'1"
    }
  ],
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Chat3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Azure OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Chat1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Call 'AI - Mail'1": {
      "ai_tool": [
        [
          {
            "node": "Chat1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {
    "When chat message received": [
      {
        "sessionId": "b4b17dc477714a9d84cc9afe7586e881",
        "action": "sendMessage",
        "chatInput": ".",
        "files": []
      }
    ]
  },
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "518261c4a70f7b056a90d1ccc637553f99a6f84990fec2cd318a8ea62bbc25be"
  }
}

Seguimos recibiendo el error

Solicitud incorrecta - por favor verifica tus parámetros
400 Parámetro requerido faltante: ‘tools[0].type’.

Intentamos agregar el nodo desde cero (para ver si hay un problema de compatibilidad de versiones de nodos) e hicimos todas las configuraciones de nuevo desde cero. No sé cuál podría ser el problema. ¿Quizás tengas alguna idea sobre cómo se podría solucionar esto?

Reconstruir los nodos desde cero no solucionará esto — el problema está en la credencial de Azure, no en la configuración del nodo. Verifica la versión de API establecida en tu credencial de Azure OpenAI. Si apunta a una versión de API más nueva (como 2025-xx-xx o cualquier vista previa), Azure ahora requiere estrictamente type: "function" en cada definición de herramienta, lo que el nodo de n8n aún no envía.

La solución: abre tu credencial de Azure OpenAI y fija la versión de API a 2024-10-21 (GA estable). Esa versión acepta el formato de herramienta que n8n actualmente envía. Si tu credencial usa una URL base con la versión incrustada en ella, actualiza esa URL directamente.

¡Hola! Tu intuición es 100% correcta: algo en el lado de la API de OpenAI cambió, y está causando exactamente este problema.

OpenAI actualizó recientemente sus requisitos de API para las llamadas de funciones y herramientas. Ahora requieren explícitamente que se pase un campo type (generalmente configurado como "function") dentro de cada definición de herramienta en la carga útil. Como tu Agente de IA está pasando herramientas al nodo Azure OpenAI Chat usando la estructura de carga útil anterior y heredada, la API de Azure la rechaza con el error Missing required parameter: 'tools[0].type'.

La Solución:
Veo que actualmente estás ejecutando la versión 2.29.10 de n8n. El equipo de n8n ya está consciente de este cambio en la API de OpenAI y lanzó un parche específicamente para abordarlo.

Todo lo que necesitas hacer es actualizar tu imagen de Docker de n8n a la versión 2.31.0 o superior.

Una vez que actualices, el nodo Azure OpenAI estructurará automáticamente el array tools para cumplir con los nuevos requisitos, y tus agentes de chat volverán a estar en línea al instante. ¡Sin cambios de flujo de trabajo necesarios!


P.D. En realidad pasé tu publicación exacta del foro a través de n8n Mastery / Sensei (un Co-piloto de IA gratuito que creé para la comunidad de n8n), ¡y identificó inmediatamente el cambio de carga útil de OpenAI y el desajuste exacto de versión de n8n!

Estoy adjuntando una captura de pantalla de su análisis completo a continuación. Si alguna vez quieres un asistente que depure instantáneamente errores de Agentes de IA o desajustes de versión de API justo al lado de tu lienzo, puedes revisarlo aquí: https://n8n-sensei-app-nu.vercel.app/

¡Espero que la actualización funcione sin problemas y que tus flujos de trabajo vuelvan a ejecutarse!

¡Sí, gracias! Este cambio parece resolver nuestro problema por el momento.