پرش به مطلب اصلی

گاردریل‌ها در گدارAI

گاردریل (Guardrail) قاعده‌ای است که متن ورودی یا خروجی مدل را پیش از ادامه مسیر بررسی یا اصلاح می‌کند. با گاردریل‌ها می‌توانید جلوی ارسال داده حساس به مدل را بگیرید، پاسخ پرریسک را پیش از نمایش کنترل کنید، یا متن را به شکل امن‌تری به مسیر بعدی بفرستید.

گاردریل‌ها در مسیر Chat Completions اجرا می‌شوند و از سمت درخواست با سرآیند x-godarai-guardrails انتخاب می‌شوند. نتیجه هر اجرا در guardrail_checks و لاگ درخواست‌ها قابل پیگیری است.

اطلاع

Moderation و گاردریل‌ها نقش یکسانی ندارند. Moderation یک API مدل برای ارزیابی ایمنی محتواست؛ گاردریل‌ها لایه اعمال سیاست در گدارAI هستند و می‌توانند مسیر را متوقف کنند، نشانه‌گذاری کنند یا متن را تغییر دهند.

پیش‌نیازها

  • یک توکن معتبر گدارAI داشته باشید.
  • درخواست را به مسیر POST /v1/chat/completions بفرستید.
  • برای گاردریل اختصاصی، گاردریل باید در فضای کاری شما ساخته و فعال شده باشد.
  • شناسه فنی گاردریل را با قالب guardrails/<slug> بدانید.

شروع سریع

نمونه زیر گاردریل آماده guardrails/pii-redaction را روی ورودی مدل اجرا می‌کند تا داده شخصی پایه پیش از ارسال به مدل ماسک شود.

import requests

response = requests.post(
"https://YOUR_WORKSPACE.godarai.ir/v1/chat/completions",
headers={
"Authorization": "Bearer YOUR_GODARAI_TOKEN",
"Content-Type": "application/json",
"x-godarai-guardrails": '{"llm_input_guardrails":["guardrails/pii-redaction"]}',
},
json={
"model": "openai:default:gpt-4o-mini",
"messages": [
{"role": "user", "content": "ایمیل من customer@company.ir است. لطفاً متن را خلاصه کن."}
],
},
timeout=60,
)

response.raise_for_status()
print(response.json())

اگر گاردریل تطابق پیدا کند، متن ورودی پیش از ارسال به ارائه‌دهنده مدل تغییر می‌کند. در لاگ درخواست‌ها، وضعیت اجرای گاردریل را با mutated می‌بینید.

نکته

برای اولین آزمایش، گاردریل را روی ورودی و با محدوده last اجرا کنید. این کار فقط آخرین پیام کاربر را بررسی می‌کند و اثر سیاست را ساده‌تر می‌توانید در لاگ درخواست‌ها ببینید.

گاردریل ورودی و خروجی

گاردریل‌ها در دو نقطه اجرا می‌شوند:

محل اجرازمان اجراکلید انتخاب
گاردریل ورودیپیش از ارسال درخواست به ارائه‌دهنده مدلllm_input_guardrails یا input_guardrails
گاردریل خروجیپس از دریافت پاسخ کامل و پیش از تحویل به کاربرllm_output_guardrails یا output_guardrails

گاردریل ورودی برای جلوگیری از نشت داده حساس، کنترل عبارت‌های پرریسک و اصلاح پرامپت مناسب است. گاردریل خروجی برای کنترل پاسخ مدل، جلوگیری از نمایش داده حساس و اعتبارسنجی خروجی کاربرد دارد.

هشدار

گاردریل خروجی به پاسخ کامل نیاز دارد. اگر درخواست شما stream: true داشته باشد، استفاده هم‌زمان از llm_output_guardrails با خطای 400 رد می‌شود.

نوع اقدام

رفتار اصلی هر گاردریل با «نوع اقدام» مشخص می‌شود:

عنوان UIمقدار APIرفتار
اعتبارسنجیvalidateمتن را بررسی می‌کند. اگر تخطی پیدا شود، بسته به «شیوه اعمال» مسیر ادامه پیدا می‌کند یا متوقف می‌شود.
اصلاح محتواmutateمتن را تغییر می‌دهد؛ برای نمونه، توکن یا ایمیل را با متن جایگزین ماسک می‌کند.

همه نوع‌های گاردریل هر دو نوع اقدام را پشتیبانی نمی‌کنند. در جدول نوع‌ها، مقدار مجاز هر گاردریل آمده است.

شیوه اعمال

«شیوه اعمال» تعیین می‌کند نتیجه گاردریل چه اثری روی مسیر درخواست یا پاسخ داشته باشد:

