۵ موردی که هوش مصنوعی در مورد Fetch API اشتباه می‌کند

دستیارهای کدنویسی هوش مصنوعی کدی می‌نویسند که درست به نظر می‌رسد، اما کدی که واقعاً درست باشد نمی‌نویسند.

اکثر مدل‌ها یک قطعه کد ساده برای fetch پیشنهاد می‌دهند. این کد در یک محیط آزمایشی (demo) اجرا می‌شود، اما در محیط عملیاتی (production) شکست می‌خورد. Fetch API یک ابزار سطح پایین است، نه یک کلاینت کامل HTTP. این ابزار از شما می‌خواهد تصمیمات معماری‌ای بگیرید که هوش مصنوعی قادر به گرفتن آن‌ها نیست.

در اینجا ۵ روش وجود دارد که هوش مصنوعی در استفاده از fetch دچار خطا می‌شود:

  • مدیریت خطا (Error Handling) هوش مصنوعی فرض می‌کند که یک درخواست ناموفق، promise را رد (reject) می‌کند. این اشتباه است. یک خطای ۴۰۴ یا ۵۰۰ باعث اجرای بلوک catch نمی‌شود. شما باید response.ok را به صورت دستی بررسی کنید. اگر این کار را انجام ندهید، اپلیکیشن شما صفحات خطا را به عنوان داده‌های موفقیت‌آمیز در نظر می‌گیرد.

  • لغو درخواست (Request Cancellation) هوش مصنوعی اغلب استفاده از AbortController را فراموش می‌کند. این موضوع باعث نشت حافظه (memory leaks) و شرایط رقابتی (race conditions) در فریم‌ورک‌هایی مانند React می‌شود. اگر کاربری به سرعت روی لیست کلیک کند، ممکن است درخواست‌های قدیمی بعد از درخواست‌های جدید پاسخ داده شوند. این امر باعث می‌شود رابط کاربری (UI) شما با داده‌های قدیمی (stale data) نمایش داده شود. همچنین باید AbortError را فیلتر کنید تا در هنگام لغوهای عمدی، پیام خطا نمایش داده نشود.

  • داده‌های جریانی (Streaming Data) هوش مصنوعی با پاسخ‌ها به عنوان بلوک‌های واحد برخورد می‌کند. این رویکرد هنگام مدیریت فایل‌های بزرگ یا پاسخ‌های LLM با مشکل مواجه می‌شود. تکه‌های شبکه (network chunks) می‌توانند یک کاراکتر واحد یا یک خط JSON را از وسط نصف کنند. شما باید از یک TextDecoderStream و یک بافر (buffer) استفاده کنید تا بایت‌ها را به درستی در میان تکه‌ها مدیریت کنید.

  • تاب‌آوری و تلاش مجدد (Resilience and Retries) هوش مصنوعی حلقه‌های تلاش مجدد (retry loops) ساده‌لوحانه‌ای ارائه می‌دهد. این حلقه‌ها خطرناک هستند. آن‌ها اغلب درخواست‌های POST را دوباره تلاش می‌کنند که می‌تواند باعث کسر وجه مضاعف یا داده‌های تکراری شود. همچنین آن‌ها فاقد مکانیزم‌های backoff و jitter هستند. این امر یک اختلال کوچک در سرور را به یک قطعی گسترده تبدیل می‌کند. شما باید فقط درخواست‌های idempotent را دوباره تلاش کنید و از exponential backoff استفاده کنید.

  • تفاوت‌های محیطی (Environment Differences) هوش مصنوعی قوانین Browser و Node.js را با هم مخلوط می‌کند. Node.js قوانین CORS را اعمال نمی‌کند. Node.js زمان‌های انتظار (timeouts) پیش‌فرض متفاوتی دارد. در Node، باید بدنه (body) را مصرف کنید تا از نشت اتصالات جلوگیری شود. هوش مصنوعی نمی‌تواند محیط اجرای هدف (target runtime) شما را بداند، بنابراین اغلب کدی به شما می‌دهد که در یکی کار می‌کند اما در دیگری از کار می‌افتد.

استراتژی:

از هوش مصنوعی برای ساختار اولیه (scaffolding) استفاده کنید. اجازه دهید کدهای تکراری (boilerplate) و ساختار اصلی را بنویسد.

شما باید مالک معناشناسی (semantics) باشید. شما تصمیم می‌گیرید که آیا یک خطای ۴۰۴ واقعاً یک خطا است یا خیر. شما بودجه تلاش مجدد (retry budget) خود را تعیین می‌کنید. شما تصمیم می‌گیرید که هدرهای احراز هویت (auth headers) خود را چگونه مدیریت کنید.

هوش مصنوعی برای کدی که «باورپذیر» به نظر برسد بهینه‌سازی شده است. شما باید برای «درست بودن» بهینه‌سازی کنید.

منبع: https://dev.to/devunionx/new5-things-even-ai-cant-do-fetch-api-328e