تجارب
خطة بوابة OpenResponses
السياق
تعرض بوابة OpenClaw حاليًا نقطة نهاية دنيا متوافقة مع OpenAI لـ Chat Completions على المسار /v1/chat/completions (انظر OpenAI Chat Completions). Open Responses هو معيار استدلال مفتوح يعتمد على OpenAI Responses API. وهو مصمم لسير العمل الوكيلية ويستخدم مدخلات قائمة على العناصر بالإضافة إلى أحداث البث الدلالي. يحدد مواصفات OpenResponses المسار /v1/responses، وليس /v1/chat/completions.
الأهداف
- إضافة نقطة نهاية
/v1/responsesتلتزم بدلالات OpenResponses. - الحفاظ على Chat Completents كطبقة توافق يسهل تعطيلها وإزالتها في النهاية.
- توحيد التحقق والتحليل باستخدام مخططات معزولة وقابلة لإعادة الاستخدام.
غير الأهداف
- تحقيق تكافؤ كامل لميزات OpenResponses في المرحلة الأولى (الصور، الملفات، الأدوات المستضافة).
- استبدال منطق تنفيذ الوكيل الداخلي أو تنسيق الأدوات.
- تغيير سلوك
/v1/chat/completionsالحالي خلال المرحلة الأولى.
ملخص البحث
المصادر: OpenResponses OpenAPI، موقع مواصفات OpenResponses، ومنشور مدونة Hugging Face. النقاط الرئيسية المستخلصة:
POST /v1/responsesيقبل حقولCreateResponseBodyمثلmodel،input(سلسلة نصية أوItemParam[])،instructions،tools،tool_choice،stream،max_output_tokens، وmax_tool_calls.ItemParamهو اتحاد مميز من:- عناصر
messageبأدوارsystem،developer،user،assistant function_callوfunction_call_outputreasoningitem_reference
- عناصر
- الردود الناجحة تُرجع
ResponseResourceمعobject: "response"،status، وعناصرoutput. - يستخدم البث المتدفق أحداثًا دلالية مثل:
response.created،response.in_progress،response.completed،response.failedresponse.output_item.added،response.output_item.doneresponse.content_part.added،response.content_part.doneresponse.output_text.delta،response.output_text.done
- تتطلب المواصفات:
Content-Type: text/event-stream- يجب أن يتطابق
event:مع حقل JSONtype - الحدث النهائي يجب أن يكون حرفيًا
[DONE]
- قد تعرض عناصر التفكير
content،encrypted_content، وsummary. - تتضمن أمثلة HF
OpenResponses-Version: latestفي الطلبات (رأس اختياري).
البنية المقترحة
- إضافة
src/gateway/open-responses.schema.tsيحتوي فقط على مخططات Zod (بدون استيرادات من البوابة). - إضافة
src/gateway/openresponses-http.ts(أوopen-responses-http.ts) للمسار/v1/responses. - الحفاظ على
src/gateway/openai-http.tsكما هو كمحول توافق قديم. - إضافة إعداد
gateway.http.endpoints.responses.enabled(القيمة الافتراضيةfalse). - الحفاظ على
gateway.http.endpoints.chatCompletions.enabledمستقلًا؛ السماح بتبديل نقطتي النهاية بشكل منفصل. - إصدار تحذير عند بدء التشغيل عندما يكون Chat Completions مفعلاً للإشارة إلى حالته القديمة.
مسار إيقاف استخدام Chat Completions
- الحفاظ على حدود وحدات صارمة: لا توجد أنواع مخططات مشتركة بين responses و chat completions.
- جعل Chat Completions اختياريًا عبر الإعدادات بحيث يمكن تعطيله دون تغييرات في الكود.
- تحديث الوثائق لوضع علامة على Chat Completions على أنه قديم بمجرد استقرار
/v1/responses. - خطوة مستقبلية اختيارية: تعيين طلبات Chat Completions إلى معالج Responses لمسار إزالة أبسط.
مجموعة الدعم للمرحلة الأولى
- قبول
inputكسلسلة نصية أوItemParam[]مع أدوار الرسائل وfunction_call_output. - استخراج رسائل النظام والمطور إلى
extraSystemPrompt. - استخدام أحدث
userأوfunction_call_outputكالرسالة الحالية لتشغيلات الوكيل. - رفض أجزاء المحتوى غير المدعومة (الصورة/الملف) مع
invalid_request_error. - إرجاع رسالة مساعد واحدة مع محتوى
output_text. - إرجاع
usageبقيم صفرية حتى يتم توصيل محاسبة الرموز المميزة.
استراتيجية التحقق (بدون SDK)
- تنفيذ مخططات Zod للمجموعة المدعومة من:
CreateResponseBodyItemParam+ اتحادات أجزاء محتوى الرسالةResponseResource- أشكال أحداث البث المستخدمة من قبل البوابة
- الاحتفاظ بالمخططات في وحدة واحدة معزولة لتجنب الانحراف والسماح بتوليد الكود في المستقبل.
تنفيذ البث المتدفق (المرحلة الأولى)
- أسطر SSE مع كل من
event:وdata:. - التسلسل المطلوب (الحد الأدنى القابل للتطبيق):
response.createdresponse.output_item.addedresponse.content_part.addedresponse.output_text.delta(تكرار حسب الحاجة)response.output_text.doneresponse.content_part.doneresponse.completed[DONE]
خطة الاختبارات والتحقق
- إضافة تغطية شاملة من البداية إلى النهاية لـ
/v1/responses:- المصادقة مطلوبة
- شكل الرد غير المتدفق
- ترتيب أحداث البث و
[DONE] - توجيه الجلسة مع الرؤوس و
user
- الحفاظ على
src/gateway/openai-http.test.tsدون تغيير. - يدويًا: استخدام curl إلى
/v1/responsesمعstream: trueوالتحقق من ترتيب الأحداث والحدث النهائي[DONE].
تحديثات الوثائق (متابعة)
- إضافة صفحة وثائق جديدة لاستخدام
/v1/responsesوالأمثلة. - تحديث
/gateway/openai-http-apiبملاحظة قديمة وإشارة إلى/v1/responses.
إعادة هيكلة Browser Evaluate CDPخطة PTY والإشراف على العمليات