ทำ LINE Chatbot ให้ฉลาดขึ้นด้วย ChatGPT ผ่านภาษา PHP

Aeknarin Sirisub
LINE Developers Thailand

--

กราบสวัสดีเพื่อนๆ ชาว LINE Developers ทุกๆท่านนะฮะ รอบนี้กวิ้นหายไป นานมากๆ เกือบปีเลยทีเดียว แต่กวิ้นไม่ได้หายไปเปล่าๆนะ รอบนี้กวิ้นกลับมาพร้อมกับเนื้อหาที่เข้มข้น กับเรื่องของการทำ LINE Chatbot เชื่อมต่อกับ ChatGPT นั่นเอง เนื้อหาจะเป็นอย่างไรไปติดตามดูกันเลยย

PART 1 — สร้าง API Key ของ ChatGPT

ก่อนอื่นเลยเราต้องทำการเข้าไปที่ https://platform.openai.com/account/api-keys เพื่อทำการสร้าง API Key ซะก่อนซึ่งเมื่อเข้ามาแล้วจะขึ้นหน้าจอแบบนี้

ให้เรากดไปที่ปุ่ม Log in ได้เลย ก็จะเข้ามาที่หน้าจอสำหรับ Log in สามารถเลือก Log in ตามความสะดวกได้เลย เพราะว่าสามารถ Log in ได้ทั้ง Email,Gmail,Microsoft และ Apple

เมื่อเราทำการ Log in แล้วและหากว่าเราพึ่งเข้าใช้งานครั้งแรก จะต้องทำการกรอกข้อมูลซะก่อน ซึ่งจะมีข้อมูลให้กรอกดังนี้
- ชื่อ
- นามสกุล
- ชื่อองค์กร (กรอกหรือไม่กรอกก็ได้)
- วัน/เดือน/ปี เกิด

เมื่อเรากรอกข้อมูลครบถ้วนแล้วให้ทำการกดปุ่ม Continue เพื่อไปต่อ หลังจากที่กดปุ่ม Continue แล้วก็จะขึ้นหน้าสำหรับยืนยันเบอร์โทรศัพท์

เมื่อเราทำการกรอกเบอร์โทรศัพท์แล้วระบบจะทำการส่ง SMS รหัสสำหรับยืนยันไปที่เบอร์โทรศัพท์ของเรา เมื่อได้รับรหัสที่ส่งมาทาง SMS แล้วก็ให้เราทำการกรอก รหัส 6 หลักเข้าไป

เมื่อเราทำการกรอกรหัสผ่านที่ระบบส่งเข้ามาที่ SMS ได้ถูกต้องแล้ว จะเข้ามาสู่หน้าจอสำหรับสร้าง API Key ของ ChatGPT แล้วนั่นเอง

ให้เราทำการกดปุ่ม Create new secret key เพื่อทำการสร้าง API Key

เมื่อเรากดไปที่ปุ่ม Create new secret key จะขึ้นหน้าจอให้กรอกชื่อของ Key ให้ทำการกรอกชื่อของ Key ลงไปได้เลย และ ให้กดที่ปุ่ม Create secret key

หลังจากนั้นก็จะขึ้นหน้าจอสำหรับแสดงข้อมูล secret key ขึ้นมาให้เราทำการ copy secret key อันนี้เก็บไว้

PART 2— ตั้งค่าการชำระเงินเพื่อเริ่มต้นใช้งาน API ChatGPT

ก่อนที่เราจะสามารถใช้งานในส่วนของ API ของ ChatGPT ได้นั้นเราจะต้องทำการตั้งค่าการชำระเงินซะก่อน ให้เราสังเกตที่มุมบนขวาจะมีปุ่มขึ้นมาให้กดว่า Upgrade ให้เราทำการกดเข้าไปเพื่อทำการตั้งค่าการชำระเงิน

เมื่อเข้ามาแล้วให้เราทำการกดไปที่ปุ่ม Set up paid account

หลังจากนั้นจะขึ้น Popup สำหรับให้เลือกว่าเราจะใช้เป็นแบบส่วน บุคคล (I’m an individual) หรือ นิติบุคคล (I’m working on behalf of a company)ในส่วนนี้กวิ้นขอเลือกเป็นแบบส่วนบุคคลนะครับ