عنوان UIمقدار APIرفتار
عبور همراه با نشانه‌گذاریauditتخطی را با وضعیت flagged ثبت می‌کند، اما مسیر را متوقف نمی‌کند.
عدم عبور و لاگenforceتخطی را متوقف می‌کند و خطا برمی‌گرداند. اگر اجرای خود گاردریل خطا بدهد، مسیر هم متوقف می‌شود.
عدم عبور - بدون لاگenforce_ignore_errorتخطی را متوقف می‌کند، اما خطای اجرای خود گاردریل مانند enforce متوقف‌کننده نیست.

برای گاردریل‌هایی که «اصلاح محتوا» انجام می‌دهند، اگر متن تغییر کند، وضعیت mutated ثبت می‌شود و مسیر با متن اصلاح‌شده ادامه پیدا می‌کند.

نوع‌های پشتیبانی‌شده

در گدارAI این نوع‌های گاردریل قابل ساخت و استفاده هستند:

نوعمقدار APIنوع اقدام قابل استفادهراهنما
عبارت‌های مسدودkeyword_blocklistفقط validateعبارت‌های مسدود
Regexregexvalidate یا mutateRegex
تشخیص Secretsecrets_detectionvalidate یا mutateتشخیص Secret
PII پایهbasic_piivalidate یا mutatePII پایه
جایگزینی با Regexregex_replaceفقط mutateجایگزینی با Regex
اعتبارسنجی JWTjwt_validationفقط validateاعتبارسنجی JWT
تعداد جملهsentence_countفقط validateتعداد جمله
تعداد کلمهword_countفقط validateتعداد کلمه
تعداد کاراکترcharacter_countفقط validateتعداد کاراکتر
JSON Schemajson_schemaفقط validateJSON Schema
کلیدهای JSONjson_keysفقط validateکلیدهای JSON
تشخیص کدcontains_codeفقط validateتشخیص کد
خالی نبودنnot_nullفقط validateخالی نبودن
درون‌خطی‌سازی تصویرinline_image_urlsفقط mutateدرون‌خطی‌سازی تصویر

برای جزئیات محل اجرا، پیام چندبخشی و پاسخ جریانی، قابلیت‌ها و محدوده پشتیبانی گاردریل‌ها را ببینید.

تعریف گاردریل اختصاصی

هر گاردریل اختصاصی با چند فیلد مشترک ساخته می‌شود. نمونه زیر داده شخصی پایه را پیش از ارسال پرامپت به مدل ماسک می‌کند:

{
"slug": "mask-contact",
"name": "ماسک‌کردن اطلاعات تماس",
"description": "ایمیل و شماره تماس را پیش از ارسال به مدل ماسک می‌کند.",
"type": "basic_pii",
"operation": "mutate",
"enforcement": "enforce",
"enabled": true,
"config": {
"redaction_text": "[***]"
}
}

فیلدهای مشترک:

فیلدتوضیح
slugشناسه کوتاه گاردریل. شناسه فنی از همین مقدار ساخته می‌شود.
nameنام خوانا برای نمایش و بازبینی تیمی.
descriptionتوضیح کوتاه درباره هدف گاردریل.
typeنوع گاردریل؛ مثل basic_pii یا keyword_blocklist.
operationنوع اقدام؛ یکی از validate یا mutate.
enforcementشیوه اعمال؛ یکی از audit، enforce یا enforce_ignore_error.
enabledفقط گاردریل فعال در زمان درخواست قابل استفاده است.
configتنظیمات اختصاصی همان نوع گاردریل.

شناسه‌ای که در درخواست می‌فرستید از slug ساخته می‌شود:

guardrails/mask-contact

انتخاب گاردریل در درخواست

برای اجرای گاردریل روی ورودی مدل:

x-godarai-guardrails: {"llm_input_guardrails":["guardrails/mask-contact"]}

برای اجرای گاردریل روی خروجی مدل:

x-godarai-guardrails: {"llm_output_guardrails":["guardrails/no-secrets"]}

برای سازگاری، کلیدهای input_guardrails و output_guardrails هم پذیرفته می‌شوند. اگر مقدار سرآیند را به شکل رشته ساده بفرستید، گدارAI آن را فهرست گاردریل‌های ورودی در نظر می‌گیرد:

x-godarai-guardrails: guardrails/pii-redaction, guardrails/secrets-detection

محدوده اجرای ورودی

سرآیند x-godarai-guardrails-scope فقط روی گاردریل‌های ورودی اثر دارد:

