<पी> यदि आपने OpenAI API का उपयोग किया है, तो आपने देखा होगा कि यह काफी धीमा है और कभी-कभी प्रतिक्रिया भी नहीं देता है। विशेष रूप से GPT-4 मॉडल उच्च विलंबता प्रतिक्रियाओं से ग्रस्त है। साथ ही, आपको मिलने वाले प्रत्येक उत्तर के लिए आपको भुगतान करना पड़ता है। सीधे तौर पर प्रतिक्रिया देने से बचने के ये सभी कारण हैं। <पी> इन समस्याओं से निपटने के लिए आप अपनी प्रतिक्रियाएँ अपस्टैश रेडिस में संग्रहीत कर सकते हैं। यदि आप कई ग्राहकों को एक ही प्रतिक्रिया दे रहे हैं, तो इससे आप काफी पैसे बचा सकते हैं, और वैश्विक तैनाती के साथ, आप यह सुनिश्चित कर सकते हैं कि उपयोगकर्ताओं को जितनी जल्दी हो सके जानकारी मिल जाए। <पी> यह आलेख आपको अपस्टैश रेडिस डेटाबेस में OpenAI API प्रतिक्रियाओं को कैशिंग करने में मार्गदर्शन करेगा। विशेषताएं
<पी> हम एक वेब ऐप बनाएंगे जो आगंतुकों को इतिहास के चुटकुलों की एक सूची दिखाएगा। - वर्तमान दिनांक से संबंधित इतिहास का चुटकुला प्राप्त करने के लिए प्रतिदिन OpenAI API को क्वेरी करें
- भविष्य में डिलीवरी के लिए मजाक को कैश करें
- सभी चुटकुले प्रदर्शित करें
प्रौद्योगिकी
<पी> ऐप बनाने के लिए हम निम्नलिखित तकनीकों का उपयोग करेंगे: - Node.js HTTP सर्वर के रूप में
- ओपनएआई एपीआई इतिहास के चुटकुले उत्पन्न करने के लिए
- अपस्टैश QStash HTTP सर्वर से OpenAI API पर एक नया जोक अनुरोध ट्रिगर करने के लिए
- बाद में उपयोग के लिए चुटकुले को संग्रहीत करने के लिए अपस्टैश रेडिस
आवश्यकताएँ
- एआई तक पहुंच प्राप्त करने के लिए एपीआई एक्सेस वाला एक ओपनएआई खाता
- ओपनएआई एपीआई को अनुरोध भेजने और अपस्टैश रेडिस में एआई प्रतिक्रियाओं को कैश करने के लिए एक अपस्टैश खाता
- OpenAI और Upstash API को कॉल करने के लिए एक Node.js इंस्टॉलेशन
कार्यान्वयन
<पी> आइए चुटकुले लाने, उन्हें अपस्टैश रेडिस में संग्रहीत करने और आगंतुकों को प्रदर्शित करने के लिए 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);
<पी> आइए इस कोड के महत्वपूर्ण भागों के बारे में जानें। <पी> हम redisClient का उपयोग करते हैं हमारी प्रतिक्रियाओं को अपस्टैश रेडिस में सहेजने और उन्हें प्रदर्शन के लिए लोड करने के लिए। <पी> qstashReceiver अपस्टैश QStash से दैनिक कॉलों को सत्यापित करने के लिए जिम्मेदार है; इस तरह, हम यह सुनिश्चित करते हैं कि केवल QStash ही हमारे /generate पर कॉल करता है समापन बिंदु. <पी> हम OpenAI API के लिए क्लाइंट बनाने के लिए Axios का उपयोग करते हैं, इसलिए हमें baseUrl पास करने की आवश्यकता नहीं है और Authentication जब भी हम एपीआई को कॉल करते हैं तो हेडर। <पी> इसके बाद, हम एक एक्सप्रेस मिडलवेयर बनाते हैं जो qstashReceiver का उपयोग करता है /generate के सभी अनुरोधों को सत्यापित करने के लिए समापनबिंदु. चूँकि हम QStash का उपयोग केवल एंडपॉइंट को ट्रिगर करने के लिए करते हैं और कोई मान पास नहीं करते हैं, हम एक खाली स्ट्रिंग का उपयोग body के रूप में कर सकते हैं। . <पी> ध्यान दें:यदि आप "// return next() वाली पंक्ति को अन-टिप्पणी करते हैं तो मिडलवेयर सभी अनुरोधों की अनुमति देता है ". आप इसका उपयोग /generate का परीक्षण करने के लिए कर सकते हैं localhost पर समापन बिंदु . <पी> /generate एंडपॉइंट POST को सुनता है अनुरोध करता है और वास्तविक चुटकुले बनाता और संग्रहीत करता है। यह वर्तमान month की गणना करता है और day और एआई के लिए दो संकेत बनाने के लिए इसका उपयोग करता है। एक एआई को एक कॉमेडियन की तरह व्यवहार करने के लिए कहता है, और दूसरा वर्तमान महीने और दिन के बारे में एक इतिहास चुटकुला बताने के लिए कहता है। <पी> हम संकेतों के साथ OpenAI API को कॉल करते हैं और परिणाम को LIST में सहेजते हैं अपस्टैश रेडिस में। <पी> / एंडपॉइंट GET को सुनता है सहेजे गए चुटकुलों का अनुरोध करता है और प्रदर्शित करता है। यह LIST लोड करता है अपस्टैश रेडिस से, इसे HTML सूची तत्वों के रूप में प्रारूपित करता है, और क्लाइंट को भेजता है। तैनाती
<पी> अब जब सर्वर सेट हो गया है, तो हमें क्लाउड संसाधन बनाने होंगे और उन तक पहुंचने के लिए एपीआई क्रेडेंशियल भरना होगा। एक क्रेडेंशियल फ़ाइल बनाना
<पी> क्रेडेंशियल संग्रहीत करने के लिए, एक .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 वेब कंसोल पर जाएं और "नई गुप्त कुंजी बनाएं" बटन पर क्लिक करें। कुंजी को एक नाम दें, "गुप्त कुंजी बनाएं" पर क्लिक करें, नई कुंजी की प्रतिलिपि बनाएँ, और इसे OPENAI_TOKEN के मान के रूप में .env फ़ाइल में पेस्ट करें। . QStash के साथ आवर्ती अनुरोध तैनात करना
<पी> QStash को यह बताने के लिए कि उसे /generate पर एक अनुरोध भेजना चाहिए एंडपॉइंट दिन में एक बार, आप "रिक्वेस्ट बिल्डर" का उपयोग करते हैं। आप इसे अपस्टैश कंसोल में पाते हैं। चित्र 1 कॉन्फ़िगरेशन विवरण दिखाता है। <पी>
<पी> चित्र 1:QStash अनुरोध बिल्डर पी> <पी> <HOSTNAME> बदलें उस डोमेन के साथ जो आपके सर्वर को होस्ट करता है। QStash के काम करने के लिए आपको एक सार्वजनिक रूप से सुलभ होस्टनाम की आवश्यकता है। <पी> आपको अपस्टैश कंसोल में "रिक्वेस्ट बिल्डर" अनुभाग में QStash द्वारा उपयोग की जाने वाली गायन कुंजियाँ मिलती हैं। ग्रे "सिंगिंग कीज़" ड्रॉप-डाउन पर क्लिक करें, प्रत्येक कुंजी को कॉपी करें और उन्हें .env के सही स्थानों पर पेस्ट करें। फ़ाइल. अपस्टैश रेडिस डेटाबेस तैनात करना
<पी> अपस्टैश रेडिस डेटाबेस बनाने के लिए, अपस्टैश कंसोल पर जाएं और "डेटाबेस बनाएं" बटन पर क्लिक करें। <पी> यह आपको डेटाबेस कॉन्फ़िगरेशन भरने के लिए एक संवाद के साथ संकेत देगा। चित्र 2 उन मानों को दिखाता है जिनका आपको उपयोग करना चाहिए। <पी>
<पी> चित्र 2:अपस्टैश रेडिस कॉन्फ़िगरेशन पी> <पी> निर्माण पूरा होने के बाद, आप "REST API" अनुभाग तक नीचे स्क्रॉल कर सकते हैं, जिसमें दो बटन हैं, "UPSTASH_REDIS_REST_URL" और "UPSTASH_REDIS_REST_TOKEN"। संबंधित क्रेडेंशियल्स को कॉपी करने और उन्हें .env में सही जगह पर पेस्ट करने के लिए इनमें से प्रत्येक बटन पर क्लिक करें। फ़ाइल. वेबसाइट का परीक्षण
<पी> अपनी स्थानीय मशीन पर वेबसाइट का परीक्षण करने के लिए, "// return next() पर टिप्पणी रद्द करके QStash सत्यापन मिडलवेयर को निष्क्रिय करें index.js में पंक्ति फ़ाइल. <पी> निम्न आदेश के साथ सर्वर चलाएँ: $ node .
<पी> यदि आप ब्राउज़र में / रूट खोलते हैं, तो आपको केवल "हर दिन के लिए इतिहास चुटकुले" देखना चाहिए क्योंकि कोई चुटकुले उत्पन्न नहीं हुए हैं। <पी> आपको POST भेजना होगा /generate के लिए अनुरोध करें एक चुटकुला उत्पन्न करने के लिए समापन बिंदु। आप इस आदेश के साथ ऐसा कर सकते हैं: $ curl -X POST http://localhost/generate
<पी> यदि आप ब्राउज़र पेज को रीफ्रेश करते हैं, तो आपको चित्र 3 जैसा एक चुटकुला देखना चाहिए। <पी>
<पी> चित्र 3:मज़ाक वेबसाइट पी> <पी> यह चुटकुला अब अपस्टैश रेडिस में कैश्ड है, इसलिए जब कोई वेबसाइट पर जाएगा तो कोई ओपनएआई एपीआई अनुरोध नहीं होगा। इससे आपको कुछ सेकंड से भी कम समय में प्रतिक्रिया मिलती है और आपका काफी पैसा बच जाता है। सारांश
<पी> एआई एपीआई बहुमुखी उपकरण हैं जो इंटरनेट को बदल देंगे जैसा कि हम जानते हैं, लेकिन अभी, वे धीमे और महंगे हैं। इन एपीआई का उपयोग करते समय कैशिंग महत्वपूर्ण है, और अपस्टैश रेडिस इसे कुछ ही क्लिक के साथ अपने स्टैक में जोड़ने का सबसे आसान तरीका है।