OpenAI Node - "Message a Model" (إجراءات v2) - طلب غير صحيح - يرجى التحقق من معاملات الطلب

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

يبدو أن هناك انحدار @Bug في أحدث إصدار من عقدة OpenAI الأصلية (2.3 (الأحدث)) عند استخدام تخطيط Actions v2 الجديد. تحديداً، عند تحديد Resource: Text → Operation: Message a Model وتكوين Output Format إما إلى JSON Schema أو JSON Object، تفشل العقدة تماماً أثناء التنفيذ.
تتعطل استدعاء API في الخلفية مع خطأ 400 Bad Request من OpenAI.

رسالة الخطأ:

Invalid value: ‘input_text’. Supported values are: ‘output_text’ and ‘refusal’.

توجيهات OpenAI API تفرض أنها تتوقع بشدة output_text أو refusal في هذا المستوى من مصفوفة كائن الحمل.

ما الذي فعلناه للاختبار وعزل المشكلة:

  1. اختبار تبديلات Output Format: حاولنا التبديل من JSON Schema (recommended) إلى JSON Object أساسي لإزالة فرض المخطط الصارم. حدث الخطأ بالفعل، مما يدل على أن طبقة الغلاف الخاصة بـ n8n في الخلفية (tool-calling/chat wrapper) تقوم بترميز أو فرض معامل input_text بغض النظر عن الصيغة المختارة.

  2. اختبار بدائل دور الرسالة: حاولنا دمج مدخلات المستخدم والقواعد النظام في كتلة رسالة System واحدة لمنع n8n من إنشاء معاملات مصفوفة دور User متداخلة. كانت العقدة تفرض بالفعل تكوين الحمل غير الصحيح.

  3. تم التحقق عبر HTTP Request Node: لإثبات أن المشكلة كانت خطأ في تنسيق عقدة n8n وليست انقطاع OpenAI API أو تصميم فوري سيء، قمنا بترميز الطلب يدويًا باستخدام عقدة HTTP Request Node قياسية موجهة إلى https://api.openai.com/v1/chat/completions مع نفس الحمل بالضبط. تم تنفيذها وتحليل JSON بشكل مثالي.

الحل العامل / الحل البديل:

كاختبار حاسم، قمنا بنسخ إصدار أقدم من تكامل OpenAI (Node Version 1.4) من سير عمل قديم إلى لوحة الرسم. باستخدام بنية عقدة الإصدار 1.4 القديم مع نفس الفوري والمعاملات وبيانات الإدخال، يعمل سير العمل بلا عيوب. يشير هذا إلى خطأ في كيفية معالجة الإصدار 2.3 لعرض الحمل لنقاط نهاية Responses API الأحدث من OpenAI.

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

Invalid value: ‘input_text’. Supported values are: ‘output_text’ and ‘refusal’.

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

(حدد العقد على لوحتك واستخدم اختصارات لوحة المفاتيح CMD+C/CTRL+C و CMD+V/CTRL+V لنسخ ولصق سير العمل.)

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

{
  "errorMessage": "Bad request - please check your parameters",
  "errorDescription": "Invalid value: 'input_text'. Supported values are: 'output_text' and 'refusal'.",
  "errorDetails": {
    "rawErrorMessage": [
      "400 - {\"error\":{\"message\":\"Invalid value: 'input_text'. Supported values are: 'output_text' and 'refusal'.\",\"type\":\"invalid_request_error\",\"param\":\"input[2].content[0]\",\"code\":\"invalid_value\"}}"
    ],
    "httpCode": "400"
  },
  "n8nDetails": {
    "nodeName": "Create post and image",
    "nodeType": "@n8n/n8n-nodes-langchain.openAi",
    "nodeVersion": 2.3,
    "resource": "text",
    "operation": "response",
    "itemIndex": 0,
    "time": "17/06/2026, 1:41:31 pm",
    "n8nVersion": "2.23.4 (Self Hosted)",
    "binaryDataMode": "filesystem",
    "stackTrace": [
      "NodeApiError: Bad request - please check your parameters",
      "    at ExecuteContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helper-functions.ts:1368:10)",
      "    at processTicksAndRejections (node:internal/process/task_queues:104:5)",
      "    at ExecuteContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helper-functions.ts:1711:11)",
      "    at ExecuteContext.apiRequest (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_6aac9327acd297c90db6397ea0a88739/node_modules/@n8n/n8n-nodes-langchain/nodes/vendors/OpenAi/transport/index.ts:56:19)",
      "    at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_6aac9327acd297c90db6397ea0a88739/node_modules/@n8n/n8n-nodes-langchain/nodes/vendors/OpenAi/v2/actions/text/response.operation.ts:621:18)",
      "    at ExecuteContext.router (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_6aac9327acd297c90db6397ea0a88739/node_modules/@n8n/n8n-nodes-langchain/nodes/vendors/OpenAi/v2/actions/router.ts:58:25)",
      "    at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/@n8n+n8n-nodes-langchain@file+packages+@n8n+nodes-langchain_6aac9327acd297c90db6397ea0a88739/node_modules/@n8n/n8n-nodes-langchain/nodes/vendors/OpenAi/v2/OpenAiV2.node.ts:93: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_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1053:9)",
      "    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_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1327: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_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1778: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_09b6de71aa48ba17834bf7615757388b/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2426:11"
    ]
  }
}

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

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

