خطأ عقدة Azure OpenAI Chat

وصف المشكلة/الخطأ/السؤال

عقدة Azure OpenAI chat لا تعمل في سير عمل وكيل الدردشة الخاص بنا. على الرغم من أننا لم نقم بأي تغييرات في الإعدادات أو محتوى هذه التدفقات، نحصل على خطأ طلب سيء. نعتقد أن شيئاً ما على جانب OpenAI API قد تغير لكن العقدة لم يتم تحديثها لعكس هذا التغيير حتى الآن.

ما رسالة الخطأ (إن وجدت)؟

طلب سيء - يرجى التحقق من معاملات التحكم الخاصة بك

معامل مفقود مطلوب: ‘tools[0].type’.

يرجى مشاركة سير عملك

شارك المخرجات التي تم إرجاعها بواسطة العقدة الأخيرة

طلب سيء - يرجى التحقق من معاملات التحكم الخاصة بك
معامل مفقود مطلوب: ‘tools[0].type’.

معلومات عن إعداد n8n الخاص بك

  • إصدار n8n: 2.29.10
  • قاعدة البيانات (الافتراضي: SQLite): SQLite
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main): own
  • تشغيل n8n عبر (Docker, npm, n8n cloud, desktop app): Docker
  • نظام التشغيل: RHEL

هل يمكنك استخدام نموذج الدردشة من OpenAI؟
فقط غيّر عنوان URL الأساسي. هل يعمل؟

مرحباً، شكراً على الرد السريع!

عنوان URL الأساسي لبيانات اعتماد Azure OpenAI لدينا هو “https://swedencentral.api.cognitive.microsoft.com/

هل تعتقد أنه سيعمل مع عقدة OpenAI؟ كيف يجب أن نعدل عنوان URL الأساسي؟

لجعل عقدة OpenAI تعمل مع Azure، ستحتاج إلى إعداد وكيل وسيط (proxy) (مثل LiteLLM) يترجم طلبات صيغة OpenAI إلى طلبات صيغة Azure.

هذا الخطأ ‘Missing required parameter: tools[0].type’ في معظم الأحيان يكون متعلقاً بـ api-version في Azure، وليس بالبيانات الاعتمادية نفسها. مؤخراً، بدأت بعض المناطق (Sweden Central على سبيل المثال) بالتحقق من مصفوفة tools بشكل صارم، مما يتطلب أن تأتي كل أداة بصيغة {“type”:“function”,“function”:{…}}. إذا كانت api-version الخاصة بك تشير إلى ‘latest’/preview، فإن نقطة النهاية تتوقع الصيغة الجديدة لكن البيانات التي تخرج من node لا تطابقها، وترى هذا الخطأ حتى لو لم تغير شيئاً في المسار. ثبّت api-version على نسخة GA مستقرة، مثل 2024-10-21 (أو 2024-08-01-preview)، مباشرة في البيانات الاعتمادية/عنوان URL الأساسي للنشر، بدلاً من تركها على الأحدث. هذا سيعيد محاذاة البيانات التي يرسلها node مع ما تقبله نقطة النهاية. إليك فحصان سريعان للتأكد من التشخيص قبل إجراء أي تغييرات: 1) أزل مؤقتاً العقد الفرعية للأدوات من AI Agent وشغّل فقط الدردشة النقية؛ إذا عملت، فهذا يؤكد أن المشكلة في تسلسل الأدوات المرتبط بـ api-version، وليس البيانات الاعتمادية. 2) تأكد من أن النشر هو نموذج يدعم استدعاء الأدوات في نسخة حديثة (gpt-4o / gpt-4-turbo)؛ النشرات القديمة من gpt-35-turbo ترفض صيغة الأدوات. خادم وسيط مثل LiteLLM يحل المشكلة، لكنه حل بديل، لا تحتاج إليه في هذه الحالة.

مرحباً، شكراً جزيلاً على ردك التفصيلي! بعد تغيير الإصدار (api-version) وتجربة أمثلة GA المستقرة التي قدمتها، نحصل على خطأ آخر لكن هذه المرة من عقدة AI Agent، وليس من عقدة Azure OpenAI Chat. إليك تتبع الخطأ:

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

هل تعتقد أن قد يكون مرتبطاً بتغيير الإصدار (api-version) في عقدة الدردشة؟ لأنني في محرر التصحيح (debug editor)، أرى هذه الرسالة في نافذة الدردشة في الأسفل على اليسار:

