الانتقال إلى المحتوى الرئيسي
أعاد طلب HTTP 400 وتعطّل وكيلك. قبل أن تغيّر أي كود، أخبرتك البوابة بالفعل بما حدث: رمز الخطأ يسمّي أي تحكّم أُطلق، وإحدى التغذيتين تسمّي القاعدة الدقيقة. هذه الصفحة هي مسار البحث والتتبّع — اقرأ الرمز، وافتح التغذية الصحيحة، واعثر على القاعدة. إذا تذكّرت شيئاً واحداً فقط: 400 من تحكّم أمني ليس عيباً في مطالبتك. إنه سياسة تؤدّي عملها. عملك هو إيجاد أي سياسة، ثم تقرّر ما إذا كنت ستصلح الاستدعاء أو تخفّف القاعدة.

1. لماذا حُجب طلب llm الخاص بي؟ — ابدأ برمز الخطأ

كل حجب أمني على البوابة المُستضافة يعيد HTTP 400 برمز code قابل للقراءة آلياً في جسم الخطأ على هيئة OpenAI. ذلك الرمز هو أول مفترق على الطريق — يخبرك بأي مستوى تحكّم تصحّح وأي تغذية تفتح.
{
  "error": {
    "message": "tool \"shell.exec\" blocked by firewall: destructive shell command",
    "code": "firewall_blocked",
    "type": "invalid_request_error"
  }
}

guardrail_blocked

أُطلقت قاعدة محتوى حاجز حماية على إدخال طلبك أو إخراج النموذج. تتبّعها في تغذية Matches. انظر §2.

firewall_blocked

رفضت قاعدة جدار حماية استدعاء أداة. تتبّعها في تغذية Events. انظر §3.

firewall_approval_pending

استدعاء أداة مُعلَّق لموافقة بشرية — وليس مرفوضاً. حُلّه، لا تصحّحه. انظر §4.
الرموز الثلاثة جميعاً skip-retry: إعادة تشغيل الاستدعاء المطابق تماماً توجّه إلى نفس السياسة وتحجب مجدداً. إعادة المحاولة زمن انتظار مهدور — أصلح الإدخال أو القاعدة بدلاً من ذلك. جدول الرموز الكامل يعيش في رموز الأخطاء.

2. guardrail_blocked — اعثر على القاعدة في Matches

guardrail_blocked يعني أن سياسة محتوى مرتبطة بمفتاحك (أو افتراضي مساحة عملك) شغّلت إجراء block مقابل إدخال الطلب أو إخراج النموذج. رسالة الحجب تسمّي حاجز الحماية والقاعدة، والطلب لا يكلّفك أي حصة — حجب الإدخال يُطلق قبل القياس؛ وحجب الإخراج يُرجِع الحصة المستهلكة مسبقاً. تتبّعها:
1

افتح تغذية Matches

في وحدة التحكم، اذهب إلى تبويب Matches في صفحة حواجز الحماية (GET /api/guardrail/match، Member). كل قاعدة تُطلق تهبط هنا — مع RuleType وAction وStage وسلسلة Detail مثل pii: email, phone أو matched 3 keyword(s).
2

رشّح إلى الحجب

رشّح بـ action = block ووقت طلبك. يخبرك الصف المطابق بنوع القاعدة (pii، regex، keyword، max_chars، llm_judge، grounding، external) وما إذا أُطلق في مرحلة input أو output.
3

انظر ما طابقته فعلاً

افتراضياً تسجّل التغذية أن قاعدة أُطلقت وسلسلتها الوصفية Detailوليس السلسلة الفرعية المطابقة. فعّل Log raw content على ذلك حاجز الحماية (إنه مطفأ افتراضياً، الموقف المحافظ على الخصوصية) لالتقاط السلسلة المخالفة للفرز. المفتاح غير رجعي الأثر.
حجب تعتقد أنه خاطئ؟ افتح التطابق وعلّمه إيجابية كاذبة (POST /api/guardrail/match/:id/mark-fp، Admin). لإثبات الإصلاح قبل شحنه، حرّر القاعدة وأعد تشغيل العينة في تبويب Test بمحرّر حاجز الحماية — لا استدعاء أعلى، لا حصة.

مثال واحد ملموس

ترسل رداً للدعم يحتوي على SSN عميل. حاجز حمايتك pii-shield لديه تجاوز entity_actions يحجب على ssn:
{
  "type": "pii",
  "stage": "input",
  "action": "mask",
  "entities": ["email", "ssn"],
  "entity_actions": { "ssn": "block" }
}
تعيد البوابة 400 guardrail_blocked. تُظهر تغذية Matches RuleType: pii، Action: block، Stage: input، Detail: pii: ssn. الإصلاح قرار منتج، لا تغيير كود: خفّف التجاوز إلى mask (لا يرى النموذج SSN أبداً، يمضي الاستدعاء)، أو احتفظ بالحجب وجرّد SSN أعلى. انظر حواجز الحماية لمرجع نوع القاعدة وكيان PII الكامل.

3. firewall_blocked — اعثر على الحكم في Events

firewall_blocked يعني أن سياسة جدار حماية رفضت استدعاء أداة. على سطح inbound يظهر كـ 400؛ وعبر بوابة MCP يظهر كـخطأ أداة (firewall deny: <reason>) فيستطيع النموذج التفاعل بدلاً من الانهيار. يحمل metadata الخطأ رمز السبب وعوامل المخاطرة والدرجة. تتبّعها في تغذية Events (GET /api/workspace/firewall/events، Developer+) — السجل الخام وراء كل تقييم. يحمل كل حدث حكماً والسطح الذي رُئي عليه:
الحكمماذا يعني لحجبك
denyقاعدة (أو default_verdict) حجبت الاستدعاء. هذا هو firewall_blocked لديك.
auditمسموح لكن مُسجَّل — متضمناً [shadow] “would deny” إذا كانت السياسة في وضع الظل.
cap_costتجاوز الإنفاق المتراكم للتشغيل سقف السنتات لكل قاعدة؛ يُحل إلى deny.
1