เมื่อเรากดเลือกแบบ บุคคล มาแล้วระบบจะให้เรากรอกข้อมูลในส่วนของ บัตรเครดิต และ ในส่วนของข้อมูลสำหรับจัดส่งเอกสาร
Card information : ส่วนของข้อมูลบัตรเครดิต
Name on card : ชื่อของผู้ใช้บัตรเครดิต
Billing address : ที่อยู่สำหรับจัดส่งเอกสาร

โดยทันทีที่เราทำการผูกบัตรเครดิตระบบจะทำการหักเงินในบัตรทันทีจำนวน 5$ ซึ่งถ้าหากบัตรของเราไม่สามารถตัดได้ระบบจะไม่ยอมให้บันทึกบัตรเครดิตนั้นเข้าไป ถ้าหากเราบันทึกข้อมูลในส่วนของบัตรเครดิต และ การตั้งค่าเรียบร้อยแล้วจะขึ้นเป็นปุ่ม Cancel paid account แทน

PART 3— เชื่อมต่อ LINE Chatbot กับ ChatGPT

ถ้าหากว่าใครยังไม่เคยเชื่อมต่อระบบกับ LINE Messaging API กวิ้นแนะนำให้ไปอ่านบทความนี้ก่อนนะครับ

ถ้าใครที่สามารถเชื่อม LINE Messaging API ได้แล้วงั้นเรามาเชื่อมต่อ chatbot ของเรากับ ChatGPT กันเลย โดยที่ code หลักๆ ของเราจะยังใช้ตัวตั้งต้นจากการเขียน LINE Chatbot ตามปกติ แต่สิ่งที่เราเพิ่มมานั่นก็คือ ตอนที่จะตอบกลับเราจะทำการส่งข้อความ ไปให้ ChatGPT ประมวลผลก่อนนั่นเอง โดยก่อนอื่นให้เราทำการเพิ่ม function สำหรับเชื่อมต่อกับ ChatGPT เข้าไปก่อน แบบนี้

function connectChatGPT($text)
{
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.openai.com/v1/chat/completions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "'.$text.'"}],
"temperature": 0.7
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer <ChatGPT token>'
),
));

$response = curl_exec($curl);

curl_close($curl);

$deCodeChatGPT = json_decode($response,true);

return $deCodeChatGPT['choices'][0]['message']['content'];
}

ซึ่งส่วนของ body ที่เราทำการส่งข้อมูลไปให้ ChatGPT นั้นจะมีองค์ประกอบหลักๆดังนี้
model : คือการเลือกใช้ model ของ ChatGPT นั่นเองว่าเราอยากจะใช้ model ไหนซึ่งปัจจุบัน model ที่ใช้ได้ล่าสุดนั่นก็คือ GPT-4 (แต่ในบทความนี้ผมจะใช้ GPT-3.5 เนื่องจากราคาย่อมเยาว์กว่า)
messages : คือการกำหนดข้อความที่เราต้องการส่งไปให้ ChatGPT ประมวลผลนั่นเอง
temperature :
Low temperature (0 to 0.3) จะเน้นไปที่ coherent และ conservative
Medium temperature (0.3 to 0.7) จะทำการบาลานส์ระหว่าง creativity และ coherence
High temperature (0.7 to 1) จะมีความ creative ที่สูงและมีความหลากหลาย แต่จะทำให้มีความสอดคล้องน้อยลง

{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "'.$text.'"}],
"temperature": 0.7
}

หลังจากนั้นเราก็จะทำการเชื่อมกับตัว code เดิมที่เราเคยเขียนไว้แล้วโดยเพิ่มส่วนของการรับค่าข้อความการตอบกลับจาก ChatGPT เข้าไปนั่นเอง

<?php 
define('UPLOAD_DIR', 'tmp_image_2/');
/*Get Data From POST Http Request*/
$datas = file_get_contents('php://input');
/*Decode Json From LINE Data Body*/
$deCode = json_decode($datas,true);
file_put_contents('log-2.txt', file_get_contents('php://input') . PHP_EOL, FILE_APPEND);

