5 Điều AI Làm Sai Với Fetch API
Các trợ lý lập trình AI viết mã trông có vẻ đúng. Nhưng chúng không viết mã thực sự đúng.
Hầu hết các mô hình đều gợi ý một đoạn mã fetch đơn giản. Nó chạy được trong bản demo, nhưng lại thất bại trong môi trường production. Fetch API là một công cụ cấp thấp, không phải là một HTTP client hoàn chỉnh. Nó yêu cầu bạn phải đưa ra các quyết định về kiến trúc mà AI không thể thực hiện được.
Dưới đây là 5 cách mà AI thường mắc lỗi với fetch:
Xử lý lỗi (Error Handling) AI giả định rằng một yêu cầu thất bại sẽ làm reject promise. Điều này là sai. Lỗi 404 hoặc 500 không kích hoạt khối
catch. Bạn phải kiểm traresponse.okmột cách thủ công. Nếu không, ứng dụng của bạn sẽ coi các trang lỗi là dữ liệu thành công.Hủy yêu cầu (Request Cancellation) AI thường quên sử dụng
AbortController. Điều này gây ra rò rỉ bộ nhớ (memory leaks) và tình trạng tranh chấp (race conditions) trong các framework như React. Nếu người dùng nhấp qua một danh sách thật nhanh, các yêu cầu cũ có thể được giải quyết sau các yêu cầu mới. Điều này khiến giao diện người dùng (UI) hiển thị dữ liệu cũ (stale data). Bạn cũng phải lọcAbortErrorđể không hiển thị thông báo lỗi trong quá trình hủy yêu cầu có chủ đích.Dữ liệu dạng luồng (Streaming Data) AI coi các phản hồi là các khối đơn lẻ. Điều này sẽ gặp lỗi khi xử lý các tệp lớn hoặc phản hồi từ LLM. Các phân đoạn mạng (network chunks) có thể chia cắt một ký tự hoặc một dòng JSON làm đôi. Bạn phải sử dụng
TextDecoderStreamvà một buffer để xử lý các byte một cách chính xác qua các phân đoạn.Khả năng phục hồi và Thử lại (Resilience and Retries) AI cung cấp các vòng lặp thử lại (retry loops) ngây thơ. Những vòng lặp này rất nguy hiểm. Chúng thường thử lại các yêu cầu
POST, điều này có thể gây ra việc tính phí hai lần hoặc trùng lặp dữ liệu. Chúng cũng thiếu cơ chế backoff và jitter. Điều này có thể biến một sự cố nhỏ của máy chủ thành một đợt gián đoạn lớn. Bạn chỉ nên thử lại các yêu cầu có tính idempotent (tính lặp lại không đổi kết quả) và sử dụng exponential backoff.Sự khác biệt về môi trường (Environment Differences) AI nhầm lẫn giữa các quy tắc của Trình duyệt (Browser) và Node.js. Node.js không bắt buộc CORS. Node.js có các thiết lập timeout mặc định khác nhau. Trong Node, bạn phải tiêu thụ (consume) phần thân (body) để tránh rò rỉ kết nối. AI không thể biết môi trường thực thi (runtime) mục tiêu của bạn, vì vậy nó thường đưa ra mã hoạt động được ở môi trường này nhưng lại lỗi ở môi trường kia.
Chiến lược:
Hãy sử dụng AI để xây dựng khung (scaffolding). Hãy để nó viết các mã mẫu (boilerplate) và cấu trúc cơ bản.
Bạn phải làm chủ về mặt ngữ nghĩa (semantics). Bạn quyết định liệu 404 có phải là một lỗi hay không. Bạn quyết định ngân sách thử lại (retry budget) của mình. Bạn quyết định cách xử lý các header xác thực (auth headers).
AI tối ưu hóa cho mã trông có vẻ hợp lý. Bạn phải tối ưu hóa cho sự chính xác.
Source: https://dev.to/devunionx/new5-things-even-ai-cant-do-fetch-api-328e
