কম্পিউটার টিউটোরিয়াল

পারফরম্যান্স বুস্ট করুন এবং খরচ কাটুন:Upstash Redis-এর সাথে ক্যাশে OpenAI API প্রতিক্রিয়া

আপনি যদি OpenAI API ব্যবহার করেন, আপনি হয়তো লক্ষ্য করেছেন যে এটি বেশ ধীর এবং কখনও কখনও প্রতিক্রিয়াও দেয় না। বিশেষ করে GPT-4 মডেল উচ্চ লেটেন্সি প্রতিক্রিয়ার প্রবণ। এছাড়াও, আপনি প্রতিটি উত্তরের জন্য অর্থ প্রদান করেন। এগুলি সরাসরি প্রতিক্রিয়া পরিবেশন এড়ানোর সমস্ত কারণ।

এই সমস্যাগুলি পেতে আপনি Upstash Redis-এ আপনার প্রতিক্রিয়া সংরক্ষণ করতে পারেন। আপনি যদি অনেক ক্লায়েন্টকে একই প্রতিক্রিয়া পরিবেশন করেন তবে এটি আপনার বেশ কিছু অর্থ সাশ্রয় করতে পারে এবং বিশ্বব্যাপী স্থাপনার মাধ্যমে আপনি নিশ্চিত হতে পারেন যে ব্যবহারকারীরা যত তাড়াতাড়ি সম্ভব তথ্য পাবেন৷

এই নিবন্ধটি আপনাকে একটি Upstash Redis ডাটাবেসে OpenAI API প্রতিক্রিয়া ক্যাশ করার মাধ্যমে গাইড করবে৷

বৈশিষ্ট্যগুলি

আমরা একটি ওয়েব অ্যাপ তৈরি করব যা দর্শকদের ইতিহাসের কৌতুকের একটি তালিকা দেখাবে।

  1. বর্তমান তারিখের সাথে সম্পর্কিত একটি ইতিহাস কৌতুক পেতে প্রতিদিন OpenAI API-কে জিজ্ঞাসা করুন
  2. ভবিষ্যত ডেলিভারির জন্য জোক ক্যাশ করুন
  3. সমস্ত জোকস দেখান

প্রযুক্তি

আমরা অ্যাপটি তৈরি করতে নিম্নলিখিত প্রযুক্তি ব্যবহার করব:

  • HTTP সার্ভার হিসাবে Node.js
  • ইতিহাসের জোকস তৈরি করতে OpenAI API
  • HTTP সার্ভার থেকে OpenAI API-তে একটি নতুন জোক রিকোয়েস্ট ট্রিগার করতে Upstash QStash
  • পরবর্তীতে ব্যবহারের জন্য কৌতুক সংরক্ষণ করতে Upstash Redis

পূর্বশর্ত

  • এআই-এ অ্যাক্সেস পেতে API অ্যাক্সেস সহ একটি OpenAI অ্যাকাউন্ট
  • ওপেনএআই এপিআই-তে অনুরোধ পাঠানোর জন্য একটি আপস্ট্যাশ অ্যাকাউন্ট এবং আপস্ট্যাশ রেডিস-এ এআই প্রতিক্রিয়াগুলি ক্যাশ করে
  • OpenAI এবং Upstash APIs কল করার জন্য একটি Node.js ইনস্টলেশন

বাস্তবায়ন

চলুন শুরু করা যাক কৌতুকগুলি আনার জন্য HTTP সার্ভার তৈরি করে, সেগুলিকে Upstash Redis-এ সংরক্ষণ করুন এবং দর্শকদের কাছে প্রদর্শন করুন৷

প্রজেক্ট সেট আপ করা

প্রথমে, আমরা একটি নতুন 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 ব্যবহার করি আমাদের প্রতিক্রিয়াগুলিকে Upstash Redis-এ সংরক্ষণ করতে এবং প্রদর্শনের জন্য লোড করতে৷

qstashReceiver Upstash QStash থেকে দৈনিক কলগুলি যাচাই করার জন্য দায়ী; এইভাবে, আমরা নিশ্চিত করি যে শুধুমাত্র QStash আমাদের /generate কল করে শেষ বিন্দু।

OpenAI API-এর জন্য ক্লায়েন্ট তৈরি করতে আমরা Axios ব্যবহার করি, তাই আমাদের baseUrl পাস করতে হবে না এবং Authentication হেডার যখনই আমরা API কল করি।

এরপর, আমরা একটি এক্সপ্রেস মিডলওয়্যার তৈরি করি যা qstashReceiver ব্যবহার করে /generate-এ সমস্ত অনুরোধ যাচাই করতে শেষ বিন্দু যেহেতু আমরা QStash ব্যবহার করি শুধুমাত্র এন্ডপয়েন্ট ট্রিগার করার জন্য এবং কোনো মান পাস করি না, তাই আমরা body হিসাবে একটি খালি স্ট্রিং ব্যবহার করতে পারি .

দ্রষ্টব্য:মিডলওয়্যার সমস্ত অনুরোধের অনুমতি দেয় যদি আপনি লাইনটি "// return next() দিয়ে আন-কমেন্ট করেন " আপনি /generate পরীক্ষা করতে এটি ব্যবহার করতে পারেন localhost এ শেষ বিন্দু .

