OpenResponses API (HTTP)
يمكن لـ Gateway في OpenClaw تقديم نقطة نهاية متوافقة مع OpenResponses علىPOST /v1/responses.
تكون نقطة النهاية هذه معطلة افتراضيًا. قم بتمكينها أولًا في الإعدادات.
POST /v1/responses- المنفذ نفسه الخاص بـ Gateway (تعدد WS + HTTP):
http://<gateway-host>:<port>/v1/responses
openclaw agent)، لذلك تتطابق آليات التوجيه/الأذونات/الإعدادات مع Gateway لديك.
المصادقة والأمان والتوجيه
يتطابق السلوك التشغيلي مع OpenAI Chat Completions:- استخدم مسار مصادقة HTTP المطابق في Gateway:
- مصادقة السر المشترك (
gateway.auth.mode="token"أو"password"): Authorization: Bearer <token-or-password> - مصادقة trusted-proxy (
gateway.auth.mode="trusted-proxy"): ترويسات proxy مدركة للهوية من مصدر trusted proxy مهيأ وغير loopback - مصادقة مفتوحة على private-ingress (
gateway.auth.mode="none"): من دون ترويسة مصادقة
- مصادقة السر المشترك (
- تعامل مع نقطة النهاية باعتبارها وصولًا تشغيليًا كاملاً إلى مثيل gateway
- بالنسبة إلى أوضاع مصادقة السر المشترك (
tokenوpassword)، تجاهل قيمx-openclaw-scopesالأضيق المعلنة في bearer واستعد القيم الافتراضية الكاملة للمشغل - بالنسبة إلى أوضاع HTTP الموثوقة الحاملة للهوية (مثل trusted proxy auth أو
gateway.auth.mode="none")، احترمx-openclaw-scopesعند وجودها، وإلا فارجع إلى مجموعة النطاقات الافتراضية العادية للمشغل - اختر الوكلاء باستخدام
model: "openclaw"، أوmodel: "openclaw/default"، أوmodel: "openclaw/<agentId>"، أوx-openclaw-agent-id - استخدم
x-openclaw-modelعندما تريد تجاوز نموذج الواجهة الخلفية الخاص بالوكيل المحدد - استخدم
x-openclaw-session-keyمن أجل توجيه صريح للجلسة - استخدم
x-openclaw-message-channelعندما تريد سياق قناة دخول اصطناعية غير افتراضية
gateway.auth.mode="token"أو"password"+ Authorization: Bearer ...- يثبت امتلاك السر التشغيلي المشترك للـ gateway
- يتجاهل
x-openclaw-scopesالأضيق - يستعيد مجموعة النطاقات الافتراضية الكاملة للمشغل:
operator.adminوoperator.approvalsوoperator.pairing، وoperator.readوoperator.talk.secretsوoperator.write - يتعامل مع أدوار الدردشة على نقطة النهاية هذه كأدوار مرسل مالك
- أوضاع HTTP الموثوقة الحاملة للهوية (مثل trusted proxy auth، أو
gateway.auth.mode="none"على private ingress)- تحترم
x-openclaw-scopesعندما تكون الترويسة موجودة - ترجع إلى مجموعة النطاقات الافتراضية العادية للمشغل عندما تكون الترويسة غائبة
- لا تفقد دلالات المالك إلا عندما يضيّق المستدعي النطاقات صراحةً ويحذف
operator.admin
- تحترم
gateway.http.endpoints.responses.enabled.
يتضمن سطح التوافق نفسه أيضًا ما يلي:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default، وتمرير embeddings، وتجاوزات نموذج الواجهة الخلفية معًا، راجع OpenAI Chat Completions وقائمة النماذج وتوجيه الوكيل.
سلوك الجلسة
افتراضيًا تكون نقطة النهاية بلا حالة لكل طلب (يتم إنشاء مفتاح جلسة جديد مع كل استدعاء). إذا تضمّن الطلب سلسلةuser من OpenResponses، فإن Gateway يشتق مفتاح جلسة ثابتًا
منها، بحيث يمكن للاستدعاءات المتكررة مشاركة جلسة وكيل.
شكل الطلب (المدعوم)
يتبع الطلب OpenResponses API بمدخل قائم على العناصر. الدعم الحالي:input: سلسلة نصية أو مصفوفة من كائنات العناصر.instructions: تُدمج في system prompt.tools: تعريفات أدوات من جهة العميل (أدوات function).tool_choice: تصفية أدوات العميل أو اشتراطها.stream: تمكين بث SSE.max_output_tokens: حد تقريبي للمخرجات (يعتمد على الموفّر).user: توجيه ثابت للجلسة.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: يعيد OpenClaw استخدام جلسة الاستجابة السابقة عندما يبقى الطلب ضمن النطاق نفسه للوكيل/المستخدم/الجلسة المطلوبة.
العناصر (input)
message
الأدوار: system وdeveloper وuser وassistant.
- يتم إلحاق
systemوdeveloperبـ system prompt. - يصبح أحدث عنصر من
userأوfunction_call_outputهو “الرسالة الحالية”. - يتم تضمين رسائل user/assistant الأقدم كسجل من أجل السياق.
function_call_output (أدوات قائمة على الأدوار)
أرسل نتائج الأدوات مرة أخرى إلى النموذج:
reasoning وitem_reference
يتم قبولهما من أجل توافق المخطط، لكن يتم تجاهلهما عند بناء prompt.
الأدوات (أدوات function من جهة العميل)
قدّم الأدوات عبرtools: [{ type: "function", function: { name, description?, parameters? } }].
إذا قرر الوكيل استدعاء أداة، فستعيد الاستجابة عنصر إخراج function_call.
بعد ذلك ترسل طلب متابعة مع function_call_output لمتابعة الدور.
الصور (input_image)
يدعم مصادر base64 أو URL:
image/jpeg وimage/png وimage/gif وimage/webp وimage/heic وimage/heif.
الحد الأقصى للحجم (حاليًا): 10MB.
الملفات (input_file)
يدعم مصادر base64 أو URL:
text/plain وtext/markdown وtext/html وtext/csv،
وapplication/json وapplication/pdf.
الحد الأقصى للحجم (حاليًا): 5MB.
السلوك الحالي:
- يتم فك ترميز محتوى الملف وإضافته إلى system prompt، وليس إلى رسالة المستخدم، بحيث يبقى مؤقتًا (ولا يُحفظ في سجل الجلسة).
- يتم تغليف النص المفكوك من الملف باعتباره محتوى خارجيًا غير موثوق قبل إضافته، بحيث تُعامل بايتات الملف كبيانات، لا كتعليمات موثوقة.
- تستخدم الكتلة المحقونة علامات حدود صريحة مثل
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>وتتضمن سطر بيانات وصفية باسمSource: External. - يتعمد مسار إدخال الملفات هذا حذف الشعار الطويل
SECURITY NOTICE:للحفاظ على ميزانية prompt؛ ومع ذلك تبقى علامات الحدود والبيانات الوصفية في مكانها. - يتم تحليل PDFs بحثًا عن النص أولًا. وإذا تم العثور على قدر قليل من النص،
تُحوَّل الصفحات الأولى إلى صور نقطية وتمرر إلى النموذج، وتستخدم كتلة الملف المحقونة
العنصر النائب
[PDF content rendered to images].
pdfjs-dist (من دون worker). أما
الإصدار الحديث من PDF.js فيتوقع browser workers/DOM globals، لذلك لا يُستخدم في Gateway.
إعدادات الجلب عبر URL الافتراضية:
files.allowUrl: trueimages.allowUrl: truemaxUrlParts: 8(إجمالي أجزاءinput_file+input_imageالقائمة على URL لكل طلب)- تكون الطلبات محمية (حل DNS، وحظر عناوين IP الخاصة، وحدود إعادة التوجيه، والمهلات).
- تدعم قوائم السماح الاختيارية لأسماء المضيفين لكل نوع إدخال (
files.urlAllowlistوimages.urlAllowlist).- مضيف مطابق تمامًا:
"cdn.example.com" - نطاقات فرعية wildcard:
"*.assets.example.com"(لا يطابق النطاق الجذر) - تعني قوائم السماح الفارغة أو المحذوفة عدم وجود تقييد على أسماء المضيفين.
- مضيف مطابق تمامًا:
- لتعطيل الجلب القائم على URL بالكامل، اضبط
files.allowUrl: falseو/أوimages.allowUrl: false.
حدود الملفات + الصور (config)
يمكن ضبط القيم الافتراضية ضمنgateway.http.endpoints.responses:
maxBodyBytes: 20MBmaxUrlParts: 8files.maxBytes: 5MBfiles.maxChars: 200kfiles.maxRedirects: 3files.timeoutMs: 10sfiles.pdf.maxPages: 4files.pdf.maxPixels: 4,000,000files.pdf.minTextChars: 200images.maxBytes: 10MBimages.maxRedirects: 3images.timeoutMs: 10s- تُقبل مصادر
input_imageمن نوع HEIC/HEIF وتُطبَّع إلى JPEG قبل تسليمها إلى الموفّر.
- تُفرض قوائم السماح لعناوين URL قبل الجلب وعلى قفزات إعادة التوجيه.
- لا يؤدي إدراج اسم مضيف في قائمة السماح إلى تجاوز حظر عناوين IP الخاصة/الداخلية.
- بالنسبة إلى البوابات المكشوفة على الإنترنت، طبّق ضوابط خروج الشبكة بالإضافة إلى وسائل الحماية على مستوى التطبيق. راجع الأمان.
البث (SSE)
اضبطstream: true لتلقي Server-Sent Events (SSE):
Content-Type: text/event-stream- كل سطر حدث يكون بالشكل
event: <type>وdata: <json> - ينتهي التدفق بـ
data: [DONE]
response.createdresponse.in_progressresponse.output_item.addedresponse.content_part.addedresponse.output_text.deltaresponse.output_text.doneresponse.content_part.doneresponse.output_item.doneresponse.completedresponse.failed(عند الخطأ)
الاستخدام
يتم ملءusage عندما يبلّغ الموفّر الأساسي عن أعداد الرموز.
يقوم OpenClaw بتطبيع الأسماء المستعارة الشائعة بأسلوب OpenAI قبل أن تصل هذه العدادات
إلى أسطح الحالة/الجلسة اللاحقة، بما في ذلك input_tokens / output_tokens
وprompt_tokens / completion_tokens.
الأخطاء
تستخدم الأخطاء كائن JSON بالشكل التالي:401مصادقة مفقودة/غير صالحة400جسم طلب غير صالح405طريقة غير صحيحة