Azure OpenAI Chat Node Fehler

Beschreiben Sie das Problem/den Fehler/die Frage

Der Azure OpenAI Chat-Knoten funktioniert nicht in unseren Chat-Agent-Workflows. Obwohl wir keine Änderungen an der Konfiguration oder dem Inhalt dieser Flows vorgenommen haben, erhalten wir einen „Bad Request"-Fehler. Wir vermuten, dass sich auf der OpenAI-API-Seite etwas geändert hat, aber der Knoten wurde noch nicht aktualisiert, um diese Änderung widerzuspiegeln.

Was ist die Fehlermeldung (falls vorhanden)?

Bad request - please check your parameters

Missing required parameter: ‘tools[0].type’.

Bitte teilen Sie Ihren Workflow

Geben Sie die vom letzten Knoten zurückgegebene Ausgabe an

Bad request - please check your parameters
Missing required parameter: ‘tools[0].type’.

Informationen zu Ihrem n8n-Setup

  • n8n-Version: 2.29.10
  • Datenbank (Standard: SQLite): SQLite
  • n8n EXECUTIONS_PROCESS-Einstellung (Standard: own, main): own
  • n8n wird ausgeführt über (Docker, npm, n8n Cloud, Desktop-App): Docker
  • Betriebssystem: RHEL

Kannst du das OpenAI-Chat-Modell verwenden?
Ändere einfach die Base-URL. Funktioniert es?

Hey, danke für die schnelle Antwort!

Die Basis-URL für unsere Azure OpenAI-Anmeldedaten ist „https://swedencentral.api.cognitive.microsoft.com/"

Denkst du, das würde mit OpenAI node funktionieren? Wie sollten wir die Basis-URL ändern?

Um den OpenAI-Node mit Azure zum Laufen zu bringen, müssten Sie einen Proxy (wie LiteLLM) einrichten, der OpenAI-formatierte Anfragen in Azure-formatierte Anfragen übersetzt.

Dieser Fehler „Missing required parameter: tools[0].type

Hallo, vielen Dank für deine ausführliche Antwort! Nach der Änderung der API-Version und dem Ausprobieren der stabilen GA-Beispiele, die du gegeben hast, erhalten wir einen weiteren Fehler, aber dieses Mal kommt er vom AI Agent-Knoten, nicht vom Azure OpenAI Chat-Knoten. Hier ist die Fehler-Nachverfolgung:

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 () 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

Denkst du, das könnte mit der API-Versionänderung im Chat-Knoten zusammenhängen? Denn im Debug-Editor sehe ich diese Meldung im Chat-Fenster unten links:

Der toLowerCase-Fehler im AI Agent (ToolsAgentV2) ist ein separates Problem von der api-version – er tritt normalerweise auf, wenn ein Tool-Aufruf undefined oder null anstelle eines Strings zurückgibt und der Agent versucht, .toLowerCase() darauf aufzurufen, um den Tool-Namen vor dem Routing zu normalisieren. Zwei Dinge zum Überprüfen:

  1. Isoliere, welches Tool das Problem verursacht – entferne nacheinander Tools aus dem AI Agent, bis der Agent ohne Absturz läuft. Das Tool, das es bricht, gibt ein falsches Antwortformat zurück.
  2. Stelle sicher, dass jeder verbundene Tool-Node immer { json: { output: "some string" } } zurückgibt – der AI Agent erwartet das Tool-Ergebnis im Feld output als String. Wenn dein Tool-Node nichts oder eine unerwartete Struktur zurückgibt, wirst du auf diesen Fehler stoßen.

Die „Connection rejected

Hallo,

vielen Dank für deine ausführliche Antwort! Es wurde tatsächlich durch einen Chat-Node verursacht, der als Tool mit dem KI-Agent verbunden war. Als wir ihn entfernten, funktionierte es wieder. Ich werde mich damit befassen, wie wir das beheben und ihn wieder mit dem KI-Agent verbinden können.

Danke an euch alle für eure Zeit und Unterstützung!

Hallo @nguyenthieutoan ,

wir versuchen, das Problem im Human-in-the-Loop-Chat-Knoten zu beheben, aber es scheint ein Kommunikationsproblem zwischen den Knoten zu geben.