@bridgewaretech عزل قوي. السبب الجذري هو نوع محتوى Responses API: رسائل دور المساعد يجب أن تستخدم output_text، فقط user/developer تستخدم input_text. Your input[2] عبارة عن رسالة مساعد (دور سابق أو عقدة فرعية في ذاكرة الدردشة المرفقة) التي تعلمها v2.3 باسم input_text، وبالتالي الخطأ 400.

ملاحظة مفيدة: يتم تفعيلها فقط عندما توجد رسالة مساعد في الإدخال، لذا فإن إسقاط عقدة فرعية من الذاكرة/السجل من تلك العقدة يتجنبها (غير قابل للتطبيق إذا كنت بحاجة إلى السياق، لكنه يؤكد المحفز). v1.4 يتجنبها بالوصول إلى chat/completions بدلاً من ذلك، لذا فإن هذا والحل البديل HTTP الخاص بك هما الحل المؤقت الصحيح.

انحدار معروف في v2-node، يستحق إضافة نسخة نظيفة من repro الخاص بك إلى مشكلة GitHub على n8n-io/n8n إذا لم تكن واحدة مفتوحة بالفعل.

شكرًا @achamm
لقد أضفنا المشكلة إلى GitHub بالفعل.

@bridgewaretech أهلاً وسهلاً! لا تتردد في تحديد أحد الردود كحل واستمتع بيومك! نتمنى أن يتم حل هذه المشكلة! هل يمكنك أيضاً إرسال رابط المشكلة؟

:police_car_light: تحديث من المطور / حالة GitHub

تحديث سريع حول هذا الموضوع. لقد أبلغنا المطورين مباشرة عن الخلل على GitHub، وقد أقروا به. [رابط Github هنا]

إليك الملاحظة/التحديث من المطور:

السبب الجذري: عملية “Message a Model” في الإصدار v2 تبني كل رسالة نصية بجزء محتوى input_text، بغض النظر عن الدور. واجهة برمجة التطبيقات Responses من OpenAI تقبل فقط output_text/refusal للرسائل التي دور صاحبها assistant، لذا بمجرد وجود رسالة Assistant في القائمة، يفشل الطلب برسالة الخطأ:

Invalid value: ‘input_text’. Supported values are: ‘output_text’ and ‘refusal’.

تنسيق الإخراج (JSON Schema / JSON Object) ليس هو المُحفِّز الفعلي — بل هو رسالة Assistant-role التي يتم إرسالها باسم input_text. عقدة 1.4 القديمة تعمل لأنها تستهدف نقطة نهاية chat/completions الأقدم، التي لا تستخدم أجزاء محتوى مكتوبة بهذه الطريقة.

الحل: سيتم إرسال رسائل النصوص من دور assistant كمحتوى نص عادي (الذي تقبله واجهة Responses وتعامله كنص إخراج assistant) بدلاً من جزء input_text؛ رسائل المستخدم/النظام لم تتغير. PR يتضمن هذا التغيير بالإضافة إلى اختبارات الانحدار في الطريق وسيتم ربطه هنا.

حلول بديلة حتى يتم إطلاقه:

  • أزل رسالة Assistant-role (أو الرسائل) والضِع هذا السياق في رسالة System، أو
  • استمر في استخدام عقدة HTTP Request (أو عقدة 1.4) التي تحققت بالفعل من أنها تعمل.

:police_car_light: تحديث من المطور / حالة GitHub

وفقاً لتحديث التطوير، تم إطلاق الحل مع n8n@2.29.0