رشّح Events إلى الرفض

رشّح بـ verdict=deny، ثم بـ tool أو run_id أو session_id لعزل الاستدعاء الدقيق. يسمّي الحدث القاعدة المطابقة والسطح — inbound أو response أو mcp أو egress.
2

اقرأ السبب على القاعدة المطابقة

سلسلة السبب (مثل destructive shell command، egress host not allowed) تخبرك ما إذا طابقت القاعدة على اسم الأداة، أو عبارة args_match، أو وجهة egress. يفك مسرد الأحكام و مرجع glob وJSONPath شفرة المطابقة.
3

أكّد بصندوق رمل Test

أعد تشغيل نفس استدعاء الأداة في تبويب Test بجدار الحماية (POST /api/workspace/firewall/test، Developer+) لرؤية الحكم، والقاعدة المطابقة، والسبب — لا شيء يُرسَل، لا شيء يُسجَّل.
رفض cap_cost ليس إطلاق قاعدة خاطئ — اصطدم تشغيل وكيلك بسقف الإنفاق الذي ضبطته. إمّا أن التشغيل يدور في حلقة (افحص تجميع Runs و تغذية الشذوذ بحثاً عن retry_loop) أو أن السقف منخفض حقاً للمهمة. ارفع السقف عمداً، لا تعِد المحاولة فحسب.

4. firewall_approval_pending — إنه مُعلَّق، لا مرفوض

firewall_approval_pending هو 400 الوحيد الذي لا ينبغي أن تعامله كحجب. حكم pending_approval علّق استدعاء الأداة لإنسان؛ يحمل جسم الخطأ معرّف موافقة. الاستدعاء لم يفشل — إنه ينتظر.
  1. يحلّها مراجِع — من وحدة التحكم (Developer+) أو عبر استدعاء webhook مُوقَّع بـ HMAC خاص بك (POST /api/v1/firewall/approvals/:id/callback).
  2. يستطلع وكيلك GET /api/v1/firewall/approvals/:id (رمز البوابة) على المعرّف من الخطأ.
  3. بمجرد الموافقة، أعد تقديم الاستدعاء الأصلي بترويسة X-OrcaRouter-Firewall-Approval أحادية الاستخدام، وتمرّره البوابة تلك المرة الواحدة.
انظر جدار الحماية ← الموافقة البشرية لحلقة HITL الكاملة.

5. ليس حجباً أمنياً؟ استبعد المفتاح أولاً

ليس كل 400 حكم حاجز حماية أو جدار حماية. قبل أن تغوص في التغذيات، استبعد قيود المفتاح — تلك ترفض قبل تشغيل أي سياسة ولا تحمل الرموز الأمنية أعلاه:
قائمة سماح model_limits للمفتاح لا تتضمن النموذج المطلوب. تُرفض طلبات نموذج خارج القائمة مقدّماً. أضِف النموذج إلى المفتاح أو استدعِ واحداً مسموحاً.
للمفتاح قائمة سماح allow_ips وجاء الطلب من عنوان خارجها. أضِف IP / CIDR المستدعي أو استدعِ من شبكة مسموحة.
سقف credit_limit_usd للمفتاح مستنفَد (0 يعني غير محدود). ارفع السقف أو دوّر إلى مفتاح بفسحة.
تتطلب خطّافات البوابة (evaluate، إرسال MCP) مفتاحاً بـ is_firewall_gateway=true. مفتاح ترحيل عادي يحصل على 403. اسكُك مفتاحاً ضمن نطاق بوابة جدار الحماية لتلك المسارات.

6. مسار الفرز في دقيقتين

حجب على نص مطالبة أو استجابة

الرمز هو guardrail_blocked ← افتح Matches، رشّح action=block، اقرأ Stage + Detail. أصلح المحتوى أو القاعدة؛ أثبت ذلك في تبويب Test بحاجز الحماية.

حجب على استدعاء أداة

الرمز هو firewall_blocked ← افتح Events، رشّح verdict=deny، اقرأ السطح + السبب. أصلح الاستدعاء أو القاعدة؛ أثبت ذلك في تبويب Test بجدار الحماية.

الاستدعاء مُعلَّق

الرمز هو firewall_approval_pending ← استطلع معرّف الموافقة وأعد التقديم بترويسة الموافقة. لا شيء للتصحيح.

لا شيء مما سبق

لا رمز أمني ← افحص المفتاح: model_limits، allow_ips، credit_limit_usd، أو 403 لنطاق بوابة مفقود.

7. مراجع ذات صلة

رموز الأخطاء

جدول الرموز الكامل — كل حجب وتعليق ورفض يمكن للبوابة إعادته.

مسرد الأحكام

ماذا يعني كل حكم لجدار الحماية ومتى يُحَل إلى deny.

Glob وJSONPath

فك شفرة tool_name_glob وargs_match اللذين طابقا استدعاءك.

حواجز الحماية مقابل جدار الحماية

أي مستوى أُطلق — فحص نص أم حوكمة إجراء.
للتحكّمات نفسها، انظر حواجز الحماية و جدار الحماية؛ وللتهديدات التي توقفها، ابدأ من نموذج التهديد.