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

تشخیص کد

گاردریل 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 بر اساس چند نشانه رایج است، نه یک کلمه تنها. با این حال تشخیص نشانه‌محور همیشه احتمال خطای مثبت یا منفی دارد؛ گزارش رخدادها را بعد از فعال‌سازی بررسی کنید.

گام بعدی