پرش به محتوای اصلی
پرش به محتوای مقاله

«بسته‌شدن در صورت خطا»؛ راهکار جدید برای تثبیت ساختار پاسخ‌های AI

·۲۲ شهریور ۱۴۰۵۸ دقیقه مطالعه
راهنما
ساخت رسید طرح‌واره برای رابط خط فرمان بدون مدل
ساخت رسید طرح‌واره برای رابط خط فرمان بدون مدل
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

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

تصور کنید یک ابزار کوچک کدنویسی با هوش مصنوعی (tiny-ai-cli)، تنها به دلیل تغییر ناگهانی در فرمت خروجی یک مدل رایگان، کل مخزن کد عملیاتی شما را در چند ثانیه نابود کند. در ۱۳ سپتامبر ۲۰۲۶، چارچوبی فنی برای توقف این «لغزش طرح‌واره» (Schema Drift) پیشنهاد شد که از یک گیت سخت‌گیرانه و مبتنی بر شواهد به نام «رسید طرح‌واره» (Schema Receipt) استفاده می‌کند. نویسنده استدلال می‌کند که پیش از آنکه یک مدل رایگان از راه دور اجازه دسترسی به فایل‌ها را داشته باشد، شما به یک رسید نیاز دارید که بتوانید آن را grep کنید، نه یک «تأیید حسی» یا Vibe Check.

بسیاری از توسعه‌دهندگان با پاسخ‌های هوش مصنوعی مانند یک «تأیید حسی» برخورد می‌کنند و امیدوارند فرمت JSON مدل ثابت بماند. اما مدل‌های رایگان، توابعی هستند که دچار لغزش می‌شوند، نه همکارانی قابل اعتماد. طبق گزارش نویسنده این چارچوب، وقتی ساختار مدل یک‌شبه تغییر می‌کند، یک تجزیه‌کننده (Parser) تنبل ممکن است همچنان وضعیت «موفق» را گزارش کند، در حالی که داده‌های فاسد را روی دیسک شما می‌نویسد. این وضعیت سناریویی ایجاد می‌کند که در آن شما دیگر یک محیط عملیاتی (Production) ندارید، بلکه فقط «امید» و یک «نوار پیشرفت» دارید. اگر فایلی گم شود یا فاسد گردد، شما با محیط عملیاتی روبرو نیستید، بلکه با یک فاجعه مواجهید. این چالش دقیقاً همان نقطه‌ای است که بسیاری از پروژه‌ها در آن شکست می‌خورند؛ موضوعی که در تحلیل ما پیرامون شکاف ارزیابی و موانع تبدیل دموهای LLM به محصولات تجاری به تفصیل بررسی شده است.

برای حل این مشکل، این چارچوب یک «کارت آمادگی تولید» معرفی می‌کند که اولویت را به ترمزها می‌دهد تا پرامپت‌ها. هدف این است که ابتدا شکل پاسخ مدل تثبیت شود تا اطمینان حاصل شود هیچ فایلی لمس نمی‌شود مگر اینکه ساختار پاسخ دقیقاً مطابق قرارداد باشد. این فرآیند به گونه‌ای طراحی شده است که یک عملیات صفر-دلاری و ۴۵ دقیقه‌ای باشد که با هوش مصنوعی زاینده (Generative AI) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب می‌دهد — نه به عنوان یک API پایدار، بلکه به عنوان یک نقطه اتصال متغیر و ناپایدار برخورد کند. این یک چک‌لیست برای لانچ، یک سیستم کاناری دو-میزبانه یا یک مقاله نظری درباره ایجنت‌ها نیست؛ بلکه یک گیت (دروازه) است.

معماری سه-فایلی