$replyToken = $deCode['events'][0]['replyToken'];
$userId = $deCode['events'][0]['source']['userId'];
$type = $deCode['events'][0]['type'];
$uniqueIDData = uniqid();

/*LINE Token*/
$token = "<LINE token>";

$messages = [];

if($type == 'message'){
$subType = $deCode['events'][0]['message']['type'];
if($subType == 'text'){
$text = $deCode['events'][0]['message']['text'];
/*Connect ChatGPT*/
$textFromGPT = connectChatGPT($text);
}else{
$text = "ไม่สามารถส่งข้อมูลชนิดอื่นนอกจากข้อความได้";
}
}else{
$text = "ไม่สามารถส่งข้อมูลชนิดอื่นนอกจากข้อความได้";
}


$messages['messages'][0] = getFormatTextMessage($textFromGPT);

$messages['replyToken'] = $replyToken;

$encodeJson = json_encode($messages);
$LINEDatas['token'] = $token;
$LINEDatas['url'] = "https://api.line.me/v2/bot/message/reply";
$results = sentMessage($encodeJson,$LINEDatas);

/*Return HTTP Request 200*/
http_response_code(200);

function getFormatTextMessage($text)
{
$datas = [];
$datas['type'] = 'text';
$datas['text'] = $text;
return $datas;
}

function sentMessage($encodeJson,$datas)
{
$datasReturn = [];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $datas['url'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $encodeJson,
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$datas['token'],
"cache-control: no-cache",
"content-type: application/json; charset=UTF-8",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
$datasReturn['result'] = 'E';
$datasReturn['message'] = $err;
} else {
if($response == "{}"){
$datasReturn['result'] = 'S';
$datasReturn['message'] = 'Success';
}else{
$datasReturn['result'] = 'E';
$datasReturn['message'] = $response;
}
}
return $datasReturn;
}

function connectChatGPT($text)
{
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.openai.com/v1/chat/completions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "'.$text.'"}],
"temperature": 0.7
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer <ChatGPT token>'
),
));

$response = curl_exec($curl);

curl_close($curl);

$deCodeChatGPT = json_decode($response,true);

return $deCodeChatGPT['choices'][0]['message']['content'];

}
?>

เมื่อเราทำการเขียน code และ ทำการเชื่อมต่อกับ LINE Messaging API เรียบร้อยแล้วเราก็มาลองทดสอบกันเลย

แค่นี้เราก็สามารถเชื่อมต่อ LINE Chatbot ของเรากับ ChatGPT ได้แล้วววว

เป็นยังไงกันบ้างสำหรับบทความนี้หวังว่าเพื่อนๆ ของกวิ้น จะสามารถนำไปปรับใช้กับ chatbot ของเพื่อนๆ กันได้นะครับ สุดท้ายกวิ้นจะฝากบอกเพื่อนๆว่าการใช้งาน ChatGPT API มีการคิดเงินด้วยนะจ๊ะ อย่าลืมศึกษาเรื่องของการคิดคำนวนการใช้งานด้วยนะ ไม่อย่างงั้นจะหาว่ากวิ้นไม่เตือน สำหรับวันนี้กวิ้นต้องไปก่อนแล้ว ไว้เจอกันใหม่ บ๊ายบายย

ตอนนี้ LINE Developers เรามีแฟนเพจ และ ช่อง youtube แล้วนะจ๊ะอย่าลืมไปกด LIKE และ กดติดตามกันด้วยน้าาา

https://www.facebook.com/LINEDEVTH

ส่วนใครที่ยังไม่ได้เข้าร่วมกลุ่มกับเรา คลิ๊กที่นี่ได้เลย

https://www.facebook.com/groups/LINEDEVTH

https://www.youtube.com/@LINEDevelopersThailand

Resources

Developer console
https://developers.line.biz/console/

Messaging API Document
https://developers.line.biz/en/docs/messaging-api/

Messaging API Reference
https://developers.line.biz/en/reference/messaging-api/

GPT Pricing
https://openai.com/pricing

--

--