อับดุลเอ้ย! ถามอะไรตอบได้ในกลุ่มไลน์ด้วย LINE x ChatGPT พัฒนาจบใน 3 ขั้นตอน!
สวัสดีครับ บทความนี้ Inspired จากคำถามที่มาจาก Community ของ LINE Developers Group Thailand ว่าอยากจะเอา ChatGPT ไปใช้ในไลน์กลุ่ม วันนี้ผมก็เลยมาจัดให้ครับ :)
ChatGPT
จริงๆไม่น่าต้องอธิบายเยอะเนอะ ChatGPT พัฒนาโดยบริษัท OpenAI เป็น AI ในรูปแบบ Chatbot ที่ปฏิวัติวงการ AI ด้วยใช้การประมวลผลภาษามนุษย์ Natural language processing (NLP) ที่สามารถทำความเข้าใจและสร้างการตอบสนองที่ใกล้เคียงคำตอบของมนุษย์ หลังจากเปิดตัวในเดือน November 2022 ใช้เวลาเพียง 5 วันในการ Acquired ผู้ใช้ 1 ล้านคน (Instagram ใช้ 2.5 เดือน, Netflix ใช้ 3.5 ปี เรียกว่าพอเปิดตัวก็ฮิตติดลมบนไปเลย) ซึ่งบทความนี้เราจะใช้ ChatGPT API เพื่อสร้าง LINE Chatbot ให้เป็นผู้ช่วยในกลุ่มไลน์กันครับ
3 Steps ในการพัฒนา
สิ่งที่เราจะทำใน Chatbot ตัวนี้ก็ง่ายๆมีอยู่แค่ 3 ขั้นตอนเท่านั้นครับ ได้แก่
- สร้าง LINE Chatbot ด้วย Cloud Functions
- สมัครเข้าใช้งาน ChatGPT API และสร้าง Secret Key เพื่อเข้าใช้งาน
- พัฒนาระบบเพื่อจัดการข้อความในกลุ่มไลน์จาก Webhook เรียกใช้ ChatGPT API และส่งผลลัพธ์หาผู้ใช้
1. สร้าง LINE Chatbot ด้วย Cloud Functions
สำหรับใครที่ยังไม่เคยพัฒนา LINE Chatbot ด้วย Cloud Functions for Firebase ให้ทำตามขั้นตอนของบทความนี้ (ข้อ 1 และ 2 ก็พอครับ)
2. สมัครเข้าใช้งาน ChatGPT API และสร้าง Secret Key เพื่อเข้าใช้งาน
ก่อนจะไปเริ่มพัฒนาผมอยากให้เราได้ API Key เพื่อเอาไว้เข้าใช้งาน ChatGPT API กันก่อน แรกสุดให้ไป Sign up สมัครเข้าใช้งาน ChatGPT ให้เรียบร้อยที่ https://chat.openai.com/auth/login
พอสมัครเรียบร้อยแล้วให้ทำการ Login ไปที่ https://platform.openai.com/account/api-keys และทำการกดปุ่ม “Create new secret key”
เมื่อได้ Secret key แล้วให้ Copy เก็บไว้ให้ดีๆเพราะมันจะไม่สามารถเรียกมาดูได้ใหม่แล้ว ถ้าเราทำหายก็คือกดสร้างใหม่ลูกเดียวฮะ
ChatGPT Billing
สำหรับการเข้าใช้งาน ChatGPT API ณ ตอนนี้ยังไม่มี Free-tier แต่ๆๆผมเข้าใจว่าถ้าเราเพิ่งสมัครใหม่เลยจะมี Credit ให้มาด้วย (ของผมได้มา 18$ แน่ะมันดัน Expired ไปแล้ว 😥) ผมก็เลยต้องทำการผูกบัตรเครดิตด้วยแต่ถ้าใครมี Credit ที่ยังไม่หมดอายุก็สามารถทดลองใช้ได้เลยฮะ (อ้อ ผมเข้าใจว่ามันแยกกันนะครับสำหรับ ChatGPT Plus กับการใช้งาน ChatGPT API ถึงจะจ่าย 20$ ต่อเดือนแล้วก็ต้องจ่ายค่า API อยู่ดี)
3. พัฒนาระบบเพื่อจัดการข้อความในกลุ่มไลน์จาก Webhook เรียกใช้ ChatGPT API และส่งผลลัพธ์หาผู้ใช้
ในโฟลเดอร์ /functions ของโปรเจคที่เราได้เตรียมไว้(ขั้นตอนที่ 1) ให้เปิดไฟล์ package.json ขึ้นมา แล้วเพิ่ม dependency ชื่อ axios และ openai เข้าไปครับ
"dependencies": {
"axios": "^1.3.6",
"firebase-admin": "^11.7.0",
"firebase-functions": "^4.3.1",
"openai": "^3.2.1"
}
จากนั้นให้เปิดไฟล์ index.js ขึ้นมาและสร้างฟังก์ชันต่างๆตาม code ด้านล่างนี้ครับ (XXXX แทนด้วยค่า Channel Access Token ส่วน YYYY แทนด้วยค่า ChatGPT Secret Key)
const functions = require("firebase-functions");
const axios = require("axios");
const LINE_MESSAGING_API = "https://api.line.me/v2/bot";
const LINE_HEADER = {
"Content-Type": "application/json",
Authorization: "Bearer XXXX"
};
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: "YYYY",
});
const openai = new OpenAIApi(configuration);
exports.LineWebhook = functions.region("asia-northeast1").https.onRequest(async (req, res) => {
const events = req.body.events;
for (const event of events) {
// Chatbot จะทำงานเฉพาะข้อความ Text ที่ถูกส่งออกมาจากกลุ่มไลน์เท่านั้น
if (event.source.type === "group" && event.type === "message" && event.message.type === "text") {
const message = event.message.text;
// วิธีการเรียกให้ Chatbot ทำงานในกลุ่มไลน์คือพิมพ์ อับดุลเอ้ย:...
if (message.includes('อับดุลเอ้ย')) {
// แกะเอาคำถามที่อยู่หลัง : เพื่อส่งให้ ChatGPT
const question = message.split(':')[1];
const response = await openaiRequest(question);
const payload = {
type: "text",
text: response,
};
await reply(event.replyToken, payload);
}
}
}
return res.end();
});
// เรียกใช้งาน ChatGPT-3
const openaiRequest = async (message) => {
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{
role: "user",
content: message,
},
],
});
console.log(JSON.stringify(completion.data));
return completion.data.choices[0].message.content;
}
const reply = async (replyToken, payload) => {
await axios({
method: "post",
url: `${LINE_MESSAGING_API}/message/reply`,
headers: LINE_HEADER,
data: JSON.stringify({
replyToken: replyToken,
messages: [payload]
})
});
};
Note: Version ของ ChatGPT ที่เราจะใช้ก็คือ GPT-3 นะครับ ถ้าใครอยากจะใช้ GPT-4 ตอนนี้ยังไม่ออก ต้องไปลงทะเบียนเป็น Wait-list ได้ที่นี่ฮะ
จากนั้นให้เปิด Terminal หรือ Command line แล้ว cd ไปที่ /functions จากนั้นให้เรียกคำสั่งด้านล่างก็สามารถทำการ Deploy ได้เบยยย
firebase deploy --only functions
เมื่อ Deploy เรียบร้อยแล้วให้เอา URL ที่มี /LineWebhook กลับไปใส่ใน LINE Developer Console
สุดท้าย ท้ายสุด เนื่องจาก Chatbot ตัวนี้จะทำงานอยู่ในกลุ่มไลน์ ดังนั้นให้เราไป Toggle อนุญาตให้มันสามารถเข้าไปอยู่ในกลุ่มด้วยครับ ไปที่ OA Manager > Settings > Account settings > Toggle features เท่านี้ก็เป็นอันเสร็จ!
ทดสอบ
สรุป
อย่างที่ทุกคนรู้เนอะว่า ChatGPT ความสามารถมันโหดขนาดไหน การสนทนา ความสามารถในการเข้าใจและสร้างการตอบสนองได้ใกล้เคียงมนุษย์เลย ซึ่งพอมี API ด้วยแล้วก็สามารถนำไปสร้างเป็นเครื่องมือที่มีประสิทธิภาพต่อยอดไปได้อีก ขนาดแค่ ChatGPT-3 ก็โหดแล้ว ถ้า ChatGPT-4 API ตัวเต็มออกมาจะโหดขนาดไหนนน