หากคุณใช้ OpenAI API คุณอาจสังเกตเห็นว่ามันค่อนข้างช้าและบางครั้งก็ไม่ตอบสนองด้วยซ้ำ โดยเฉพาะรุ่น GPT-4 มีแนวโน้มที่จะตอบสนองความล่าช้าสูง นอกจากนี้คุณยังจ่ายเงินสำหรับทุกคำตอบที่คุณได้รับ ทั้งหมดนี้คือเหตุผลในการหลีกเลี่ยงการตอบกลับโดยตรง
คุณสามารถจัดเก็บคำตอบไว้ใน Upstash Redis เพื่อแก้ไขปัญหาเหล่านี้ หากคุณให้บริการลูกค้าจำนวนมากด้วยการตอบสนองแบบเดียวกัน วิธีนี้จะช่วยให้คุณประหยัดเงินได้พอสมควร และด้วยการปรับใช้ทั่วโลก คุณจะมั่นใจได้ว่าผู้ใช้จะได้รับข้อมูลโดยเร็วที่สุด
บทความนี้จะแนะนำคุณเกี่ยวกับการแคชการตอบสนองของ OpenAI API ไปยังฐานข้อมูล Upstash Redis
คุณสมบัติ
เราจะสร้างแอปพลิเคชันเว็บเพื่อแสดงรายการตลกประวัติศาสตร์แก่ผู้เยี่ยมชม
- ค้นหา OpenAI API ทุกวันเพื่อรับเรื่องตลกเกี่ยวกับประวัติศาสตร์ที่เกี่ยวข้องกับวันที่ปัจจุบัน
- แคชเรื่องตลกสำหรับการจัดส่งในอนาคต
- แสดงเรื่องตลกทั้งหมด
เทคโนโลยี
เราจะใช้เทคโนโลยีต่อไปนี้เพื่อสร้างแอป:
- Node.js เป็นเซิร์ฟเวอร์ HTTP
- OpenAI API เพื่อสร้างเรื่องตลกในอดีต
- ปรับปรุง QStash เพื่อทริกเกอร์คำขอตลกใหม่จากเซิร์ฟเวอร์ HTTP ไปยัง OpenAI API
- Upstash Redis เพื่อจัดเก็บเรื่องตลกเพื่อใช้ในภายหลัง
ข้อกำหนดเบื้องต้น
- บัญชี OpenAI พร้อมการเข้าถึง API เพื่อเข้าถึง AI
- บัญชี Upstash เพื่อส่งคำขอไปยัง OpenAI API และแคชการตอบสนองของ AI ใน Upstash Redis
- การติดตั้ง Node.js เพื่อเรียกใช้ OpenAI และ Upstash API
การใช้งาน
เริ่มต้นด้วยการสร้างเซิร์ฟเวอร์ HTTP เพื่อดึงเรื่องตลก เก็บไว้ใน Upstash Redis และแสดงให้ผู้เยี่ยมชมเห็น
การตั้งค่าโครงการ
ขั้นแรก เราสร้างโปรเจ็กต์ Node.js ใหม่และติดตั้งการขึ้นต่อกัน
$ mkdir history-jokes & cd history-jokes
$ npm init -y
$ npm i dotenv express axios @upstash/redis @upstash/qstash การใช้งานเซิร์ฟเวอร์
หากต้องการใช้งานเซิร์ฟเวอร์ ให้สร้าง 08 ไฟล์และคัดลอกโค้ดต่อไปนี้ลงไป:
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); มาดูส่วนสำคัญของโค้ดนี้กันดีกว่า
เราใช้ 10 เพื่อบันทึกคำตอบของเราลงใน Upstash Redis และโหลดเพื่อแสดงผล
26รหัส> มีหน้าที่ตรวจสอบการโทรรายวันจาก Upstash QStash ด้วยวิธีนี้ เรามั่นใจว่ามีเพียง QStash เท่านั้นที่เรียก 36 ของเรา จุดสิ้นสุด
เราใช้ Axios เพื่อสร้างไคลเอนต์สำหรับ OpenAI API ดังนั้นเราจึงไม่ต้องส่ง 44 และ 51รหัส> ส่วนหัวเมื่อใดก็ตามที่เราเรียก API
ต่อไป เราจะสร้างมิดเดิลแวร์ Express ที่ใช้ 66 เพื่อตรวจสอบคำขอทั้งหมดไปยัง 71 จุดสิ้นสุด เนื่องจากเราใช้ QStash เพื่อทริกเกอร์จุดสิ้นสุดเท่านั้นและไม่ส่งผ่านค่าใดๆ เราจึงสามารถใช้สตริงว่างเป็น 83 .
หมายเหตุ:มิดเดิลแวร์อนุญาตคำขอทั้งหมดหากคุณยกเลิกการแสดงความคิดเห็นในบรรทัดที่มี "96 ". คุณสามารถใช้สิ่งนี้เพื่อทดสอบ 102 จุดสิ้นสุดบน 116 .
123รหัส> จุดสิ้นสุดรับฟัง 134 ร้องขอและสร้างและจัดเก็บเรื่องตลกที่เกิดขึ้นจริง โดยจะคำนวณ 149 ปัจจุบัน และ 156รหัส> และใช้มันเพื่อสร้างพรอมต์สองรายการสำหรับ AI คนหนึ่งบอกให้ AI ทำตัวเหมือนนักแสดงตลก และอีกคนขอให้เล่าเรื่องตลกเกี่ยวกับประวัติศาสตร์เกี่ยวกับเดือนและวันปัจจุบัน
เราเรียก OpenAI API พร้อมข้อความแจ้งและบันทึกผลลัพธ์เป็น 166 ใน Upstash Redis
175รหัส> จุดสิ้นสุดรับฟัง 188 ร้องขอและแสดงเรื่องตลกที่บันทึกไว้ มันโหลด 198 จาก Upstash Redis จัดรูปแบบเป็นองค์ประกอบรายการ HTML และส่งไปยังไคลเอนต์
การปรับใช้
เมื่อตั้งค่าเซิร์ฟเวอร์แล้ว เราต้องสร้างทรัพยากรระบบคลาวด์และกรอกข้อมูลประจำตัว API เพื่อเข้าถึงทรัพยากรเหล่านั้น
การสร้างไฟล์ข้อมูลรับรอง
หากต้องการจัดเก็บข้อมูลรับรอง ให้สร้าง 202 ไฟล์ที่มีเนื้อหาดังต่อไปนี้:
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 แล้วคลิกปุ่ม “สร้างรหัสลับใหม่” ตั้งชื่อคีย์ คลิก “สร้างคีย์ลับ” คัดลอกคีย์ใหม่ และวางลงในไฟล์ .env เป็นค่า 216 .
ปรับใช้คำขอที่เกิดซ้ำด้วย QStash
เพื่อบอก QStash ว่าควรส่งคำขอไปที่ 221 จุดสิ้นสุดวันละครั้ง คุณใช้ “Request Builder” คุณพบมันในคอนโซล Upstash รูปที่ 1 แสดงรายละเอียดการกำหนดค่า