خطأ toLowerCase في وكيل الذكاء الاصطناعي (ToolsAgentV2) هو مشكلة منفصلة عن api-version - عادةً ما يحدث عندما تُرجع استدعاء أداة undefined أو null بدلاً من سلسلة نصية، ويحاول الوكيل استدعاء .toLowerCase() عليها لتوحيد اسم الأداة قبل التوجيه. هناك شيئان يجب التحقق منهما:

  1. حدد الأداة التي تسبب المشكلة - أزل الأدوات واحدة تلو الأخرى من وكيل الذكاء الاصطناعي حتى يعمل الوكيل بدون تعطل. الأداة التي تكسره ترجع تنسيق استجابة سيء.
  2. تأكد من أن كل عقدة أداة متصلة ترجع دائماً { json: { output: "some string" } } - يتوقع وكيل الذكاء الاصطناعي نتيجة الأداة في حقل output كسلسلة نصية. إذا لم ترجع عقدة الأداة الخاصة بك أي شيء أو شكلاً غير متوقع، فستواجه هذا الخطأ.

رسالة “Connection rejected” في نافذة الدردشة تشير إلى أن اتصال Azure OpenAI نفسه لا يزال يفشل في المصب، لذا فإن جعل هذا مستقراً أولاً (إصلاح api-version كما وصفه nocoderobots) سيساعد في عزل ما إذا كان خطأ الأداة ثانوياً.

مرحباً،

شكراً جزيلاً على ردك التفصيلي! كان السبب في الواقع عقدة Chat متصلة بـ AI Agent كأداة. لذا عندما أزلناها، بدأت تعمل مرة أخرى. سأنظر في كيفية إصلاحها وإعادة توصيلها بـ AI Agent.

شكراً لكم جميعاً على وقتكم ودعمكم!

مرحباً @nguyenthieutoan ،

حاولنا إصلاح المشكلة في عقدة الدردشة مع التدخل البشري، لكن يبدو أن هناك مشكلة في الاتصال بين العقد مع بعضها البعض.

