الانتقال إلى المحتوى الرئيسي
عندما يرفض حاجز حماية استدعاءً، تجيب البوابة تطبيقك بـ HTTP 400 ورمز الخطأ guardrail_blocked. هذه الصفحة هي المرجع المرجعي لذلك الخطأ الواحد: كيف يبدو الجسم، ولماذا يتصرف كما يتصرف، وكيف تتعامل معه في كود العميل. لمحرك السياسة وراءه، انظر نظرة عامة على حواجز الحماية و المرجع الكامل.

1. متى ترى guardrail_blocked

حاجز الحماية قائمة مرتبة من القواعد تشغّلها البوابة على مدخلات الطلب ومخرجات النموذج. عندما تُطلق قاعدة إجراؤها block، يُرفض الاستدعاء — لا يُستدعى النموذج الأعلى أبداً (مرحلة المدخلات) أو تُحجب إجابته (مرحلة المخرجات). يستلم العميل 400 يحمل guardrail_blocked. لا ينتج أي إجراء آخر هذا الخطأ. mask ينقّح المطابقة ويمرر النص المُنقّى، وflag يسجّل مطابقة دون تغيير حركة المرور، وإجراءا تشكيل المطالبة (annotate، spotlight) يدعان الاستدعاء يستمر مع إضافة ملاحظة أو تغليف نص غير موثوق. من الإجراءات الخمسة، block وحده يرفض. انظر الإجراءات.
guardrail_blocked هو رفض محتوى (نص داخل، نص خارج). رفض سياسة الأدوات الرفيق هو firewall_blocked من جدار الحماية للوكيل — خطأ مختلف بشكل مختلف. انظر حواجز الحماية مقابل جدار الحماية.

2. جسم الاستجابة

يُعاد الحجب في مظروف خطأ البوابة القياسي بشكل OpenAI. على نقطة نهاية بشكل OpenAI (/v1/chat/completions، /v1/responses):
{
  "error": {
    "message": "request blocked by guardrail \"pii-shield\": pii(ssn)",
    "type": "orcarouter_api_error",
    "param": "",
    "code": "guardrail_blocked"
  }
}
الحقول التي تعتمد عليها:
المعرّف الآلي المستقر. تفرّع على هذا، لا على سلسلة الرسالة. إنه نفس القيمة على كل نقطة نهاية ولا يُترجَم أبداً.
قابل للقراءة البشرية. الصيغة هي request blocked by guardrail "<name>": <detail>، حيث يلخّص <detail> نوع/أنواع القاعدة التي أُطلقت كـ <type>(<rule-detail>) — مثلاً pii(pii: ssn) أو keyword(matched 1 keyword(s)). حجب مرحلة المخرجات يقرأ response blocked by guardrail "<name>": <detail>، فالفعل يخبرك أي مرحلة رفضت الاستدعاء. تمر الرسالة عبر إخفاء المعلومات الحساسة قبل أن تغادر البوابة، فلا تتوقع السلسلة الفرعية المطابقة الخام هنا.
نوع خطأ البوابة العام على نقاط النهاية بشكل OpenAI. الإشارة المميِّزة هي code، لا type.
على سطح Anthropic الأصلي (/v1/messages) يكون المظروف بشكل Claude — {"error": {"type": ..., "message": ...}} — ويظهر guardrail_blocked في حقل type، بحيث يمكن لـ SDK Claude أصلي تمييز رفض سياسة عن عطل بوابة عام.
تريد الحكم الدقيق قبل أن تشحن قاعدة؟ علامة التبويب Test في وحدة التحكم تقيّم السياسة الحالية على نص عينة بدون استدعاء للأعلى وبدون حصة — انظر الاختبار والتقييم.

3. لماذا guardrail_blocked لا يكلّف أي حصة