این سیستم برای جلوگیری از پیچیدگی بی مورد و «تزیین» منطق، تنها بر یک سطح حمله حداقلی متکی است. نویسنده توصیه می‌کند اگر فایل کمکی چهارمی ظاهر شد، فوراً آن را حذف کنید. معماری سیستم تنها از سه فایل تشکیل شده است:

  • schema_receipt.json: قراردادی مورد اعتماد که شکل پاسخ مورد نیاز را تعریف می‌کند. این فایل موفقیت را تثبیت می‌کند و ثبت می‌کند که مقدار ok باید true، مقدار echo باید "canary-alpha" و schema_version باید "1" باشد.
  • check_receipt.py: یک بررسی‌کننده با منطق «بسته‌شدن در صورت خطا» (Fail-closed) که پاسخ‌های زنده را با قرارداد می‌سنجد. این فایل از یک تابع evaluate() به عنوان مصنوع واقعی برای اطمینان از تطابق بدنه پاسخ با قرارداد استفاده می‌کند.
  • fixtures/stale_schema.json: یک طرح‌واره عمداً اشتباه که برای تست این موضوع استفاده می‌شود که آیا گیت واقعاً دروغ‌ها را تشخیص می‌دهد یا خیر. این همان «دروغی است که باید شکار کنید».

تعریف گیت بسته‌شدن در صورت خطا

بر اساس مستندات این چارچوب، سیستم باید در صورت وقوع هر یک از محرک‌های زیر، اجرای برنامه را به‌طور کامل متوقف کند (Fail Closed)، زیرا لغزش طرح‌واره یک «حس» نیست، بلکه یک کلید گم‌شده است:

  • شکست قرارداد: نبود یک کلید ضروری، عدم تطابق دقیق نسخه طرح‌واره با عدد ۱، یا اشتباه بودن فیلد echo (عدم تطابق با "canary-alpha").
  • شکست بودجه: تأخیر (Latency) بیش از ۸۰۰۰ میلی‌ثانیه یا حجم بدنه پاسخ بیش از ۴۰۹۶ بایت.
  • شکست سازگاری: وقوع سه عدم تطابق متوالی در پاسخ‌های زنده.

برای جلوگیری از ایجاد «گیت‌های نرم»، از جدول سیگنال‌های سخت‌گیرانه زیر استفاده می‌شود:

سیگنال گیت اقدام
نبود کلید ضروری قرارداد خروج با کد ۱، عدم اجرا
نسخه طرح‌واره $\neq$ ۱ قرارداد خروج با کد ۱، عدم اجرا
تأخیر $> ۸۰۰۰$ میلی‌ثانیه بودجه خروج با کد ۱، عدم اجرا
حجم $> ۴۰۹۶$ بایت بودجه خروج با کد ۱، عدم اجرا
سه عدم تطابق متوالی رهاسازی حذف مجوز اجرای CLI (chmod -x)
نبود فایل رسید شواهد تلقی به عنوان شکست

به نقل از راهنمای این متد، هیچ گزینه‌ای برای «تلاش مجدد با پرامپت بهتر» وجود ندارد. چنین تلاش‌هایی اتلاف وقت در بازه زمانی ۴۵ دقیقه‌ای و نشانه‌ای از این است که مدل از راه دور برای محیط تولید آماده نیست.

بسته شواهد

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

۱. برچسب زمانی UTC: زمان دقیق ارسال درخواست.
۲. هش SHA-256: هشی از بدنه خام برای علامت‌گذاری آخرین وضعیت سالم.
۳. طول بایت‌ها: اندازه پاسخ دریافتی.
۴. تأخیر: اندازه‌گیری شده بر حسب میلی‌ثانیه.
۵. وضعیت خروج بررسی‌کننده: اینکه اجرا موفق بوده یا شکست خورده است.
۶. وضعیت نوشتن: تأیید اینکه مقدار writes_allowed همچنان false مانده است.

پیاده‌سازی Wrapper