{
  "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', `Die E-Mail-Adressen, an die versendet wird, getrennt durch das Zeichen „;"`, 'string') }}",
            "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('subject', \"Betreffzeile der E-Mail. Falls es sich um einen Hive-Fall handelt, beginnen Sie die Betreffzeile immer mit `[#123]`, was die Hive-Fallnummer ist.\", 'string') }}",
            "body": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body', `Inhalt der E-Mail im HTML-Format. Beachten Sie, dass dieser Wert innerhalb eines <html><body><div></div></body></html>-Teils platziert wird, daher sollten diese HTML-Tags nicht enthalten sein. E-Mail-Signaturen werden bereitgestellt und sollten nicht in diesem Inhalt enthalten sein.`, 'string') }}",
            "body_markdown": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body_markdown', `Inhalt der E-Mail im Markdown-Format. Beachten Sie, dass der Inhalt identisch mit dem HTML-Format sein sollte, aber nur im 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"
  }
}

wir erhalten immer noch den Fehler

Fehlerhafte Anfrage – bitte überprüfen Sie Ihre Parameter
400 Erforderlicher Parameter fehlt: ‘tools[0].type’.

wir haben versucht, den Knoten von Grund auf neu hinzuzufügen (um zu sehen, ob es ein Problem mit der Knotenversion-Kompatibilität gibt) und alle Konfigurationen von Grund auf neu durchzuführen. Ich weiß nicht, was das Problem sein könnte. Hast du vielleicht eine Idee, wie das zu beheben wäre?

Das Neugenerieren der Knoten von Grund auf wird dieses Problem nicht beheben – das Problem liegt in der Azure-Berechtigung, nicht in der Knotenkonfiguration. Überprüfen Sie die API-Version, die in Ihrer Azure OpenAI-Berechtigung festgelegt ist. Wenn sie auf eine neuere API-Version verweist (wie 2025-xx-xx oder eine beliebige Vorschauversion), erfordert Azure jetzt streng type: "function" in jeder Tool-Definition, was der n8n-Knoten noch nicht sendet.

Die Lösung: Öffnen Sie Ihre Azure OpenAI-Berechtigung und legen Sie die API-Version auf 2024-10-21 (stabiles GA) fest. Diese Version akzeptiert das Tool-Format, das n8n derzeit sendet. Wenn Ihre Berechtigung eine Basis-URL mit der eingebetteten Version verwendet, aktualisieren Sie diese URL direkt.

Hey! Deine Intuition ist zu 100% richtig – auf der OpenAI-API-Seite hat sich tatsächlich etwas geändert, und das verursacht genau dieses Problem.

OpenAI hat kürzlich ihre API-Anforderungen für Function und Tool Calling aktualisiert. Sie verlangen nun explizit, dass ein type-Feld (normalerweise auf "function" gesetzt) in jeder Tool-Definition im Payload übergeben wird. Da dein AI Agent Tools an den Azure OpenAI Chat Node mit der älteren, veralteten Payload-Struktur übergibt, lehnt die Azure-API dies mit dem Fehler Missing required parameter: 'tools[0].type' ab.

Die Lösung:
Ich sehe, dass du derzeit n8n Version 2.29.10 ausführst. Das n8n-Team ist sich bereits dieser OpenAI-API-Änderung bewusst und hat einen Patch speziell zur Behebung veröffentlicht.

Alles, was du tun musst, ist dein n8n Docker Image auf Version 2.31.0 oder höher zu aktualisieren.

Nach der Aktualisierung wird der Azure OpenAI Node das tools-Array automatisch so strukturieren, dass es die neuen Anforderungen erfüllt, und deine Chat Agents sind sofort wieder online. Keine Workflow-Änderungen erforderlich!


P.S. Ich habe dein exaktes Forumpost tatsächlich durch n8n Mastery / Sensei laufen lassen (einen kostenlosen AI Co-pilot, den ich für die n8n Community gebaut habe), und es hat sofort die OpenAI-Payload-Änderung und den genauen n8n-Versionsmismatch erkannt!

Ich füge unten einen Screenshot seiner vollständigen Analyse bei. Falls du je einen Assistenten möchtest, der AI Agent Fehler oder API-Versionsmismatches sofort direkt neben deinem Canvas debuggt, kannst du ihn hier auschecken: https://n8n-sensei-app-nu.vercel.app/

Ich hoffe, die Aktualisierung läuft reibungslos ab und bringt deine Workflows wieder zum Laufen!

Ja, danke! Diese Änderung scheint unser Problem im Moment zu lösen.