مقداررفتار
allهمه پیام‌های متنی انتخاب‌شده بررسی می‌شوند. مقدار پیش‌فرض است.
lastفقط آخرین پیام کاربر با نقش user بررسی می‌شود.

نمونه:

x-godarai-guardrails-scope: last

در پیام‌های چندبخشی، فقط بخش‌هایی با type: "text" بررسی یا اصلاح می‌شوند.

گاردریل‌های آماده

چند گاردریل آماده بدون ساخت گاردریل اختصاصی قابل استفاده‌اند:

شناسه فنیرفتار پیش‌فرض
guardrails/keyword-blocklistعبارت‌هایی مثل ignore previous instructions، jailbreak، rm -rf و drop table را مسدود می‌کند.
guardrails/regexالگوهای رایج secret، token و password را با [REDACTED] ماسک می‌کند.
guardrails/secrets-detectionتوکن‌ها، JWT، کلید خصوصی و چند قالب مقدار محرمانه رایج را ماسک می‌کند.
guardrails/basic-piiداده شخصی پایه را با [REDACTED] ماسک می‌کند.
guardrails/pii-redactionنام جایگزین برای guardrails/basic-pii.
guardrails/pii-detectionنام جایگزین برای guardrails/basic-pii.
نکته

برای محیط عملیاتی، معمولاً گاردریل اختصاصی بهتر از گاردریل آماده است؛ چون نام، هدف، تنظیمات، وضعیت فعال‌بودن و مالکیت آن برای تیم شما قابل بازبینی است.

پاسخ خطا و نتیجه اجرا

اگر گاردریل مسیر را متوقف کند، پاسخ با قالبی شبیه نمونه زیر برمی‌گردد:

{
"error": {
"message": "Request blocked by GodarAI guardrail",
"type": "guardrail_checks_failed",
"code": "guardrail_blocked"
},
"guardrail_checks": {
"llm_input_guardrails": [
{
"selector": "guardrails/no-injection",
"status": "blocked",
"operation": "validate",
"enforcement": "enforce",
"reason": "Keyword blocklist matched",
"latency_ms": 0
}
]
}
}

برای گاردریل خروجی، مقدار message برابر Response blocked by GodarAI guardrail است. نام انگلیسی محصول در این پیام خطا بخشی از قرارداد فنی پاسخ است و تغییر نمی‌کند.

وضعیت‌های رایج در guardrail_checks:

وضعیتمعنی
passedگاردریل اجرا شد و تخطی یا تغییر پیدا نشد.
flaggedتخطی در حالت audit ثبت شد، اما مسیر متوقف نشد.
blockedگاردریل مسیر را متوقف کرد.
mutatedمتن تغییر کرد و مسیر با متن جدید ادامه پیدا کرد.
errorاجرای گاردریل یا انتخاب شناسه فنی با خطا روبه‌رو شد.

مشاهده‌پذیری

نتیجه هر بررسی در ردیابی درخواست و لاگ درخواست‌ها ثبت می‌شود. این داده‌ها شامل شناسه فنی، وضعیت، عملیات، شیوه اعمال، زمان اجرا، تغییر متن و علت هستند.

برای تحلیل عملیاتی، نتیجه گاردریل‌ها را کنار لاگ درخواست‌ها، ردیابی درخواست‌ها و OpenTelemetry بررسی کنید.

رفع مشکل‌های رایج

درخواست با خطای 400 رد می‌شود

اگر stream: true و llm_output_guardrails را هم‌زمان فرستاده‌اید، پاسخ جریانی را غیرفعال کنید یا گاردریل خروجی را حذف کنید.

پیام guardrails scope must be all or last می‌بینید

مقدار x-godarai-guardrails-scope فقط می‌تواند all یا last باشد. اگر این سرآیند را نفرستید، مقدار پیش‌فرض all است.

وضعیت error با علت Unknown guardrail selector ثبت می‌شود

شناسه فنی را بررسی کنید. مقدار باید با قالب guardrails/<slug> باشد و برای گاردریل اختصاصی، همان slug باید در فضای کاری شما فعال باشد.

از کجا شروع کنم؟

  1. برای عبارت‌های ثابت و شناخته‌شده، عبارت‌های مسدود را بسازید.
  2. برای الگوهای داخلی سازمان، Regex یا جایگزینی با Regex را انتخاب کنید.
  3. برای توکن و کلید خصوصی، تشخیص Secret را فعال کنید.
  4. برای ایمیل و شماره‌های رایج، PII پایه را ببینید.
  5. برای شرط امنیتی مبتنی بر توکن، اعتبارسنجی JWT را بخوانید.
  6. برای ساختار خروجی، JSON Schema و کلیدهای JSON را مقایسه کنید.