برای اینکه هوش مصنوعی نتواند بررسی را دور بزند، از یک Wrapper در Bash استفاده می‌شود. این Wrapper کنترل تولید را بر عهده دارد و با دستور set -euo pipefail تضمین می‌کند که هر شکست در هر جای خط لوله، کل فرآیند را متوقف کند.

#!/usr/bin/env bash
set -euo pipefail
: "${MODEL_ENDPOINT:?set MODEL_ENDPOINT}"
python3 check_receipt.py --live --endpoint "$MODEL_ENDPOINT"
exec ./tiny-ai-cli "$@"

اگر بررسی‌کننده پایتون کد خروجی غیرصفر برگرداند، پرچم set -e فرآیند را پیش از آنکه فایل باینری CLI بتواند اجرا شود، می‌کشد. خودِ فایل باینری در حالت chmod -x (غیرقابل اجرا) نگه داشته می‌شود تا تضمین شود که Wrapper تنها نقطه ورود است. نویسنده هشدار می‌دهد: «آیا اجازه می‌دهید یک مدل آزمایشی (Canary) در مخزن شما دستور mkdir اجرا کند؟ من نمی‌دهم.» کاناری‌ای که می‌نویسد، در واقع همین حالا وارد محیط تولید شده است.

تست با «دروغ»

سیستم با استفاده از یک Fixture قدیمی اعتبارسنجی می‌شود. این Fixture تله‌ای است که برای شکار تجزیه‌کننده‌های تنبل طراحی شده است. برای مثال، فایل fixtures/stale_schema.json ممکن است به این شکل باشد:

{
  "ok": true,
  "echo": "canary-alpha",
  "schema_version": "2",
  "extra_field": "i-look-helpful"
}

در این مورد، مقدار ok درست است و echo مطابقت دارد، اما schema_version به ۲ تغییر کرده است. فیلد extra_field صرفاً یک «عطر» برای پرت کردن حواس توسعه‌دهنده است. یک گیت رسید طرح‌واره باید در اینجا خطا دهد. اگر دستور Fixture با کد خروج صفر پایان یابد، توسعه‌دهنده به جای «گیت»، یک «پادری خوش‌آمدگویی» ساخته است و باید همه چیز را از ابتدا شروع کند.

یکپارچگی با میزبان‌های رایگان

در حالی که این چارچوب مستقل از مدل است، نویسنده پیشنهاد می‌کند از MonkeyCode به عنوان یک جعبه کاناری صفر-دلاری برای تست استفاده شود. MonkeyCode یک پروژه متن‌باز است که دسترسی رایگان به مدل‌ها و گزینه سرور رایگان ارائه می‌دهد. هدف در اینجا نمره دادن به فروشنده نیست، بلکه نمره دادن به بدنه پاسخ است. اگر یک میزبان نمی‌تواند JSON پایداری برگرداند، CLI هرگز نباید به سمت درخت فایل‌های واقعی نشانه رود.

این رویکرد تمرکز را از «مهارت مدل» — که موضوع بحث‌های بی‌پایان است — به «لغزش طرح‌واره» منتقل می‌کند که یک شکست فنی قابل اندازه‌گیری است. بحث‌های مربوط به مهارت، یک مخزن کد کثیف را بازسازی نمی‌کنند. یک رسید معتبر ثابت نمی‌کند مدل باهوش است یا در برابر Prompt Injection ایمن است؛ بلکه فقط ثابت می‌کند شکل داده‌ها پیش‌بینی‌پذیر است. این رویکرد در واقع پاسخی به نیاز برای جایگزینی کدهای رابط شکننده است، مشابه آنچه در تجربه Omnifys برای جایگزینی Glue Code با عامل‌های ماژولار مشاهده شد.

چه کسانی نباید از این متد استفاده کنند؟

