تصور کنید یک کلید API باطل شود یا شبکه قطع شود و تمام برنامه شما به مجموعهای از دایرههای در حال چرخش (Loading) تبدیل شود. WorldScript Studio، یک پلتفرم نویسندگی متنباز، با تبدیل هوش مصنوعی از یک وابستگی حیاتی به یک قابلیت اختیاری، این کابوس را به پایان رسانده است.
به نقل از مستندات فنی نسخه v1.28.8 (کامیت 2d9157c0، تاریخ ۲۸ سپتامبر ۲۰۲۶)، این استودیو بهگونهای طراحی شده که بدون هیچ کلید API، مدل یا حتی اتصال به شبکه، بهطور کامل قابل استفاده باشد. اکثر توسعهدهندگان هوش مصنوعی را به صورت مجموعهای از نقاط فراخوانی پراکنده در سراسر کد خود ادغام میکنند. این کار سیستمی شکننده ایجاد میکند که در آن اگر مدل نتواند پاسخ دهد (Ping نکند)، هویت محصول فرو میپاشد. WorldScript Studio با ایجاد یک مرز معماری سختگیرانه، منطق اصلی محصول را از لایه دستیار هوش مصنوعی جدا کرده است. هدف این است که لایه AI بتواند به هر شکلی که میخواهد شکست بخورد، به شرطی که این شکست «تایپشده» (Typed)، توضیح داده شده و محصور باشد.
همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، جداسازی لایههای دسترسی برای حفظ پایداری سیستم ضروری است. در این معماری، مدل زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن کتابها جواب میدهد — دیگر ستون اصلی ساختمان نیست، بلکه ابزاری است که در صورت نبودنش، ساختمان همچنان پابرجاست.
درز یکپارچه ارائهدهنده (Unified Provider Seam)
مرکز این معماری، یک «درز ارائهدهنده» واحد است. هر درخواست هوش مصنوعی، چه برای تولید متن، دادههای JSON ساختاریافته، استریمینگ (Streaming) یا ایجاد تصویر، باید از این سرویس یکپارچه عبور کند. این سرویس با استفاده از آداپتور (Adapter) — لایههایی که مثل تبدیلهای برق، مدلهای مختلف را به یک فرمت واحد تبدیل میکنند — همه را تحت یک نوع واحد به نام LanguageModel از طریق Vercel AI SDK مدیریت میکند. ارائهدهندگان پشتیبانیشده عبارتاند از:
- ارائهدهندگان ابری: Gemini، OpenAI، Anthropic و OpenRouter.
- سرورهای محلی: هر سرور سازگار با OpenAI مانند Ollama یا LM Studio که از طریق یک URL پایه (Base URL) انتخاب میشوند.