/generate এন্ডপয়েন্ট POST এর জন্য শোনে অনুরোধ করে এবং প্রকৃত জোকস তৈরি করে এবং সঞ্চয় করে। এটি বর্তমান month গণনা করে এবং day এবং AI এর জন্য দুটি প্রম্পট তৈরি করতে এটি ব্যবহার করে। একজন এআই-কে কৌতুক অভিনেতার মতো আচরণ করতে বলে এবং দ্বিতীয়টি বর্তমান মাস এবং দিন সম্পর্কে একটি ইতিহাস রসিকতা বলতে বলে৷

আমরা প্রম্পট সহ OpenAI API কল করি এবং ফলাফলটিকে একটি LIST এ সংরক্ষণ করি আপস্ট্যাশ রেডিসে।

/ এন্ডপয়েন্ট GET এর জন্য শোনে অনুরোধ করে এবং সংরক্ষিত জোকস প্রদর্শন করে। এটি LIST লোড করে Upstash Redis থেকে, এটিকে 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 ওয়েব কনসোলে যান এবং "নতুন গোপন কী তৈরি করুন" বোতামে ক্লিক করুন। কীটির একটি নাম দিন, "গোপন কী তৈরি করুন" এ ক্লিক করুন, নতুন কীটি অনুলিপি করুন এবং OPENAI_TOKEN এর মান হিসাবে .env ফাইলে পেস্ট করুন। .

কিউস্ট্যাশের সাথে একটি পুনরাবৃত্ত অনুরোধ স্থাপন করা হচ্ছে

QStash কে জানাতে যে এটি /generate এ একটি অনুরোধ পাঠাবে এন্ডপয়েন্ট দিনে একবার, আপনি "রিকোয়েস্ট বিল্ডার" ব্যবহার করেন। আপনি এটি Upstash কনসোলে খুঁজে পাবেন। চিত্র 1 কনফিগারেশনের বিবরণ দেখায়।

পারফরম্যান্স বুস্ট করুন এবং খরচ কাটুন:Upstash Redis-এর সাথে ক্যাশে OpenAI API প্রতিক্রিয়া

চিত্র 1:QStash অনুরোধ নির্মাতা

<HOSTNAME> প্রতিস্থাপন করুন আপনার সার্ভার হোস্ট করে এমন ডোমেনের সাথে। QStash কাজ করার জন্য আপনার একটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য হোস্টনাম প্রয়োজন৷

আপনি "রিকোয়েস্ট বিল্ডার" বিভাগে আপস্ট্যাশ কনসোলে QStash ব্যবহার করা গানের কীগুলি খুঁজে পাবেন। ধূসর "Singing Keys" ড্রপ-ডাউনে ক্লিক করুন, প্রতিটি কী কপি করুন এবং .env-এর সঠিক জায়গায় পেস্ট করুন ফাইল।

একটি Upstash Redis ডেটাবেস স্থাপন করা হচ্ছে

একটি Upstash Redis ডাটাবেস তৈরি করতে, Upstash কনসোলে যান এবং "ডেটাবেস তৈরি করুন" বোতামে ক্লিক করুন৷

এটি আপনাকে ডাটাবেস কনফিগারেশন পূরণ করার জন্য একটি ডায়ালগ দিয়ে অনুরোধ করবে। চিত্র 2 আপনার ব্যবহার করা উচিত মান দেখায়.

পারফরম্যান্স বুস্ট করুন এবং খরচ কাটুন:Upstash Redis-এর সাথে ক্যাশে OpenAI API প্রতিক্রিয়া

চিত্র 2:Upstash Redis কনফিগারেশন

তৈরি সম্পূর্ণ হওয়ার পরে, আপনি "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-এর মতো একটি কৌতুক দেখতে পাবেন।

পারফরম্যান্স বুস্ট করুন এবং খরচ কাটুন:Upstash Redis-এর সাথে ক্যাশে OpenAI API প্রতিক্রিয়া

চিত্র 3:জোক ওয়েবসাইট

এই কৌতুকটি এখন Upstash Redis-এ ক্যাশ করা হয়েছে, তাই কেউ ওয়েবসাইট ভিজিট করলে কোনো OpenAI API অনুরোধ ঘটবে না। এটি আপনাকে সাব-সেকেন্ড রেসপন্স বার দেয় যখন আপনার বেশ কিছু টাকা সাশ্রয় হয়।

সারাংশ

AI API গুলি বহুমুখী সরঞ্জাম যা ইন্টারনেটকে রূপান্তরিত করবে যেমনটি আমরা জানি, কিন্তু এই মুহূর্তে, সেগুলি ধীর এবং ব্যয়বহুল। এই APIগুলি ব্যবহার করার সময় ক্যাশিং অত্যাবশ্যক, এবং Upstash Redis হল কয়েকটি ক্লিকের মাধ্যমে এটিকে আপনার স্ট্যাকে যুক্ত করার সবচেয়ে সহজ উপায়৷


  1. C++ এ বাইনারি ট্রি-তে দুটি প্রদত্ত স্তরের মধ্যে সমস্ত নোড প্রিন্ট করুন

  2. HTML DOM স্টোরেজ কী() পদ্ধতি

  3. C++ এ RMQ ব্যবহার করে বাইনারি ট্রিতে LCA খুঁজুন

  4. Tkinter এ মেনু আইটেমে একটি বিভাজক কিভাবে যোগ করবেন?