OpenAI Chat Completions (HTTP)
يمكن لـ Gateway في OpenClaw تقديم نقطة نهاية Chat Completions صغيرة متوافقة مع OpenAI. تكون نقطة النهاية هذه معطلة افتراضيًا. فعّلها أولًا في التكوين.POST /v1/chat/completions- المنفذ نفسه الخاص بـ Gateway (تعدد إرسال WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent)، لذا يطابق التوجيه/الأذونات/التكوين ما هو موجود في Gateway لديك.
المصادقة
يستخدم تكوين المصادقة في Gateway. مسارات مصادقة HTTP الشائعة:- مصادقة السر المشترك (
gateway.auth.mode="token"أو"password"):Authorization: Bearer <token-or-password> - مصادقة HTTP موثوقة حاملة للهوية (
gateway.auth.mode="trusted-proxy"): مرّر الطلب عبر proxy واعٍ بالهوية ومكوّن، ودعه يحقن ترويسات الهوية المطلوبة - مصادقة مفتوحة على ingress خاص (
gateway.auth.mode="none"): لا يلزم ترويسة مصادقة
- عندما تكون
gateway.auth.mode="token"، استخدمgateway.auth.token(أوOPENCLAW_GATEWAY_TOKEN). - عندما تكون
gateway.auth.mode="password"، استخدمgateway.auth.password(أوOPENCLAW_GATEWAY_PASSWORD). - عندما تكون
gateway.auth.mode="trusted-proxy"، يجب أن يأتي طلب HTTP من مصدر trusted proxy غير loopback ومكوّن؛ ولا تفي proxies المحلية على المضيف نفسه بهذا الوضع. - إذا كان
gateway.auth.rateLimitمكوّنًا وحدث عدد كبير جدًا من إخفاقات المصادقة، فستعيد نقطة النهاية429معRetry-After.
الحد الأمني (مهم)
تعامل مع نقطة النهاية هذه باعتبارها سطح وصول مشغل كامل لمثيل gateway.- مصادقة HTTP bearer هنا ليست نموذج نطاق ضيق لكل مستخدم.
- يجب التعامل مع رمز/كلمة مرور Gateway صالحين لهذه النقطة النهائية كما لو كانا بيانات اعتماد مالك/مشغل.
- تمر الطلبات عبر نفس مسار وكيل مستوى التحكم الذي تستخدمه إجراءات المشغل الموثوقة.
- لا يوجد حد أدوات منفصل لغير المالك/لكل مستخدم على نقطة النهاية هذه؛ فبمجرد أن يمرر المستدعي مصادقة Gateway هنا، يعامل OpenClaw هذا المستدعي باعتباره مشغلًا موثوقًا لهذا gateway.
- بالنسبة إلى أوضاع مصادقة السر المشترك (
tokenوpassword)، تستعيد نقطة النهاية الإعدادات الافتراضية الكاملة للمشغل حتى إذا أرسل المستدعي ترويسةx-openclaw-scopesأضيق. - أوضاع HTTP الموثوقة الحاملة للهوية (مثل مصادقة trusted proxy أو
gateway.auth.mode="none") تحترمx-openclaw-scopesعند وجودها، وإلا تعود إلى مجموعة نطاقات المشغل الافتراضية العادية. - إذا كانت سياسة الوكيل المستهدف تسمح بأدوات حساسة، فيمكن لهذه النقطة النهائية استخدامها.
- أبقِ نقطة النهاية هذه على loopback أو tailnet أو ingress خاص فقط؛ ولا تكشفها مباشرة إلى الإنترنت العام.
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"على ingress خاص)- تصادق هوية موثوقة خارجية أو حد نشر موثوق
- تحترم
x-openclaw-scopesعند وجود الترويسة - تعود إلى مجموعة نطاقات المشغل الافتراضية العادية عند غياب الترويسة
- لا تفقد دلالات المالك إلا عندما يضيّق المستدعي النطاقات صراحةً ويحذف
operator.admin
عقد النموذج القائم على الوكيل
يعامل OpenClaw الحقلmodel في OpenAI على أنه هدف وكيل، وليس معرّف نموذج مزوّد خام.
model: "openclaw"يوجّه إلى الوكيل الافتراضي المكوّن.model: "openclaw/default"يوجّه أيضًا إلى الوكيل الافتراضي المكوّن.model: "openclaw/<agentId>"يوجّه إلى وكيل محدد.
x-openclaw-model: <provider/model-or-bare-id>يتجاوز النموذج الخلفي للوكيل المحدد.- لا يزال
x-openclaw-agent-id: <agentId>مدعومًا كتجاوز للتوافق. x-openclaw-session-key: <sessionKey>يتحكم بالكامل في توجيه الجلسة.x-openclaw-message-channel: <channel>يضبط سياق قناة دخول اصطناعية للمطالبات والسياسات الواعية بالقنوات.
model: "openclaw:<agentId>"model: "agent:<agentId>"
تمكين نقطة النهاية
اضبطgateway.http.endpoints.chatCompletions.enabled على true:
تعطيل نقطة النهاية
اضبطgateway.http.endpoints.chatCompletions.enabled على false:
سلوك الجلسة
افتراضيًا، تكون نقطة النهاية عديمة الحالة لكل طلب (يُولَّد مفتاح جلسة جديد مع كل استدعاء). إذا تضمّن الطلب سلسلة OpenAIuser، فسيشتق Gateway مفتاح جلسة ثابتًا منها، بحيث يمكن للمكالمات المتكررة مشاركة جلسة وكيل.
لماذا يهم هذا السطح
هذه هي مجموعة التوافق الأعلى قيمة للواجهات الأمامية والأدوات المستضافة ذاتيًا:- تتوقع معظم إعدادات Open WebUI وLobeChat وLibreChat وجود
/v1/models. - تتوقع العديد من أنظمة RAG وجود
/v1/embeddings. - يمكن عادةً لعملاء دردشة OpenAI الحاليين البدء باستخدام
/v1/chat/completions. - يفضّل العملاء الأكثر اعتمادًا على الوكلاء بشكل متزايد
/v1/responses.
قائمة النماذج وتوجيه الوكيل
ماذا يعيد `/v1/models`؟
ماذا يعيد `/v1/models`؟
قائمة أهداف وكلاء OpenClaw.تكون المعرّفات المعادة هي
openclaw وopenclaw/default وإدخالات openclaw/<agentId>.
استخدمها مباشرةً كقيم OpenAI model.هل يسرد `/v1/models` الوكلاء أم الوكلاء الفرعيين؟
هل يسرد `/v1/models` الوكلاء أم الوكلاء الفرعيين؟
إنه يسرد أهداف الوكلاء من المستوى الأعلى، وليس نماذج مزوّدات الخلفية ولا الوكلاء الفرعيين.يظل الوكلاء الفرعيون طوبولوجيا تنفيذ داخلية. ولا يظهرون كنماذج زائفة.
لماذا تم تضمين `openclaw/default`؟
لماذا تم تضمين `openclaw/default`؟
openclaw/default هو الاسم المستعار الثابت للوكيل الافتراضي المكوّن.وهذا يعني أن العملاء يمكنهم الاستمرار في استخدام معرّف واحد متوقع حتى لو تغيّر معرّف الوكيل الافتراضي الحقيقي بين البيئات.كيف أتجاوز النموذج الخلفي؟
كيف أتجاوز النموذج الخلفي؟
استخدم
x-openclaw-model.أمثلة:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.4إذا حذفته، فسيعمل الوكيل المحدد باختياره المعتاد للنموذج المكوّن.كيف تنسجم embeddings مع هذا العقد؟
كيف تنسجم embeddings مع هذا العقد؟
يستخدم
/v1/embeddings معرّفات model نفسها القائمة على أهداف الوكلاء.استخدم model: "openclaw/default" أو model: "openclaw/<agentId>".
وعندما تحتاج إلى نموذج embedding محدد، أرسله في x-openclaw-model.
ومن دون تلك الترويسة، يمر الطلب إلى إعداد embedding المعتاد للوكيل المحدد.البث (SSE)
اضبطstream: true لتلقي Server-Sent Events (SSE):
Content-Type: text/event-stream- يكون كل سطر حدث بصيغة
data: <json> - ينتهي البث بـ
data: [DONE]
إعداد سريع لـ Open WebUI
لإعداد اتصال Open WebUI أساسي:- عنوان URL الأساسي:
http://127.0.0.1:18789/v1 - عنوان URL الأساسي لـ Docker على macOS:
http://host.docker.internal:18789/v1 - مفتاح API: رمز bearer الخاص بـ Gateway
- النموذج:
openclaw/default
- يجب أن يسرد
GET /v1/modelsالقيمةopenclaw/default - يجب أن يستخدم Open WebUI القيمة
openclaw/defaultكمعرّف نموذج الدردشة - إذا كنت تريد مزوّد/نموذج خلفي محددًا لذلك الوكيل، فاضبط النموذج الافتراضي المعتاد للوكيل أو أرسل
x-openclaw-model
openclaw/default، فيمكن لمعظم إعدادات Open WebUI الاتصال باستخدام عنوان URL الأساسي نفسه والرمز نفسه.
أمثلة
بدون بث:- يعيد
/v1/modelsأهداف وكلاء OpenClaw، وليس فهارس مزوّدات خام. - تكون
openclaw/defaultموجودة دائمًا بحيث يعمل معرّف ثابت واحد عبر البيئات. - تنتمي تجاوزات المزوّد/النموذج الخلفي إلى
x-openclaw-model، وليس إلى الحقلmodelفي OpenAI. - يدعم
/v1/embeddingsالقيمةinputكسلسلة أو كمصفوفة سلاسل.