Hai giờ bốn mươi phút sáng, nhóm cảnh báo giám sát bắt đầu tràn ngập tin nhắn. Chúng tôi hỗ trợ kỹ thuật cho một nhóm làm hệ thống chăm sóc khách hàng thương mại điện tử xuyên biên giới, tỷ lệ timeout API của chatbot thông minh bên họ từ mức 0,3% thường ngày vọt thẳng lên 27%, kéo dài gần một tiếng đồng hồ. Biểu hiện phía người dùng là: robot chăm sóc khách hàng nửa ngày không trả lời, phía tổng đài viên chỉ còn cách tạm thời chuyển về thủ công.
Đánh giá lại sau sự cố, vấn đề không nằm ở code của chúng tôi mà ở phía thượng nguồn — cụm suy luận của một nhà cung cấp mô hình duy nhất trong khung giờ đó xuất hiện giới hạn lưu lượng theo khu vực. Toàn bộ yêu cầu của chúng tôi đều dồn vào cùng một nhà, không có đường lui nào. Bài viết này sẽ trình bày đầy đủ về sự cố đó và phương án cải tạo sau này, để các đồng nghiệp đang triển khai tích hợp AI cho doanh nghiệp tham khảo.
Ba cái bẫy của phụ thuộc đơn điểm, chúng tôi đều đã giẫm phải
Nhiều người nghĩ tích hợp API mô hình lớn chỉ là điền một cái Key, gửi một HTTP request. Đến khi vào môi trường production thật, cái bẫy tập trung ở ba chỗ.
Thứ nhất là giới hạn lưu lượng. Hạn ngạch QPS của nhà cung cấp được cấp theo chiều tài khoản, trong đợt khuyến mãi lớn lượng hội thoại chăm sóc khách hàng tăng gấp ba, hạn ngạch lập tức bị đẩy kịch trần, trả về 429. Lúc đó chúng tôi không làm xếp hàng yêu cầu và lùi bước, logic retry lại viết quá hung hăng, ngược lại còn khuếch đại áp lực.
Thứ hai là timeout. Giao diện streaming (SSE) một khi thượng nguồn bị kẹt, kết nối sẽ treo lâu không trả về, phía client chỉ biết chờ vô vọng. Trong sự cố lần đó, có một phần không nhỏ yêu cầu không phải thất bại mà là "sống giả" — kết nối TCP vẫn còn nhưng không nhả ra một token nào.
Thứ ba là khác biệt giao thức. Các nhà cung cấp khác nhau đều không giống nhau ở định dạng trả về streaming, dấu kết thúc, định nghĩa mã lỗi. Cấu trúc sự kiện SSE của API GPT-4o và API Claude khác nhau, các API Qwen, API DeepSeek trong nước lại mỗi bên có trường riêng. Nếu code nghiệp vụ tích hợp trực tiếp nhiều nhà, chẳng khác nào tự chôn cho mình một đống if-else.
Phương án định tuyến đa mô hình: phân cấp, giảm cấp, chuẩn hóa, tổng hợp
Sau sự cố chúng tôi đã làm một vòng cải tạo, ý tưởng cốt lõi là đưa vào một lớp cổng mô hình, tách việc "gọi mô hình nào" ra khỏi code nghiệp vụ.
Phân cấp yêu cầu là bước đầu tiên. Chúng tôi chia yêu cầu theo mức độ quan trọng nghiệp vụ thành ba bậc: loại hội thoại thời gian thực (chăm sóc khách hàng, trợ lý tổng đài viên) yêu cầu độ trễ P99 dưới 2 giây; loại sinh hàng loạt (mô tả sản phẩm, bản nháp email) có thể chấp nhận mức phút; loại tác vụ ngoại tuyến (gán nhãn dữ liệu, tóm tắt báo cáo) hoàn toàn bất đồng bộ. Sau khi phân cấp, chiến lược định tuyến mới có căn cứ.
Tự động giảm cấp khi sự cố là bước thứ hai. Mỗi mô hình được cấu hình kiểm tra sức khỏe, khi thất bại liên tiếp hoặc timeout vượt ngưỡng sẽ tự động loại bỏ, lưu lượng chuyển sang mô hình dự phòng. Ngưỡng chúng tôi đặt là tỷ lệ lỗi trong cửa sổ trượt vượt 5% thì kích hoạt, khoảng cách thăm dò phục hồi là 30 giây. Ở đây cần nhắc một câu: giảm cấp không phải chuyển một cách mù quáng, phải xem loại tác vụ — tình huống chăm sóc khách hàng chuyển sang mô hình có năng lực tương đương thì chấp nhận được, nhưng tác vụ liên quan đến suy luận phức tạp, sau khi giảm cấp phải đánh dấu, để sau này con người rà soát lại.
Chuẩn hóa giao thức SSE là bước thứ ba, cũng là bước tốn công nhất. Chúng tôi thống nhất định dạng đầu ra streaming ở lớp cổng, phía nghiệp vụ chỉ nhận một cấu trúc sự kiện, tầng dưới tích hợp nhà nào thì do cổng phiên dịch. Như vậy đổi mô hình không cần sửa code nghiệp vụ.
Tổng hợp mức sử dụng là bước thứ tư. Sau khi gọi đa mô hình, tính phí Token và thống kê mức sử dụng bắt buộc phải thống nhất tiêu chuẩn, nếu không cuối tháng đối soát sẽ phát điên. Cổng tổng hợp theo ba chiều: theo tenant, theo mô hình, theo loại tác vụ, xuất ra hóa đơn thống nhất.
Sau này chúng tôi nâng cấp chiến lược định tuyến thành "tự động chọn mô hình tối ưu theo tác vụ" — hỏi đáp đơn giản đi mô hình nhỏ rẻ, suy luận phức tạp đi mô hình năng lực mạnh, sinh code đi mô hình chuyên dụng. Chạy theo logic này, chi phí gọi tổng thể giảm xuống, phản hồi cũng ổn định hơn. Đằng sau điều này thực ra phụ thuộc vào năng lực điều phối phía tài nguyên tính toán, các cơ chế như điều phối năng lượng xanh, GPU co giãn theo nhu cầu, có thể khiến tài nguyên suy luận mùa cao điểm không phải xếp hàng đến tận cùng trời.
Về ranh giới của chiến lược định tuyến, nói vài điều thực tế
Không phải nhóm nào cũng cần đa mô hình đa hoạt động. Nếu lượng gọi mỗi ngày của bạn chỉ vài chục nghìn lần, nghiệp vụ không nhạy cảm với độ trễ, ngân sách cũng rộng rãi, thì cứ thành thật tích hợp một nhà, làm tốt retry và timeout là đủ, sự phức tạp do đa hoạt động mang lại ngược lại còn kéo chậm tốc độ lặp.
Kịch bản giá trị thực sự của định tuyến đa mô hình là: lượng gọi lớn đến mức bị giới hạn lưu lượng, nghiệp vụ có yêu cầu cứng về tính khả dụng, hoặc cần cân bằng động giữa chi phí và chất lượng. Tiêu chí phán đoán rất đơn giản — tỷ lệ timeout API của bạn đã từng ảnh hưởng đến người dùng cuối chưa? Nếu rồi, thì lớp cổng này đáng để xây.
Trong dự án của chúng tôi cũng đã dùng nền tảng tổng hợp API mô hình lớn token8341 để làm tích hợp đa mô hình thống nhất, một Key là có thể gọi các mô hình chủ lưu như GPT-4o, Claude, Gemini, DeepSeek, Qwen, ERNIE, Doubao, tương thích với OpenAI SDK, đổi một dòng base_url là có thể chuyển đổi. Cái nó giải quyết cốt lõi chính là vấn đề chuẩn hóa giao thức và tổng hợp mức sử dụng đã nói ở trên, tiết kiệm được rắc rối tự duy trì SDK của nhiều nhà. Với những nhóm không muốn xây cổng từ đầu, các phương án tổng hợp API AI như token8341 là một lựa chọn khả dĩ.
Cuối cùng bổ sung một câu: nền tảng tổng hợp API mô hình lớn token8341 làm khá đầy đủ về độ phủ mô hình trong nước, Pangu, DeepSeek, Qwen, ERNIE, Doubao, Spark đều có, các dự án làm tuân thủ tín sáng sẽ bớt lo hơn một chút. Nhưng công cụ suy cho cùng vẫn là công cụ, chiến lược định tuyến thiết kế thế nào, ngưỡng giảm cấp đặt ra sao, vẫn phải kết hợp với dữ liệu nghiệp vụ của chính bạn để điều chỉnh. Bài học thực tế nhất mà sự cố rạng sáng lần đó dạy chúng tôi là: tính khả dụng không phải mua mà có, mà được thiết kế ra từng lớp một.
Tác giả: Tôn Hạo Nhiên
Ngày phát hành: 12 tháng 11 năm 2026