อับดุลเอ้ย! ถามอะไรตอบได้ในกลุ่มไลน์ด้วย LINE x ChatGPT พัฒนาจบใน 3 ขั้นตอน!

Tan Warit
LINE Developers Thailand
4 min readApr 27, 2023

สวัสดีครับ บทความนี้ 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 ขั้นตอนเท่านั้นครับ ได้แก่

  1. สร้าง LINE Chatbot ด้วย Cloud Functions
  2. สมัครเข้าใช้งาน ChatGPT API และสร้าง Secret Key เพื่อเข้าใช้งาน
  3. พัฒนาระบบเพื่อจัดการข้อความในกลุ่มไลน์จาก 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 อยู่ดี)

เรื่องราคาของ ChatGPT 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 ตัวเต็มออกมาจะโหดขนาดไหนนน

Reference

--

--