این چارچوب ترمزِ سازندگان تک‌نفره است و برای هر سناریویی مناسب نیست. در موارد زیر از آن استفاده نکنید:

  • وقتی داده‌های ارسالی حاوی اسرار (Secrets) هستند (میزبان‌های رایگان گاوصندوق نیستند).
  • وقتی به یک SLA (توافق‌نامه سطح خدمات) رسمی نیاز دارید (لایه‌های رایگان هیچ تضمینی برای Uptime ندارند).
  • وقتی اولین فراخوانی باید فایل‌ها را بنویسد (شما به Sandbox نیاز دارید، نه رسید).
  • وقتی یک کمیته روی پرامپت‌ها تصمیم می‌گیرد.
  • وقتی وسوسه می‌شوید نسخه طرح‌واره (schema_version) را فقط برای ساکت کردن خطاها بالا ببرید، زیرا این کار لغزش را به سیاست تبدیل می‌کند.

بازگشت و رهاسازی

برای سازندگان تک‌نفره قانون ساده است: اگر کارت و CLI اختلاف داشتند، به کارت اعتماد کنید. بازگشت (Rollback) یک جلسه نیست، بلکه یک آیین حذف است. فرآیند به این صورت است:
۱. rm -rf receipts/ (حذف پوشه رسیدها)
۲. chmod -x ./tiny-ai-cli (حذف مجوز اجرای CLI)
۳. unset MODEL_ENDPOINT (پاک کردن متغیر محیطی)

اگر سه عدم تطابق متوالی در پاسخ‌های زنده رخ داد، کل سیستم را رها کنید. در یک درخت فایل کثیف، دیباگ نکنید. ۴۵ دقیقه سقف مطلق است؛ اگر بعد از آن هنوز در حال تنظیم JSON هستید، مدل از راه دور آماده نیست. در حالی که مخزن هنوز پاک است، آن را ترک کنید.

محدودیت‌های نهایی

این کارت وزن‌های مدل (Weights) را تثبیت نمی‌کند. یک سرور رایگان می‌تواند بک‌اِند خود را عوض کند و باعث تغییر هش شود — که در واقع این یک ویژگی برای سیستم شناسایی است. همچنین جایگزین بررسی انسانی نیست؛ یک رسید معتبر همچنان می‌تواند توصیه‌ای غلط را در بر بگیرد، بنابراین کسی باید همچنان Diffها را بخواند. در نهایت، این یک تست فشار (Load Test) نیست. یک فراخوانی کاناری، ترافیک محسوب نمی‌شود و نباید به عنوان ظرفیت سیستم نقل شود.

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

گام بعدی شما

  • اگر از ابزارهای CLI مبتنی بر AI استفاده می‌کنید، یک فایل schema_receipt.json برای حیاتی‌ترین خروجی‌هایتان بسازید.
  • یک Wrapper ساده با set -e بنویسید تا از اجرای دستورات در صورت خطای فرمت جلوگیری کنید.
  • مدل‌های رایگان را با یک Fixture «دروغ» تست کنید تا مطمئن شوید گیت شما واقعاً کار می‌کند.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

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

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که به دلیل محدودیت‌های مالی یا تحریم‌ها بیشتر از مدل‌های رایگان و میزبان‌های Open-source استفاده می‌کنند، این متد راهکاری حیاتی برای جلوگیری از خطاهای پیش‌بینی‌نشده در پروژه‌های عملیاتی است.

·نگاه ما
تحریریه دات‌هوش

جایگزینی «تأیید حسی» با «سند فنی» در تعامل با مدل‌های زبانی، نقطه عطفی در گذار از Vibe Coding به مهندسی نرم‌افزار است. این رویکرد پذیرفته است که مدل‌های رایگان ذاتاً ناپایدارند و به جای تلاش برای «تربیت» مدل با پرامپت‌های پیچیده، روی ساخت یک لایه دفاعی در محیط اجرا تمرکز می‌کند. در واقع، این متد مدل را نه به عنوان یک هوش، بلکه به عنوان یک سیستم توزیع داده‌ی غیرقابل اعتماد می‌بیند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.