รูปที่ 1:ตัวสร้างคำขอ QStash ป>
แทนที่ 232 กับโดเมนที่โฮสต์เซิร์ฟเวอร์ของคุณ คุณต้องมีชื่อโฮสต์ที่เข้าถึงได้แบบสาธารณะเพื่อให้ QStash ทำงานได้
คุณพบคีย์การร้องเพลงที่ QStash ใช้ในคอนโซล Upstash ในส่วน “Request Builder” คลิกที่เมนูแบบเลื่อนลง "Singing Keys" สีเทา คัดลอกแต่ละคีย์และวางในตำแหน่งที่ถูกต้องของ 241 ไฟล์.
การปรับใช้ฐานข้อมูล Upstash Redis
หากต้องการสร้างฐานข้อมูล Upstash Redis ให้ไปที่คอนโซล Upstash แล้วคลิกปุ่ม “สร้างฐานข้อมูล”
สิ่งนี้จะแจ้งให้คุณทราบพร้อมกล่องโต้ตอบเพื่อกรอกการกำหนดค่าฐานข้อมูล รูปที่ 2 แสดงค่าที่คุณควรใช้

รูปที่ 2:การกำหนดค่า Upstash Redis ป>
หลังจากการสร้างเสร็จสมบูรณ์ คุณสามารถเลื่อนลงไปที่ส่วน “REST API” ซึ่งมีปุ่มสองปุ่ม “UPSTASH_REDIS_REST_URL” และ “UPSTASH_REDIS_REST_TOKEN” คลิกปุ่มแต่ละปุ่มเหล่านี้เพื่อคัดลอกข้อมูลรับรองที่เกี่ยวข้องและวางลงในตำแหน่งที่ถูกต้องใน 254 ไฟล์.
การทดสอบเว็บไซต์
หากต้องการทดสอบเว็บไซต์บนเครื่องของคุณ ให้ปิดใช้งานมิดเดิลแวร์ตรวจสอบ QStash โดยยกเลิกการใส่เครื่องหมายความคิดเห็น “264 ” บรรทัดใน 277 ไฟล์.
รันเซิร์ฟเวอร์ด้วยคำสั่งต่อไปนี้:
$ node . หากคุณเปิด / เส้นทางในเบราว์เซอร์ คุณจะเห็นเฉพาะ "เรื่องตลกในอดีต" เท่านั้น เนื่องจากไม่มีการสร้างเรื่องตลก
คุณต้องส่ง 281 ขอ 291 จุดสิ้นสุดเพื่อสร้างเรื่องตลก คุณสามารถทำได้ด้วยคำสั่งนี้:
$ curl -X POST http://localhost/generate หากคุณรีเฟรชหน้าเบราว์เซอร์ คุณจะเห็นเรื่องตลกเหมือนในรูปที่ 3

รูปที่ 3:เว็บไซต์โจ๊ก ป>
ตอนนี้เรื่องตลกนี้ถูกแคชไว้ใน Upstash Redis ดังนั้นจึงไม่มีคำขอ OpenAI API ที่จะเกิดขึ้นเมื่อมีผู้เยี่ยมชมเว็บไซต์ ซึ่งให้เวลาตอบสนองเสี้ยววินาทีในขณะที่ประหยัดเงินไปพอสมควร
สรุป
AI API เป็นเครื่องมืออเนกประสงค์ที่จะเปลี่ยนแปลงอินเทอร์เน็ตอย่างที่เรารู้ๆ กัน แต่ตอนนี้ API นั้นช้าและมีราคาแพง การแคชมีความสำคัญเมื่อใช้ API เหล่านี้ และ Upstash Redis เป็นวิธีที่ง่ายที่สุดในการเพิ่มลงในสแต็กของคุณด้วยการคลิกเพียงไม่กี่ครั้ง