{
  "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": "عند استقبال رسالة دردشة",
      "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": "الدردشة3",
      "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": "وكيل ذكاء اصطناعي"
    },
    {
      "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",
      "credentials": {
        "azureOpenAiApi": {
          "id": "Sd2Rr1eXpv8GChqr",
          "name": "حساب Azure Open AI"
        }
      }
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        -3392,
        1136
      ],
      "id": "66b3ce47-c5c2-4dc4-8211-040a3d17a0e8",
      "name": "الذاكرة البسيطة"
    },
    {
      "parameters": {
        "message": "=Skye تريد إرسال بريد إلكتروني بالخصائص التالية:\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": "الدردشة1",
      "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', `عناوين البريد الإلكتروني المراد الإرسال إليها، مفصولة بـ ';' الرمز.`, 'string') }}",
            "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('subject', "موضوع البريد الإلكتروني. إذا كان مرتبطاً بقضية Hive، ابدأ الموضوع دائماً بـ `[#123]` وهو رقم قضية Hive.", 'string') }}",
            "body": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body', `محتوى البريد الإلكتروني بصيغة HTML. لاحظ أن هذه القيمة سيتم وضعها داخل جزء <html><body><div></div></body></html>، لذا يجب عدم تضمين علامات HTML تلك. يتم توفير توقيعات البريد الإلكتروني ويجب عدم إدراجها في هذا المحتوى.`, 'string') }}",
            "body_markdown": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('body_markdown', `محتوى البريد الإلكتروني بصيغة Markdown. لاحظ أن المحتوى يجب أن يكون متطابقاً مع صيغة HTML ولكن الآن بصيغة Markdown.`, 'string') }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "to",
              "displayName": "إلى",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "subject",
              "displayName": "الموضوع",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "body",
              "displayName": "المحتوى",
              "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": "استدعاء 'AI - Mail'1"
    }
  ],
  "connections": {
    "عند استقبال رسالة دردشة": {
      "main": [
        [
          {
            "node": "وكيل ذكاء اصطناعي",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "وكيل ذكاء اصطناعي": {
      "main": [
        [
          {
            "node": "الدردشة3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "نموذج الدردشة Azure OpenAI": {
      "ai_languageModel": [
        [
          {
            "node": "وكيل ذكاء اصطناعي",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "الذاكرة البسيطة": {
      "ai_memory": [
        [
          {
            "node": "وكيل ذكاء اصطناعي",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "الدردشة1": {
      "ai_tool": [
        [
          {
            "node": "وكيل ذكاء اصطناعي",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "استدعاء 'AI - Mail'1": {
      "ai_tool": [
        [
          {
            "node": "الدردشة1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {
    "عند استقبال رسالة دردشة": [
      {
        "sessionId": "b4b17dc477714a9d84cc9afe7586e881",
        "action": "sendMessage",
        "chatInput": ".",
        "files": []
      }
    ]
  },
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "518261c4a70f7b056a90d1ccc637553f99a6f84990fec2cd318a8ea62bbc25be"
  }
}

نحصل على نفس الخطأ

طلب سيء - يرجى التحقق من معاملات الخاص بك
400 المعامل المطلوب مفقود: ‘tools[0].type’.

حاولنا إضافة العقدة من الصفر (لنرى ما إذا كانت هناك مشكلة توافق إصدار العقدة) وإجراء جميع التكوينات مرة أخرى من الصفر. لا أعرف ما يمكن أن تكون المشكلة. هل لديك أي فكرة عن كيفية حل هذا؟

إعادة بناء العُقد من الصفر لن تحل هذه المشكلة - المشكلة موجودة في بيانات اعتماد Azure وليس في إعدادات العُقدة. تحقق من إصدار API المعيّن في بيانات اعتماد Azure OpenAI الخاصة بك. إذا كان يشير إلى إصدار API أحدث (مثل 2025-xx-xx أو أي إصدار معاينة)، فإن Azure الآن يتطلب بصرامة type: "function" في كل تعريف أداة، وهو ما لا يرسله عُقدة n8n حتى الآن.

الحل: افتح بيانات اعتماد Azure OpenAI الخاصة بك وقيّد إصدار API على 2024-10-21 (إصدار GA مستقر). هذا الإصدار يقبل صيغة الأداة التي يرسلها n8n حالياً. إذا كانت بيانات اعتمادك تستخدم عنوان Base URL مع الإصدار مضمّناً فيه، حدّث عنوان URL هذا مباشرة.

مرحباً! حدسك صحيح 100% — شيء ما تغير بالفعل على جانب OpenAI API، وهو يسبب هذه المشكلة بالضبط.

قامت OpenAI مؤخراً بتحديث متطلبات API الخاصة بها لاستدعاء الدوال والأدوات. يطلبون الآن بشكل صريح أن يتم تمرير حقل type (عادة ما يتم تعيينه على "function") داخل كل تعريف أداة في الحمولة. لأن وكيل الذكاء الاصطناعي الخاص بك يمرر الأدوات إلى عقدة Azure OpenAI Chat باستخدام بنية الحمولة القديمة والموروثة، يرفضها Azure API برسالة خطأ Missing required parameter: 'tools[0].type'.

الحل:
أرى أنك تقوم بتشغيل إصدار n8n 2.29.10. فريق n8n على علم بالفعل بهذا التغيير في OpenAI API وأصدروا تصحيحاً محدداً للتعامل معه.

كل ما تحتاج إلى فعله هو تحديث صورة n8n Docker الخاصة بك إلى الإصدار 2.31.0 أو أعلى.

بمجرد التحديث، ستقوم عقدة Azure OpenAI بهيكلة مصفوفة tools تلقائياً للامتثال للمتطلبات الجديدة، وستكون وكلاء الدردشة الخاصة بك متصلة بالإنترنت على الفور. لا توجد تغييرات سير عمل مطلوبة!


ملاحظة: لقد مررت في الواقع منشور المنتدى الخاص بك بالضبط من خلال n8n Mastery / Sensei (مساعد ذكاء اصطناعي مجاني قمت ببنائه لمجتمع n8n)، وحددت على الفور تغيير حمولة OpenAI وعدم تطابق إصدار n8n بالضبط!

أرفق لقطة شاشة لتحليله الكامل أدناه. إذا كنت تريد مساعداً يقوم بتصحيح أخطاء وكلاء الذكاء الاصطناعي أو عدم تطابق إصدار API على الفور بجانب قماشتك، يمكنك التحقق من ذلك هنا: https://n8n-sensei-app-nu.vercel.app/

آمل أن يسير التحديث بسلاسة ويعيد تشغيل سير العمل الخاص بك!

نعم، شكراً لك! يبدو أن هذا التغيير يحل مشكلتنا في الوقت الحالي.