کش Middleware در NextJS با AI
بیایید یک رابط چت ساده ایجاد کنیم که با استفاده از LanguageModelMiddleware، پاسخهای دستیار را در یک فضای ذخیرهسازی کلید-مقدار (KV) سریع کش کند. این میانافزار باعث میشود که پاسخهای تولیدشده توسط مدل زبانی ذخیره شوند و در صورت تکرار درخواست مشابه، بدون نیاز به پردازش مجدد مدل، از کش بازگردانده شوند.
کلاینت
بیایید یک رابط چت ساده ایجاد کنیم که به کاربران اجازه دهد پیامهایی را به دستیار ارسال کرده و پاسخها را دریافت کنند. در این پیادهسازی، شما از هوک useChat از پکیج ai-sdk/react@ استفاده خواهید کرد تا پاسخها بهصورت استریمی دریافت شوند. در مسیر app/page.tsx، کد زیر را قرار دهید:
Middleware
در مرحلهی بعد، شما باید یک LanguageModelMiddleware ایجاد کنید که پاسخهای دستیار را در فضای ذخیرهسازی کلید-مقدار (KV) کش کند. LanguageModelMiddleware دو متد دارد: wrapGenerate و wrapStream.
wrapGenerate زمانی فراخوانی میشود که از توابع generateText و generateObject استفاده شود، و در این حالت میتوان پاسخ را مستقیماً کش کرد.
در مقابل، wrapStream زمانی استفاده میشود که از streamText یا streamObject استفاده شود. در این حالت، شما آرایهای از بخشهای استریمشده را کش میکنید.
میتوان با استفاده از تابع simulateReadableStream، از پاسخ کششده یک ReadableStream شبیهسازیشده ساخت که پاسخ را chunk به chunk بازمیگرداند، انگار که مدل آن را در لحظه تولید میکند. برای کنترل نحوهی شبیهسازی استریم، میتوان از دو پارامتر initialDelayInMs (تأخیر اولیه پیش از ارسال اولین chunk) و chunkDelayInMs (تأخیر بین ارسال هر chunk) استفاده کرد. به این ترتیب، پاسخ کششده بهصورت تدریجی و مشابه تولید زنده LLM، به کاربر بازگردانده میشود.
قطعه کد زیر را در مسیر ai/middleware.ts قرار دهید:
متغیر محیطی KV_URL باید به URL دیتابیس Redis شما اشاره کند.
برای اتصال به دیتابیس Redis میتوانید از دیتابیس ردیس لیارا، استفاده کنید.
سرور
در نهایت، باید یک API route به نام api/chat ایجاد کنید تا پیامها و پاسخهای دستیار را مدیریت کند. برای استفاده از cache middleware، میتوانید مدل را با استفاده از تابع wrapLanguageModel پیکربندی کرده و middleware را به عنوان آرگومان به آن منتقل کنید.
در مسیر app/api/chat/route.ts، کد زیر را قرار دهید:
متغیرهای محیطی BASE_URL و LIARA_API_KEY همان baseUrl سرویس هوش مصنوعی لیارا و کلید API لیارا هستند که باید در بخش متغیرهای محیطی برنامه خود، آنها را تنظیم کنید.
پروژه فوق را میتوانید بهصورت کامل در گیتهاب لیارا، مشاهده کنید.