تشخیص کد
گاردریل contains_code وجود محتوای شبیه کد را در متن تشخیص میدهد. با این نوع میتوانید کد را در پاسخ مدل الزامی کنید، یا برعکس، جلوی تولید SQL، اسکریپت یا قطعهکد را در مسیرهایی بگیرید که باید فقط متن توضیحی برگردانند.
این گاردریل برای کنترل سریع رفتار مدل در مسیر درگاه است. تشخیص کد بر اساس نشانههای زبانی انجام میشود و جایگزین sandbox، تحلیل امنیتی کد یا اجرای تست نیست.
چه زمانی استفاده کنید؟
از contains_code برای این کارها استفاده کنید:
- پاسخ آموزشی باید حتماً نمونه کد داشته باشد.
- پاسخ نهایی محصول نباید SQL، اسکریپت shell یا کد اجرایی تولید کند.
- بررسی فقط باید روی چند زبان مشخص، مثل
sql،pythonیاtypescriptانجام شود.
اگر مسئله شما عبارتهای ثابت یا الگوهای دقیق است، عبارتهای مسدود یا Regex انتخاب دقیقتری است.
رفتار اجرایی
این نوع فقط از «اعتبارسنجی» (operation: "validate") پشتیبانی میکند.
«قاعده کد» یکی از حالتهای زیر است:
| عنوان UI | مقدار API | شرط قبولی |
|---|---|---|
| باید کد داشته باشد | must_contain | متن باید کد تشخیصپذیر داشته باشد. مقدار پیشفرض است. |
| نباید کد داشته باشد | must_not_contain | متن نباید کد تشخیصپذیر داشته باشد. |
گدارAI ابتدا fence سهتایی backtick را بررسی میکند. سپس برای زبانهای شناختهشده، نشانههایی مثل select ... from، def، import، function، const، func، package، curl و shebang را جستوجو میکند.
تنظیمات
| عنوان UI | مقدار API | توضیح |
|---|---|---|
| زبانهای کد | languages | هر خط یک زبان است. اگر خالی بماند، sql، python، typescript، javascript، go و shell بررسی میشوند. |
| قاعده کد | mode | یکی از مقدارهای must_contain یا must_not_contain. |
برای مسیرهای پشتیبانی مشتری، معمولاً must_not_contain همراه با زبانهای پرریسک مثل sql و shell شروع خوبی است. بعد از مشاهده گزارش رخدادها، فهرست زبانها را محدودتر یا گستردهتر کنید.
نمونه تعریف برای منع SQL
{
"slug": "no-sql-output",
"name": "No SQL in output",
"type": "contains_code",
"operation": "validate",
"enforcement": "enforce",
"enabled": true,
"config": {
"languages": ["sql"],
"mode": "must_not_contain"
}
}
نمونه استفاده
x-godarai-guardrails: {"llm_output_guardrails":["guardrails/no-sql-output"]}
اگر پاسخ مدل شامل عبارت زیر باشد، گاردریل آن را کد SQL تشخیص میدهد:
select * from users
گاردریل خروجی با پاسخ جریانی پشتیبانی نمیشود. برای کنترل خروجی با contains_code، درخواست را غیرجریانی ارسال کنید.
بررسی نتیجه
اگر شرط برقرار نباشد، علت Code content validation failed ثبت میشود.
| شیوه اعمال | رفتار |
|---|---|
| عدم عبور و لاگ | درخواست یا پاسخ متوقف میشود. |
| عبور همراه با نشانهگذاری | وضعیت flagged ثبت میشود و مسیر ادامه پیدا میکند. |
محدودیتها
- این گاردریل تجزیهگر یا کامپایلر رسمی زبان نیست.
- واژههای شبیه کد در متن عادی ممکن است تطابق اشتباه بسازند.
- کدی که با قالب غیرمعمول نوشته شده باشد، ممکن است تشخیص داده نشود.
- برای زبان ناشناخته، فقط fence دارای برچسب همان زبان قابل تشخیص است.
پرسشهای پرتکرار
آیا این گاردریل جلوی اجرای کد خطرناک را میگیرد؟
خیر. این گاردریل فقط متن را بررسی میکند. اگر محصول شما کد تولیدشده را اجرا میکند، اجرای کد باید در محیط ایزوله، با مجوز محدود و اعتبارسنجی مستقل انجام شود.
اگر فقط کلمه select در متن باشد، رد میشود؟
تشخیص SQL بر اساس چند نشانه رایج است، نه یک کلمه تنها. با این حال تشخیص نشانهمحور همیشه احتمال خطای مثبت یا منفی دارد؛ گزارش رخدادها را بعد از فعالسازی بررسی کنید.
گام بعدی
- برای کنترل خروجی JSON، JSON Schema یا کلیدهای JSON را ببینید.
- برای کنترل عبارتهای ثابت، عبارتهای مسدود را بخوانید.