यदि आपने OpenAI API का उपयोग किया है, तो आपने देखा होगा कि यह काफी धीमा है और कभी-कभी प्रतिक्रिया भी नहीं देता है। विशेष रूप से GPT-4 मॉडल उच्च लेटेंसी प्रतिक्रियाओं के लिए प्रवण है। साथ ही, आपको मिलने वाले हर उत्तर के लिए भुगतान करना पड़ता है। ये सभी कारण हैं कि सीधे प्रतिक्रियाएं परोसने से बचा जाए।
आप इन मुद्दों से बचने के लिए अपनी प्रतिक्रियाओं को Upstash Redis में संग्रहीत कर सकते हैं। यदि आप कई क्लाइंट्स को वही प्रतिक्रिया परोस रहे हैं, तो यह आपको काफी पैसा बचा सकता है, और वैश्विक डिप्लॉयमेंट के साथ, आप सुनिश्चित हो सकते हैं कि उपयोगकर्ताओं को जानकारी जितनी जल्दी हो सके मिले।
यह लेख आपको OpenAI API प्रतिक्रियाओं को Upstash Redis डेटाबेस में कैश करने के माध्यम से मार्गदर्शन करेगा।
विशेषताएं
हम एक वेब ऐप बनाएंगे जो विज़िटर्स को इतिहास चुटकुलों की एक सूची दिखाता है।
- वर्तमान तिथि से संबंधित एक इतिहास चुटकुला प्राप्त करने के लिए दैनिक OpenAI API को क्वेरी करें
- भविष्य की डिलीवरी के लिए चुटकुले को कैश करें
- सभी चुटकुलों को प्रदर्शित करें
प्रौद्योगिकी
हम ऐप बनाने के लिए निम्नलिखित तकनीकों का उपयोग करेंगे:
- HTTP सर्वर के रूप में Node.js
- इतिहास चुटकुले उत्पन्न करने के लिए OpenAI API
- HTTP सर्वर से OpenAI API पर एक नए चुटकुला अनुरोध को ट्रिगर करने के लिए Upstash QStash
- बाद में उपयोग के लिए चुटकुले को संग्रहीत करने के लिए Upstash Redis
पूर्वापेक्षाएँ
- AI तक पहुंच प्राप्त करने के लिए API एक्सेस के साथ एक OpenAI खाता
- OpenAI API पर अनुरोध भेजने और Upstash Redis में AI प्रतिक्रियाओं को कैश करने के लिए एक Upstash खाता
- OpenAI और Upstash APIs को कॉल करने के लिए एक Node.js इंस्टॉलेशन
कार्यान्वयन
आइए चुटकुले लाने, उन्हें Upstash Redis में संग्रहीत करने, और उन्हें विज़िटर्स को प्रदर्शित करने के लिए HTTP सर्वर बनाकर शुरू करें।
प्रोजेक्ट सेट अप करना
सबसे पहले, हम एक नया Node.js प्रोजेक्ट बनाते हैं और निर्भरताएँ इंस्टॉल करते हैं।
$ mkdir history-jokes & cd history-jokes $ npm init -y $ npm i dotenv express axios @upstash/redis @upstash/qstash
सर्वर लागू करना
सर्वर को लागू करने के लिए, एक index.js फ़ाइल बनाएं और निम्न कोड को इसमें कॉपी करें:
require("dotenv").config(); const axios = require("axios"); const express = require("express"); const { Redis } = require("@upstash/redis"); const { Receiver } = require("@upstash/qstash"); const redisClient = new Redis({ url: process.env.UPSTASH_REDIS_URL, token: process.env.UPSTASH_REDIS_TOKEN, }); const qstashReceiver = new Receiver({ currentSigningKey: process.env.UPSTASH_QSTASH_CURRENT_SIGNING_KEY, nextSigningKey: process.env.UPSTASH_QSTASH_CURRENT_NEXT_KEY, }); const openaiApiClient = axios.create({ baseURL: "https://api.openai.com/v1", headers: { Authorization: "Bearer " + process.env.OPENAI_TOKEN, "Content-Type": "application/json", }, }); const server = express(); server.use("/generate", async (request, response, next) => { // return next() let validRequest = false; try { validRequest = await qstashReceiver.verify({ signature: request.headers["upstash-signature"], body: "", }); } catch (e) {} if (!validRequest) return response.status(403).end("Forbidden"); return next(); }); server.post("/generate", async (_request, response) => { const today = new Date(); const month = today.toLocaleString("default", { month: "long" }); let day = today.toLocaleString("default", { day: "numeric" }); day = day == 1 ? "1st" : day == 2 ? "2nd" : day == "3" ? "3rd" : day + "th"; const { data } = await openaiApiClient.post("/chat/completions", { model: "gpt-3.5-turbo", messages: [ { role: "system", content: "You are a comedian that tells short history jokes.", }, { role: "user", content: `Please tell me a joke for ${month} the ${day}.`, }, ], }); const joke = JSON.stringify({ date: month + " the " + day, text: data.choices[0].message.content, }); await redisClient.lpush("jokes", joke); response.end(); }); server.get("/", async (_request, response) => { let html = "<h1>History Jokes for Every Day</h1>"; const jokes = await redisClient.lrange("jokes", 0, -1); html += "<ul>" + jokes .map(({ date, text }) => `<li><b>${date}</b><br><pre>${text}</pre></li>`) .join("") + "</ul>"; response.setHeader("Content-Type", "text/html"); response.end(html); }); server.listen(3000);
आइए इस कोड के महत्वपूर्ण भागों को देखें।
हम अपने प्रतिक्रियाओं को Upstash Redis में सहेजने और प्रदर्शन के लिए उन्हें लोड करने के लिए redisClient का उपयोग करते हैं।
qstashReceiver Upstash QStash से दैनिक कॉल को सत्यापित करने के लिए जिम्मेदार है; इस तरह, हम सुनिश्चित करते हैं कि केवल QStash हमारे /generate एंडपॉइंट को कॉल करता है।
हम Axios का उपयोग OpenAI API के लिए एक क्लाइंट बनाने के लिए करते हैं, इसलिए हमें जब भी API को कॉल करते हैं तो baseUrl और Authentication हेडर पास नहीं करना पड़ता।
अगला, हम एक Express मिडलवेयर बनाते हैं जो qstashReceiver का उपयोग करके /generate एंडपॉइंट पर सभी अनुरोधों को सत्यापित करता है। चूंकि हम QStash का उपयोग केवल एंडपॉइंट को ट्रिगर करने के लिए करते हैं और कोई मान पास नहीं करते, हम body के रूप में एक खाली स्ट्रिंग का उपयोग कर सकते हैं।
नोट: यदि आप "// return next()" वाली लाइन को अन-कमेंट करते हैं तो मिडलवेयर सभी अनुरोधों को अनुमति देता है। आप इसका उपयोग localhost पर /generate एंडपॉइंट का परीक्षण करने के लिए कर सकते हैं।
/generate एंडपॉइंट POST अनुरोधों को सुनता है और वास्तविक चुटकुले बनाता है और संग्रहीत करता है। यह वर्तमान month और day की गणना करता है और AI के लिए दो प्रॉम्प्ट बनाने के लिए इसका उपयोग करता है। एक AI को कॉमेडियन की तरह व्यवहार करने के लिए कहता है, और दूसरा वर्तमान महीने और दिन के बारे में एक इतिहास चुटकुला बताने के लिए कहता है।
हम प्रॉम्प्ट के साथ OpenAI API को कॉल करते हैं और परिणाम को Upstash Redis में एक LIST में सहेजते हैं।
/ एंडपॉइंट GET अनुरोधों को सुनता है और सहेजे गए चुटकुलों को प्रदर्शित करता है। यह Upstash Redis से LIST लोड करता है, इसे HTML सूची तत्वों के रूप में प्रारूपित करता है, और इसे क्लाइंट को भेजता है।
डिप्लॉयमेंट
अब जब सर्वर सेट अप हो गया है, तो हमें क्लाउड संसाधन बनाने और उन तक पहुंचने के लिए API क्रेडेंशियल भरने होंगे।
एक क्रेडेंशियल फ़ाइल बनाना
क्रेडेंशियल स्टोर करने के लिए, निम्न सामग्री के साथ एक .env फ़ाइल बनाएं:
OPENAI_TOKEN="" UPSTASH_REDIS_REST_URL="" UPSTASH_REDIS_REST_TOKEN="" UPSTASH_QSTASH_CURRENT_SIGNING_KEY="" UPSTASH_QSTASH_NEXT_SIGNING_KEY=""
अगले चरणों में, हम इन खाली स्ट्रिंग्स में से प्रत्येक को भरेंगे।
OpenAI API टोकन बनाना
आइए OpenAI API से शुरू करें क्योंकि हमें केवल मौजूदा API के लिए एक कुंजी चाहिए; हमें कुछ भी डिप्लॉय नहीं करना है।
OpenAI वेब कंसोल पर जाएं और "create new secret key" बटन पर क्लिक करें। कुंजी को एक नाम दें, "Create secret key" पर क्लिक करें, नई कुंजी कॉपी करें, और इसे OPENAI_TOKEN के मान के रूप में .env फ़ाइल में पेस्ट करें।
QStash के साथ एक आवर्ती अनुरोध डिप्लॉय करना
QStash को यह बताने के लिए कि उसे दिन में एक बार /generate एंडपॉइंट पर अनुरोध भेजना चाहिए, आप "Request Builder" का उपयोग करते हैं। आप इसे Upstash कंसोल में पाते हैं। चित्र 1 कॉन्फ़िगरेशन विवरण दिखाता है।

चित्र 1: QStash Request Builder
<HOSTNAME> को उस डोमेन से बदलें जो आपके सर्वर को होस्ट करता है। QStash के काम करने के लिए आपको सार्वजनिक रूप से सुलभ होस्टनाम की आवश्यकता है।
आप QStash द्वारा उपयोग की जाने वाली साइनिंग कुंजियों को Upstash कंसोल में "Request Builder" अनुभाग में पाते हैं। ग्रे "Signing Keys" ड्रॉप-डाउन पर क्लिक करें, प्रत्येक कुंजी कॉपी करें और उन्हें .env फ़ाइल के सही स्थानों में पेस्ट करें।
Upstash Redis डेटाबेस डिप्लॉय करना
Upstash Redis डेटाबेस बनाने के लिए, Upstash कंसोल पर जाएं और "Create Database" बटन पर क्लिक करें।
यह आपको डेटाबेस कॉन्फ़िगरेशन भरने के लिए एक संवाद के साथ संकेत देगा। चित्र 2 उन मानों को दिखाता है जिनका आपको उपयोग करना चाहिए।

चित्र 2: Upstash Redis कॉन्फ़िगरेशन
निर्माण पूरा होने के बाद, आप "REST API" अनुभाग तक स्क्रॉल डाउन कर सकते हैं, जिसमें दो बटन हैं, "UPSTASH_REDIS_REST_URL" और "UPSTASH_REDIS_REST_TOKEN"। प्रत्येक बटन पर क्लिक करके संबंधित क्रेडेंशियल कॉपी करें और उन्हें .env फ़ाइल में सही स्थान पर पेस्ट करें।
वेबसाइट का परीक्षण
अपनी स्थानीय मशीन पर वेबसाइट का परीक्षण करने के लिए, index.js फ़ाइल में "// return next()" लाइन को अन-कमेंट करके QStash सत्यापन मिडलवेयर को निष्क्रिय करें।
निम्न कमांड के साथ सर्वर चलाएं:
$ node .
यदि आप ब्राउज़र में / रूट खोलते हैं, तो आपको केवल "History Jokes for Every Day" दिखाई देना चाहिए क्योंकि कोई चुटकुले उत्पन्न नहीं हुए हैं।
चुटकुला उत्पन्न करने के लिए आपको /generate एंडपॉइंट पर एक POST अनुरोध भेजना होगा। आप इसे इस कमांड से कर सकते हैं:
$ curl -X POST https://localhost/generate
यदि आप ब्राउज़र पेज को रीफ्रेश करते हैं, तो आपको चित्र 3 की तरह एक चुटकुला दिखाई देना चाहिए।

चित्र 3: चुटकुला वेबसाइट
यह चुटकुला अब Upstash Redis में कैश्ड है, इसलिए जब कोई वेबसाइट पर जाता है तो कोई OpenAI API अनुरोध नहीं होगा। यह आपको उप-सेकंड प्रतिक्रिया समय देता है जबकि आपको काफी पैसा बचाता है।
सारांश
AI API बहुमुखी उपकरण हैं जो इंटरनेट को बदल देंगे जैसा कि हम जानते हैं, लेकिन अभी, वे धीमे और महंगे हैं। इन APIs का उपयोग करते समय कैशिंग महत्वपूर्ण है, और Upstash Redis कुछ ही क्लिक के साथ इसे अपने स्टैक में जोड़ने का सबसे आसान तरीका है।