Gần đây, chúng tôi đã quan sát thấy nhiều lập trình viên tích hợp Upstash với OpenAI và các API AI khác như Google Cloud AI, IBM Watson và Hugging Face. Trong bài viết này, chúng tôi sẽ thảo luận về các trường hợp sử dụng phổ biến nhất và phác thảo kế hoạch tương lai để hỗ trợ thêm nhiều tính năng hơn.
Giới hạn tốc độ (Rate Limiting)
Giới hạn tốc độ là thành phần quan trọng trong quản lý các ứng dụng dựa trên AI, đóng vai trò biện pháp bảo vệ cho cả nhà phát triển và người dùng. Vì các ứng dụng AI xử lý khối lượng dữ liệu lớn và thực hiện các phép tính phức tạp, chúng đòi hỏi tài nguyên tính toán đáng kể. Nếu không được quản lý đúng cách, điều này có thể dẫn đến quá tải hệ thống, giảm hiệu suất, thậm chí lỗi hệ thống hoàn toàn, gây ra trải nghiệm người dùng kém. Hơn nữa, giới hạn tốc độ có thể đóng vai trò như đường phòng thủ đầu tiên chống lại một số loại tấn công độc hại, chẳng hạn như tấn công DDoS, nhằm làm cho hệ thống quá tải bằng lưu lượng truy cập. Do đó, việc triển khai giới hạn tốc độ trong ứng dụng AI giúp duy trì ổn định hệ thống, kiểm soát chi phí và tăng cường bảo mật.
Upstash cung cấp SDK Rate Limit dễ sử dụng cho phép bạn kiểm soát số lượng yêu cầu có thể thực hiện đến ứng dụng trong một khoảng thời gian. Bạn có thể giới hạn yêu cầu theo địa chỉ IP hoặc ID người dùng, và chọn từ nhiều thuật toán khác nhau, bao gồm cửa sổ cố định (fixed window), cửa sổ trượt (sliding window) và thùng token (token bucket).
Xử lý bất đồng bộ (Asynchronous Processing)
Xử lý bất đồng bộ đóng vai trò then chốt trong hiệu quả và hiệu suất của các ứng dụng dựa trên AI. Các ứng dụng này thường phải xử lý khối lượng dữ liệu lớn và các phép tính phức tạp có thể tốn nhiều thời gian. Khi các tác vụ được xử lý đồng bộ, hoặc theo trình tự, hệ thống phải chờ đợi từng tác vụ hoàn thành trước khi bắt đầu tác vụ tiếp theo, điều này có thể dẫn đến độ trễ đáng kể và trải nghiệm người dùng kém. Điều này có thể gây khó khăn đặc biệt cho các ứng dụng serverless, vì thời gian xử lý tăng lên có thể làm tăng chi phí và dẫn đến vấn đề hết thời gian chờ (timeout). Ngược lại, xử lý bất đồng bộ cho phép thực hiện nhiều tác vụ đồng thời, mà không cần chờ đợi từng tác vụ hoàn thành.
QStash là hàng đợi tin nhắn được thiết kế cho các ứng dụng serverless, cho phép bạn gửi các cuộc gọi API để xử lý bất đồng bộ. QStash xử lý cuộc gọi API và trả về phản hồi đến callback bạn chỉ định.
Lưu trữ đệm (Caching)
Lưu trữ đệm đóng vai trò quan trọng trong hiệu suất và hiệu quả của các ứng dụng dựa trên AI. Trí tuệ nhân tạo thường liên quan đến các tác vụ tính toán chuyên sâu như huấn luyện mô hình, đưa ra dự đoán hoặc xử lý ngôn ngữ tự nhiên, những thứ có thể tốn nhiều thời gian và tài nguyên. Bằng cách triển khai caching, một ứng dụng có thể lưu trữ kết quả của các thao tác này và tái sử dụng chúng khi cùng một thao tác được yêu cầu lại, từ而 tránh việc lặp lại phép tính. Caching là chiến lược hiệu quả để giảm chi phí của các cuộc gọi API đắt tiền.
Upstash Redis là giải pháp tuyệt vời để cache các phản hồi OpenAPI. Bằng cách đặt thời gian hết hạn trên các cuộc gọi API được cache, bạn có thể đảm bảo rằng ứng dụng chỉ tiêu thụ tài nguyên OpenAPI khi phản hồi cache phù hợp không có sẵn hoặc đã lỗi thời.
Caching ngữ nghĩa (Semantic Caching)
Một trường hợp sử dụng caching chuyên biệt cho ứng dụng AI là caching prompt. Semantic caching có thể rất hữu ích để tăng hiệu quả và hiệu suất của các ứng dụng dựa trên AI.
Semantic caching khác với các phương pháp caching truyền thống ở chỗ nó lưu trữ ý nghĩa của một truy vấn hoặc yêu cầu thay vì chỉ dữ liệu thô. Điều này cho phép cache hiệu quả hơn, vì nó có thể được sử dụng để trả lời các truy vấn tương tự với các truy vấn trước đó, ngay cả khi truy vấn chính xác không được lưu trữ trong cache.
Ví dụ, nếu người dùng truy vấn "ô tô", semantic cache có thể lưu trữ ý nghĩa của truy vấn, chẳng hạn như "phương tiện có bốn bánh xe và động cơ đốt trong". Điều này cho phép cache trả lời các truy vấn cho "xe hơi", "xe cơ giới" và "xe tải", ngay cả khi các truy vấn này không được lưu trữ trong cache.
Lưu ý: Module Redis Search hỗ trợ truy vấn độ tương đồng vector nhưng Upstash không tương thích với Redis Search. Có một dự án để triển khai tìm kiếm tương đồng để hỗ trợ các truy vấn ngữ nghĩa bên trong Upstash.
Ví dụ: Art Generator (Trình tạo nghệ thuật)
Art Generator được hỗ trợ bởi Dall-E-2 sử dụng AI để tạo hình ảnh từ văn bản và dựa trên Upstash Redis để cache các hình ảnh được tạo. Nó cũng sử dụng QStash để quản lý các cuộc gọi API và xử lý chúng bất đồng bộ, tránh timeout của hàm serverless.
Khi nhận được một bản gửi văn bản, ứng dụng gửi yêu cầu đến OpenAI API qua endpoint /api/image của QStash. QStash sau đó thu thập và chuyển tiếp phản hồi đến /api/callback dưới dạng URL, sau đó được lưu trữ trong Upstash Redis. Sau khi gọi OpenAI API, client truy vấn Redis và lấy hình ảnh nếu có sẵn.
Bằng cách ủy quyền quản lý cuộc gọi API cho QStash, nhà phát triển có thể tránh timeout của hàm serverless khi triển khai trên gói Hobby của Vercel, có giới hạn 10 giây.

Ví dụ: RestorePhotos
RestorePhotos là một ứng dụng sáng tạo khôi phục ảnh khuôn mặt cũ bằng AI. Khi trở nên phổ biến, tác giả đã triển khai Upstash Redis để giới hạn tốc độ sử dụng API, cải thiện hiệu quả và tính hiệu quả chi phí. Xem tại đây phần code nơi giới hạn tốc độ được triển khai.


Kết luận
Là đội ngũ Upstash, chúng tôi thực sự ấn tượng bởi cách các nhà phát triển áp dụng Redis để giải quyết thách thức khi phát triển ứng dụng được hỗ trợ bởi AI. Chúng tôi có các kế hoạch sau để làm cho cuộc sống của họ tốt hơn:
- Phát triển SDK để dễ dàng sử dụng các API AI cũng như thêm chức năng giới hạn tốc độ, caching và xử lý bất đồng bộ.
- Hỗ trợ semantic caching và truy vấn tương đồng với Redis Search API hoặc API tốt hơn.