این ساختار از طریق providerFactory.ts پیاده شده است که پیکربندیهای انواع مختلف ارائهدهندگان، از جمله تنظیمات openaiCompatible که نیازمند baseURL هستند را مدیریت میکند. با متمرکز کردن تمام ترافیک در یک نقطه، توسعهدهندگان تضمین میکنند که خطای «قطع بودن هوش مصنوعی» فقط در یک جای کد رخ دهد. این کار از ایجاد منطقهای تکراری و متناقض برای تلاش مجدد (Retry) یا مدیریت خطا در هر ویژگی بهصورت مجزا جلوگیری میکند. این رویکرد در واقع پاسخی به چالشهای زیرساختهای ماژولار در برابر اکوسیستمهای بسته است تا از وابستگی مطلق به یک ارائهدهنده خاص (Vendor Lock-in) جلوگیری شود.
همچنین، این معماری مدل «کلید خودت را بیاور» (Bring-your-own-key) را ایمن میکند. کلیدها بهصورت رمزنگاریشده در بیلد مرورگر با استفاده از یک کلید تصادفی و غیرقابل استخراج AES-256-GCM در IndexedDB ذخیره میشوند. بهدلیل وجود این درز، هیچ SDK ارائهدهندهای هرگز دسترسی مستقیم به لایه ذخیرهسازی ندارد.
گیتهای سیاستگذاری سخت
سیستم بهجای تکیه بر قراردادهای ساده، از گیتهای سیاستگذاری در سطح کد برای هدایت مسیرها استفاده میکند. کاربران میتوانند بین چهار حالت مسیریابی انتخاب کنند: hybrid (پیشفرض)، cloud، local و eco. تابع assertCloudAiAllowedSync در فایل aiPolicy.ts مانند یک گیت سخت عمل میکند و اگر در حالی که برنامه در حالت محلی (Local-only) یا eco است، ارائهدهنده ابری فراخوانی شود، بلافاصله خطا (Error) پرتاب میکند.
این رویکرد باعث میشود تضمینهای حریم خصوصی قابل تست باشند. مجموعه تستهای سیاستگذاری (Policy test suite) مستقیماً ماتریس حالتها را بررسی میکند تا مطمئن شود گیتها طبق انتظار خطا میدهند. برای مثال، سیستم از یک لیست سفید (Allowlist) استفاده میکند تا تنظیم دقیق (LoRA fine-tuning) — مثل وقتی به یک پزشک عمومی، تخصص پوست میدهیم تا روی یک حوزه دقیق شود — را منحصراً به ارائهدهندگان محلی محدود کند. این یعنی دادههای حساس دستنوشتهها هرگز در مسیر آموزش مدل از دستگاه خارج نمیشوند. با این حال، سیستم صادق است: هر ارائهدهنده ابری که کاربر صراحتاً فراخوانی کند، لزوماً زمینهای (Context) را که برایش ارسال شده دریافت خواهد کرد.
معناشناسی خطاهای تایپشده
WorldScript Studio اعلانهای کلی «خطایی رخ داد» را کنار گذاشته است. در عوض، هر شکست در aiErrorTaxonomy.ts طبقهبندی میشود تا حرکت بعدی سیستم تعیین گردد:
- گذرا، محدودیت نرخ یا شبکه (Transient, Rate Limit, Network): بهعنوان «قابل تلاش مجدد» علامتگذاری میشوند. اینها خطاهای کلاس اتصال هستند که در تلاشهای بعدی میتوانند موفق شوند.
- احراز هویت، سیاست یا درخواست نامعتبر (Auth, Policy, Invalid Request): بهعنوان شکستهای «قطعی» (Deterministic) علامتگذاری میشوند. تلاش مجدد نادیده گرفته میشود چون فقط منجر به تکرار شکست میشود. این دقت در طبقهبندی خطاها یادآور رویکرد جدید COGEXT در انتقال وضعیت است که برای افزایش پاسخگویی و شفافیت در عملیات عاملهای هوش مصنوعی طراحی شده است.
- آفلاین (Offline): بهعنوان «محکوم به شکست» (Doomed) علامتگذاری میشوند تا زمانی که اتصال بازگردد.
- لغو شده یا دائمی (Canceled, Permanent): بهدلیل قصد کاربر یا شکست سیستمی، غیرقابل بازیابی تلقی میشوند.
هر کلاس دارای یک کلید پیام پایدار است. این به رابط کاربری اجازه میدهد راهنماییهای عملی مثل «کلید API خود را بررسی کنید» یا «شما آفلاین هستید» ارائه دهد، بهجای اینکه کاربر را در ابهام بگذارد. لایه تلاش مجدد (Retry layer) در فراخوانیهای «محکوم»، بهجای اینکه با تأخیر مودبانه (Back-off) تلاش کند، سریعاً شکست را اعلام میکند.
جایگزینهای صادقانه
وقتی یک فراخوانی AI بهطور قطعی شکست میخورد، سیستم سعی میکند از طریق یک رجیستری، یک تولیدکننده اکتشافی (Heuristic) محلی را فعال کند. اینها اسکریپتهای ساده و غیر-AI هستند که برای هر تسک ثبت شدهاند، مانند یک تولیدکننده طرح کلی (Outline) یا تولیدکننده پروفایل شخصیت.
نکته کلیدی این است که رجیستری جایگزینها اجازه دارد مقدار null برگرداند. همانطور که در کامنتهای کد ذکر شده، این لایه «همیشه برای ارسال بهصورت خالی ایمن است». اگر هیچ اکتشافی برای یک تسک وجود نداشته باشد، برنامه صادقانه درخواست را رد میکند بهجای اینکه یک پاسخ بیکیفیت بسازد. این کار از اینکه کاربران یک اکتشاف ابتدایی را با پاسخ یک مدل باکیفیت اشتباه بگیرند جلوگیری کرده و سطح کالیبره شدهای از اعتماد را حفظ میکند.
تست «قطع اتصال» و هویت محصول
این معماری به این معناست که ویرایشگر دستنوشته، ابزارهای برنامهریزی و ذخیرهسازی — که هسته محصول هستند — هرگز با درز AI تماس ندارند. آنها بهطور کامل آفلاین کار میکنند چون از ابتدا به مدل وابسته نبودهاند.
دقت در وضعیت «آفلاین» حیاتی است:
- استنتاج محلی (Local Inference): مدلهای اجرا شده در مرورگر یا مدلهای سرویسدهی شده توسط Ollama در صورت تنظیمات قبلی همچنان کار میکنند (اگرچه دانلود اولیه مدل نیاز به اتصال دارد). این قابلیت نشان میدهد چرا در برخی سناریوها، معماریهای مبتنی بر مرورگر در برابر محیطهای فیزیکی سختافزاری انعطافپذیری بیشتری دارند.
- ارائهدهندگان ابری: غیرقابل دسترس میشوند و کلاس خطای آفلاین صراحتاً این موضوع را گزارش میکند.
- حالت محلی (Local Mode): این تنظیم خاص تضمین میکند که دستگاه هرگز هیچ درخواست شبکهای ارسال نکند.
برای توسعهدهندگان، این موضوع تعریف «محصول» را تغییر میدهد. محصول واقعی آن چیزی است که پس از «تست قطع اتصال» (بدون کلید، بدون شبکه و در راهاندازی سرد) همچنان کار کند. هر چیزی که در این تست بشکند، یک وابستگی پنهان است، نه یک ویژگی. این کار نیاز به مراحل Onboarding که متقاضی کلید API هستند یا گیتهای دسترسی روی ویرایشگر را از بین میبرد.
برای رسیدن به این سطح از تابآوری، توسعهدهندگان این چکلیست چهارگانه را پیشنهاد میکنند:
- یک درز واحد: تمام ترافیک AI از یک لایه عبور کند؛ ارائهدهندگان فقط آداپتور باشند. اگر ویژگیای مستقیماً یک SDK ارائهدهنده را Import کند، قابلیت اختیاری بودن از بین میرود.
- گیتهای خطادهنده: سیاستهای حالت و حریم خصوصی در کد و در نقطه درز با تستها اجرا شوند، نه بهعنوان قراردادهای مستند شده.
- خطای تایپشده: خطاها بر اساس اینکه آیا تلاش مجدد میتواند موفق شود یا خیر طبقهبندی شوند و به پیامهای عملیاتی متصل گردند.
- جایگزینهای قادر به رد کردن: در جایی که کمک میکند به رفتارهای محلی سادهتر تنزل یابد (Degrade)؛ و در جایی که فقط تظاهر است، پاسخ «بدون جایگزین» برگرداند.
با راندن هوش مصنوعی به حاشیه زیرساخت، توسعهدهندگان میتوانند سریعتر ویژگی جدید اضافه کنند بدون اینکه پایداری کل برنامه را به خطر بیندازند. این یک چرخش از شکنندگی «اول-هوش مصنوعی» به سمت تابآوری «اول-محصول» است.
گام بعدی شما
- در پروژههای خود، تمام فراخوانیهای API را در یک کلاس واحد (Provider) متمرکز کنید تا وابستگیها قابل ردیابی باشند.
- برای خطاهای AI، یک سیستم طبقهبندی (Taxonomy) بسازید تا کاربر بداند چه زمانی باید کلید API را عوض کند و چه زمانی منتظر بازگشت اینترنت بماند.
- تست «قطع اتصال» را روی محصول خود اجرا کنید تا بفهمید کدام ویژگیها بهطور خطرناکی به مدل وابسته شدهاند.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو