يستند هذا الدليل إلى عمليات تحقق مباشرة من واجهة CometAPI API الحالية. لقد تحقّقنا مباشرة من أخطاء
400 و401 وأعطال المسار/base URL. ولم نُعِد إنتاج أخطاء 413 أو 429 أو 500 أو 503 أو 504 أو 524 ضمن اختبارات محدودة، لذلك فإن الإرشادات الخاصة بهذه الحالات متحفّظة عمدًا.الفرز السريع
| Status | ما الذي يعنيه عادةً | إعادة المحاولة؟ | الإجراء الأول |
|---|---|---|---|
400 | فشل التحقق من صحة الطلب قبل أن يتم توجيهه بنجاح. | لا | تحقّق من model وmessages وبنية JSON وأنواع الحقول. |
401 | مفتاح API مفقود أو غير صالح أو ذو تنسيق غير صحيح. | لا | تحقّق من Authorization: Bearer <COMETAPI_KEY>. |
403 | تم حظر الوصول أو لم يكن الطلب الحالي مسموحًا به. | غالبًا لا | أعد المحاولة باستخدام طلب سليم معروف، وأزل الحقول الخاصة بالنموذج أولًا. |
| خطأ في المسار | عنوان base URL غير صحيح أو مسار endpoint غير صحيح. في Comet قد يظهر هذا على شكل إعادة توجيه 301 أو HTML، وليس 404 نظيفًا بصيغة JSON. | لا | استخدم https://api.cometapi.com/v1 كما هو تمامًا، وعطّل اتباع إعادة التوجيه تلقائيًا أثناء تصحيح الأخطاء. |
429 | تحديد معدل الطلبات أو تشبّع مؤقت. | نعم | استخدم exponential backoff مع jitter. |
500, 503, 504, 524 | عطل في المنصة أو عطل من فئة timeout. | نعم | أعد المحاولة مع backoff واحتفِظ بمعرّف الطلب. |
غلاف الخطأ
يبدو غلاف الخطأ الحالي بصيغة JSON الذي تعيده CometAPI كما يلي:request id داخل error.message. احفظ هذه القيمة عندما تحتاج إلى الدعم.
400 Bad Request
ما لاحظناه من واجهة API المباشرة عندما تم حذف model:
400 عادةً أن جسم الطلب فشل في التحقق من الصحة قبل أن تتمكن المنصة من توجيهه إلى موفّر النموذج.
الأسباب الشائعة:
- غياب الحقول المطلوبة مثل
modelأوmessages - بنية JSON غير صالحة
- إرسال حقل بنوع غير صحيح
- إعادة استخدام معاملات خاصة بموفّر لا تقبلها نقطة endpoint المحددة
- ابدأ بطلب أساسي سليم ومعروف.
- أعد إضافة الحقول الاختيارية واحدًا تلو الآخر.
- قارن جسم الطلب بمخطط endpoint في مرجع API.
your-model-id بأي معرّف نموذج حالي من صفحة نماذج CometAPI.
401 Invalid Token
ما لاحظناه من واجهة API المباشرة عند استخدام مفتاح غير صالح:
- يجب أن يكون الترويس بالضبط
Authorization: Bearer <COMETAPI_KEY>. - تأكد من أن تطبيقك لا يحمّل مفتاحًا قديمًا من
.envأو سجل shell أو مخزن الأسرار في بيئة النشر. - إذا فشل مفتاح واحد ونجح مفتاح آخر مع الطلب نفسه، فاعتبر ذلك مشكلة في token وليس مشكلة في endpoint.
403 Forbidden
لم نتمكن من إعادة إنتاج حالة 403 مستقرة في اختبارات محدودة، لذا تجنّب اعتبار قالب رسالة قديم واحد على أنه يروي القصة كاملة.
في وثائق Comet الحالية، تتم مناقشة 403 غالبًا باعتباره إحدى هذه الحالات:
- يتم حظر الطلب بواسطة قاعدة على مستوى المنصة مثل تصفية WAF
- لا يُسمح للـ token أو المسار باستخدام model المطلوب أو شكل الطلب المطلوب
- يرفض model المختار أحد المعلمات المتقدمة التي مررتها
- أعد المحاولة باستخدام طلب نصي بسيط جدًا على model معروف بأنه يعمل بشكل صحيح.
- أزل الحقول المتقدمة والمعلمات الخاصة بمزوّد الخدمة، ثم أعد إضافتها تدريجيًا.
- إذا كانت الاستجابة تتضمن request id، فاحتفظ به قبل التواصل مع الدعم.
Base URL خاطئ أو Path خاطئ
هذه هي المنطقة التي كانت فيها الصفحة القديمة الأقل دقة. في عمليات التحقق المباشرة مقابل نقاط نهاية Comet الحالية:- أدى الإرسال إلى
https://api.cometapi.com/chat/completionsإلى إرجاع إعادة توجيه301نحوhttps://www.cometapi.com/chat/completions - أدى الإرسال إلى مسار API وهمي مثل
https://api.cometapi.com/v1/not-a-real-endpointأيضًا إلى إرجاع إعادة توجيه301نحوhttps://www.cometapi.com/v1/not-a-real-endpoint
- إعادة توجيه
- استجابة HTML غير بتنسيق JSON إذا كان العميل لديك يتبع عمليات إعادة التوجيه
- خطأ تحليل parsing داخل SDK لديك
- طلب لا يصل أبدًا إلى طبقة API بشكل سليم
- تأكد من أن Base URL يتضمن
/v1. - تأكد من أن path الخاص بنقطة النهاية يطابق الوثائق تمامًا.
- عطّل المتابعة التلقائية لإعادة التوجيه أثناء تصحيح مشكلات path.
413 Request Entity Too Large
لم نتمكن من إعادة إنتاج 413 في اختبار محدود، حتى مع جسم طلب JSON كبير بحجم 8 MiB، لذا كان التفسير القديم بأن prompt طويل جدًا تفسيرًا ضيقًا أكثر من اللازم.
إذا ظهرت لك 413، فتعامل معها أولًا على أنها مشكلة حجم الطلب. ومن أكثر الأسباب الشائعة:
- حمولات base64 كبيرة
- صور أو ملفات صوتية كبيرة جدًا مضمّنة inline
- أجسام multipart أو JSON كبيرة جدًا
- قلّل حجم المحتوى المرفق أو اضغطه.
- قسّم المهام الكبيرة إلى طلبات أصغر.
- لا تفترض أن طول النص العادي هو السبب الوحيد.
429 Too Many Requests
لم نتمكن من إعادة إنتاج 429 أثناء اختبار محدود للتزامن شمل 24 طلب GET /v1/models متوازيًا، لذا فمن الواضح أن الحد الدقيق يعتمد على المسار وmodel والحالة الحالية للمنصة.
تعامل مع 429 على أنها قابلة لإعادة المحاولة:
- استخدم exponential backoff مع jitter.
- قلّل التزامن في الاندفاعات.
- أبقِ تسجيل الطلبات مفعّلًا حتى تتمكن من معرفة أي مسار وأي model يصلان إلى التشبع أولًا.
500, 503, 504, And 524
لم نتمكن من إعادة إنتاج رموز الحالة هذه في اختبارات محدودة. ينبغي توثيقها على أنها إخفاقات من جهة الخادم أو من فئة المهلات الزمنية، وليس باعتبارها أخطاء من المستخدم.
إرشادات عملية:
500: فشل داخلي في المنصة أو من جهة مزوّد الخدمة503: المسار أو خدمة المزوّد غير متاحة مؤقتًا504و524: إخفاقات من فئة المهلات الزمنية بين المنصة أو الحافة أو خدمة المزوّد
- أعد المحاولة مع backoff.
- احتفظ بـ
request idونقطة النهاية وmodel والطابع الزمني. - إذا تكرر الإخفاق نفسه عبر عدة محاولات، فتواصل مع الدعم مع تزويدهم بهذا السياق.
قبل التواصل مع الدعم
التقط هذه التفاصيل أولاً:- طريقة HTTP
- مسار Endpoint
- اسم Model
- JSON لهيكل request body بعد تنقيته من البيانات الحساسة (هذا هو العنصر الأكثر فائدة في معظم استدعاءات API)
- Query parameters إذا كان الطلب الذي فشل يستخدمها
- response body الكامل إذا كان عميلك قد التقطه
- حالة HTTP الكاملة
- قيمة
error.messageكما هي تمامًا - أي
request id - طابع زمني تقريبي
- ما إذا كان الطلب نفسه يعمل مع Model آخر أو Token آخر
- أسماء الحقول والقيم النصية التي أرسلتها مع الملف
- اسم الملف، ونوعه، وحجمه التقريبي
- ما إذا كان الملف قد تم رفعه مباشرة، أو تمت الإشارة إليه عبر URL، أو تضمينه بصيغة base64