الطلب المحجوب مجاني — لا يخصم أبداً من رصيد ائتمانك.
المرحلةمتى يُطلق الحجبأثر الحصة
inputقبل الاستدعاء الأعلى، قبل القياسلا يُقاس شيء
outputبعد أن يجيب النموذج، قبل أن تعود الإجابةتُردّ الحصة المستهلكة مسبقاً
فحجب المدخلات لا يُحاسَب بشيء لأن القياس لم يحدث بعد، وحجب المخرجات يعكس الحجز الذي وضعته البوابة قبل إعادة التوجيه. في الحالتين يدفع المستدعي ثمن الحجب بـ 400، لا بائتمانات. انظر مرحلة المدخلات و مرحلة المخرجات.

4. لماذا guardrail_blocked يتخطى إعادة المحاولة

الخطأ موسوم بـ skip-retry. توجيه البوابة نفسه لن يحوّل هذا الطلب إلى قناة أخرى، لأن الحجب خاصية من محتواك وسياستك — إعادة تشغيل المطالبة المطابقة ستحجب مجدداً فحسب على القناة التالية وتهدر المحاولة.
لا تضع guardrail_blocked في حلقة إعادة محاولة عميلك أيضاً. إنه حتمي: نفس المطالبة مقابل نفس السياسة تحجب في كل مرة. إعادة المحاولة تحرق كموناً لنتيجة لا يمكن أن تتغير. عاملها كرفض نهائي — أصلح المدخلات، أو أصلح السياسة.

5. التعامل معه في كود العميل

تفرّع على حقل code وأبرز رسالة مفيدة للمستخدم النهائي بدلاً من إعادة المحاولة.
import httpx

resp = httpx.post(
    "https://api.orcarouter.ai/v1/chat/completions",
    headers={"Authorization": "Bearer sk-orca-..."},
    json={
        "model": "openai/gpt-4o-mini",
        "messages": [{"role": "user", "content": "My SSN is 123-45-6789"}],
    },
)

if resp.status_code == 400:
    err = resp.json().get("error", {})
    if err.get("code") == "guardrail_blocked":
        # Terminal — do not retry. Tell the user what to change.
        raise ValueError(f"Blocked by policy: {err['message']}")

resp.raise_for_status()
مفتاح sk-orca-... هنا مفتاح ترحيل — يحمل حركة /v1/* فقط. لا تحرّر به حاجز حماية أبداً؛ تأليف وربط السياسة إجراء وحدة تحكم / API إداري على جلستك، وإنشاء أو تحرير حاجز حماية يتطلب دور Developer+.

6. تأكيد حجب وضبطه

كل قاعدة تُطلق — بما فيها الحجب — تهبط في تغذية Matches لمساحة العمل بنوعها وإجراءها ومرحلتها وسلسلة تفصيل. هناك تؤكد أي قاعدة رفضت استدعاءً معيناً وتفرز الإيجابيات الكاذبة.

تغذية المطابقات

انظر كل block وmask وflag بنوعها وإجراءها ومرحلتها. تظهر السلسلة الفرعية المطابقة فقط عند تفعيل Log raw content.

التسجيل والخصوصية

المحتوى الخام مُطفأ افتراضياً — الموقف المحافظ على الخصوصية. فعّله لكل حاجز حماية عندما تحتاج السلسلة الفرعية للفرز.

ضبط الإيجابيات الكاذبة

الإيجابية الكاذبة إشارة ضبط، لا سبباً لتعطيل القاعدة. وسمها وضيّق النمط.

الإصدارات

غيّرت السياسة وتريد التراجع عنها؟ قارن أي إصدارين بـ diff وتراجع كإصدار جديد — لا يُعدَّل التاريخ أبداً.
على الاستجابة المبثوثة، ما زال حجب المخرجات ينطبق: يقطع الماسح التدفق في منتصفه قبل أن يصل أي محتوى محجوب إلى العميل. إخفاء المخرجات ينطبق أيضاً ضمن النطاق على التدفقات — يعيد الماسح كتابة المطابقة في المخزن المتدحرج قبل إصدار البادئة الآمنة. انظر تغطية البث و القواعد الآمنة للبث.

7. ذات صلة