400 غامضاً. ثلاثة رموز أمان تغطي الحالات التي ستراها: مطالبة أو
استجابة مفحوصة، واستدعاء أداة مرفوض، واستدعاء أداة مُعلَّق لموافقة بشرية.
هذه الصفحة هي مرجع تلك الرموز — حالة الاستخدام لكلٍّ منها، وحالة HTTP
بالضبط، وما يكلّفك، والقاعدة الأهم: منطق إعادة المحاولة يجب أن يعاملها
كحالة خاصة. الثلاثة جميعاً معلَّمة skip-retry؛ إعادة تشغيل نفس
الاستدعاء بلا تفكير تطلق نفس التحكّم مجدداً فحسب.
هذه رموز فرض — البوابة تقرر عدم تمرير استدعائك. وهي متمايزة عن أخطاء
المزود الأعلى (429 من نموذج، تجاوز سياق) وعن إخفاقات المصادقة. لمعرفة سبب
إيقاف طلب بعينه، انظر
لماذا حُجب هذا؟.
1. رموز أخطاء أمان llm في لمحة
كل حجب أمني يعيد HTTP 400 بجسم خطأ على هيئة OpenAI (error.code هو السلسلة المُصنّفة أدناه). على مسارات Claude الأصلية
(/v1/messages) يسافر نفس الرمز في هيئة خطأ Claude، فيكون توجيه SDK
حتمياً عبر البروتوكولات.
| الرمز | يوقف | تكلفة الحصة |
|---|---|---|
guardrail_blocked | مطالبة أو استجابة اصطدمت بقاعدة block | لا شيء |
firewall_blocked | استدعاء أداة / إعلان مرفوض | لا رموز نموذج |
firewall_approval_pending | استدعاء أداة مُعلَّق لمراجِع بشري | لا رموز نموذج |
2. guardrail_blocked — مطالبة أو استجابة مفحوصة
يُعاد عندما تُطلق قاعدة حاجز حماية بإجراء block
— كلمة مفتاحية في قائمة الرفض، أو اصطدام regex، أو كيان PII أو سرّ اخترت
حجبه بدلاً من إخفائه، أو حكم llm_judge، أو فحص ترسيخ فاشل.
HTTP 400. تسمّي الرسالة حاجز الحماية والقاعدة التي أُطلقت.
أثر الحصة: لا شيء
أثر الحصة: لا شيء
الطلب المحجوب لا يكلّف أي حصة. حجب مرحلة الإدخال يُطلق قبل القياس،
فلا يُفوتر شيء أبداً. حجب مرحلة الإخراج يعمل بعد أن يستجيب النموذج،
فتُرجِع البوابة الحصة المستهلكة مسبقاً قبل إعادة الخطأ. في الحالتين لا
تدفع شيئاً مقابل استدعاء محجوب.
لماذا هو skip-retry
لماذا هو skip-retry
الحكم خاصية من خصائص المحتوى، لا القناة. إعادة تشغيل نفس المطالبة —
حتى مقابل نموذج مختلف — تنتج نفس الحجب. أصلح الإدخال (أو السياسة) بدلاً
من إعادة المحاولة.
كيف يبدو الإخفاء بدلاً من ذلك
كيف يبدو الإخفاء بدلاً من ذلك
قواعد
mask لا تعيد هذا الرمز. التطابق المُخفى (مثل
jane@acme.com ← [EMAIL]) يُنقَّح في مكانه ويمضي الاستدعاء بشكل
طبيعي — تحصل على 200، لكن بالمقطع الحساس مُزالاً. إجراء block وحده
يُظهر guardrail_blocked. (flag لا يغيّر أي شيء في حركة المرور على
الإطلاق.)3. firewall_blocked — استدعاء أداة مرفوض
يُعاد عندما يحلّ جدار الحماية حكم deny لاستدعاء
أداة — أمر shell مدمّر، أو جلب على هيئة SSRF، أو وجهة egress في قائمة رفض،
أو مهارة في وضع block.
كيفية ظهور الرفض تعتمد على سطح الفرض:
inbound / response / egress
HTTP 400 بـ
error.code = firewall_blocked. يحمل الجسم
error.metadata مهيكلة (reason_code، عوامل المخاطرة factors،
risk_score) حتى تستطيع تفسير الحجب، لا مجرد رؤيته.سطح mcp
يُعاد كـخطأ أداة (
firewall deny: <reason>)، لا فشل نقل — فيرى
النموذج الرفض ويمكنه اختيار أداة أخرى، أو سؤال المستخدم، أو التوقف،
بدلاً من انهيار التشغيل.4. firewall_approval_pending — مُعلَّق لإنسان
يُعاد في اللحظة التي يصطدم فيها استدعاء أداة بحكم pending_approval. بوابة
الإنسان في الحلقة لا يمكن أن تكون انتظاراً مضمّناً حاجباً، فتعيد البوابة
استجابة مُعلَّقة فوراً بدلاً من الاستطلاع الطويل.
HTTP 400. يحمل الخطأ معرّف الموافقة حتى يعرف وكيلك أي تعليق يحلّه.
هذا هو الرمز الوحيد الذي تستجيب له بـالحل وإعادة التقديم — لا بمعاملته
كفشل نهائي:
اقرأ معرّف الموافقة من الخطأ المُعلَّق
المعرّف قابل للاسترداد من جسم الخطأ. لا تعِد محاولة الاستدعاء بعد —
إعادة المحاولة الساذجة تعيد التعليق فحسب.
انتظر قراراً
يحلّها مراجِع من وحدة التحكم (Developer+)، أو يحصل نظام موافقاتك على
استدعاء webhook مُوقَّع بـ HMAC. يستطلع وكيلك
GET /api/v1/firewall/approvals/:id للحالة.تعمل مسارات الموافقة (
/api/v1/firewall/approvals/*) على مفتاح ضمن نطاق
بوابة جدار الحماية، وليس جلسة وحدة التحكم. انظر
الموافقة البشرية (HITL) للحلقة
الكاملة وحمولات Webhook لتوقيع
الاستدعاء الراجع.5. لماذا تتخطّى الثلاثة جميعاً إعادة المحاولة
منطق إعادة محاولة SDK المعتاد يفترض أن400 قد ينجح في محاولة ثانية. هذه
الرموز تكسر هذا الافتراض — الحجب حتمي، فإعادة المحاولة العمياء تهدر رحلة
ذهاب وإياب و(للاستدعاءات المُعلَّقة) تعيد إدراج موافقة في الطابور صامتةً.
ماذا تعني 'skip-retry' عملياً
ماذا تعني 'skip-retry' عملياً
آلية إعادة المحاولة/التراجع الداخلية الخاصة بـ OrcaRouter لا تعيد أبداً
محاولة استدعاء يعيد أحد هذه الرموز مقابل قناة أخرى. عاكِس ذلك في
عميلك: على رمز أمني، توقّف وتصرّف بناءً على الحكم، لا تكرّر.
التفاعل الصحيح لكل رمز
التفاعل الصحيح لكل رمز
guardrail_blocked← أصلح الإدخال أو خفّف السياسة؛ أظهر الرفض للمستخدم. لا تعِد المحاولة.firewall_blocked← الإجراء غير مسموح؛ اجعل الوكيل يختار أداة مختلفة أو يطلب المساعدة. لا تعِد المحاولة.firewall_approval_pending← حُلّ التعليق، ثم أعد التقديم مرة واحدة بترويسة الموافقة (§4). إعادة المحاولة بدون الترويسة تعيد التعليق.
6. ملخّص الحصة والفوترة
الحجب الأمني لا يفوترك أبداً مقابل وحدة العمل المحجوبة.| الرمز | متى يُطلق | نتيجة الفوترة |
|---|---|---|
guardrail_blocked (إدخال) | قبل استدعاء النموذج | لا يُقاس أبداً |
guardrail_blocked (إخراج) | بعد أن يستجيب النموذج | تُرجَع الحصة المستهلكة مسبقاً |
firewall_blocked (inbound) | قبل استدعاء النموذج | لا رموز نموذج |
firewall_approval_pending | قبل الإرسال | لا رموز نموذج |
7. مراجع ذات صلة
لماذا حُجب هذا؟
تتبّع حجباً واحداً إلى القاعدة والسطح والسبب الدقيق الذي أنتجه.
مسرد الأحكام
كل حكم لجدار الحماية — allow وaudit وdeny وsanitize وpending_approval
وcap_cost — وما يصدره كل منها.
حمولات Webhook والأخطاء
ظرف الخطأ الكامل، وحقول
error.metadata، وتوقيع الاستدعاء الراجع
للموافقة.أوضاع الفرض
الظل والمراقبة والفرض — متى يغيّر الحكم فعلاً حركة المرور.
