สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT OpenAI API

สวัสดีค่ะทุกท่าน,, ในยุคปัจจุบันสำหรับเราชาว Marketer ที่ต้องอ่านเนื้อหาต่างๆ ประมวลผล และสรุปเอาสาระสำคัญ เพื่อมาวิเคราะห์ หรือสร้าง content ที่น่าสนใจใหม่ๆ ซึ่งปริมาณเนื้อหาและความหลากหลายของบทความที่ต้องอ่านในแต่ละวันเยอะมากกก ในบทความนี้จะมาแก้ปัญหาที่เราต้องพบเจอด้วยการสร้างระบบสรุปโพสต์แบบอัตโนมัติ ด้วยการใช้ ChatGPT และ Google Apps Script เพื่อช่วยร่นระยะเวลาในการกรอง และตัดทิ้งบทความที่ไม่เกี่ยวเนื่องกับความต้องการของเรา

ซึ่งหลังจากที่นิกเริ่มต้นหาข้อมูลในการเขียนบทความหรือทำงานวิจัยต่างๆ ปัญหาหนึ่งที่นิกเจอก็คือตัวเองใช้เวลาอ่านเนื้อหาต่างๆ มากเกินไป เพราะพยายามสรุปข้อมูลที่สำคัญที่สุดจากบทความเหล่านั้น ดังนั้นนิกเลยต้องการวิธีที่รวดเร็วในการพิจารณาว่าโพสต์ใดคุ้มค่าที่จะอ่านทั้งหมดโดยไม่ต้องเสียเวลาเข้าไปกรองเนื้อหาทั้งหมด นั่นคือที่มาของการใช้ Apps Script และ ChatGPT เพราะด้วยการใช้เครื่องมือเหล่านี้ร่วมกัน ทำให้เราสามารถสร้างบทสรุปที่กระชับ ในขณะที่ยังคงได้รับข้อมูลที่สำคัญอย่างครบถ้วน ^^

ในบทความนี้นิกเลยจะพาทุกท่านมาทดลองใช้ความสามารถของ ChatGPT ที่ Integrate กับ Apps Script เพื่อช่วยสรุปบทความหรือเนื้อหาที่เราต้องการอ่านลงใน GoogleSheet ง่ายๆ ซึ่งในนั้นจะประกอบด้วย URL สำหรับบล็อกและคอลัมน์สรุป ซึ่งจะวางสรุปสำหรับบล็อกแต่ละบล็อกไว้ค่ะ

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

หากทุกท่านต้องการใช้งาน SpreadSheet ให้คลิกที่นี่ และเมื่อคัดลอก SpreadSheet แล้ว ให้ทุกท่านดำเนินการเปลี่ยนรหัส API ในโค้ด Google Apps Script ด้วยนะคะ,,,, ว่าแล้วก็มาเริ่มทำกันแบบ Step-by-Step ดังนี้ได้เลยค่ะ

#1 ขั้นตอนแรก: รับคีย์ API

ในการรับ API Key ของ OpenAI ให้เริ่มต้นด้วยการเข้าสู่ระบบบัญชี OpenAI ของเราบนจาก https://platform.openai.com/docs/overview และเมื่อเราเข้าสู่ระบบ (ในที่นี้นิกใช้การ Login ด้วย Google Account นะคะ) หลังจากนั้นให้เลือกที่แท็บ “API key

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

แล้วสร้าง API keys ของเราใหม่ด้วยการเลือก “+ Create new secret key” จะมี Pop-up ขึ้นมาให้ตั้งชื่อ API key ของเราเป็น Option กันลืมว่า Key นี้สำหรับโปรเจคอะไร กรณีที่เรามีหลาย API-key

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

หลังจากนั้นเมื่อได้ API Key แล้วให้เรา Copy ไปเก็บเอาไว้นะคะ (ถ้าลืม Copy ต้อง Create ใหม่เท่านั้นเลยค่ะ หายแล้วหายเลย^^)

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

ซึ่งเมื่อเรามี API Key ของเราแล้ว ก็จะสามารถใช้คีย์นี้เพื่อยืนยันคำขอของเราไปยัง OpenAI API และร่วมกับ GoogleSheets ด้วยการเพิ่ม API Key ลงในโค้ดของ Apps Script ของเรา และเลือกใช้ฟังก์ชันที่เหมาะสมเพื่อส่งคำขอไปยัง API

และตอนนี้ทุกท่านก็ถือว่าเตรียม environment พร้อมแล้วสำหรับการใช้ Generative AI เป็นผู้ช่วยในการสรุปเนื้อหาที่เราต้องการอ่านลงใน Google Spreadsheet แบบอัตโนมัติ ==>> ถ้าอย่างนั้น มาเริ่มขั้นตอนต่อไปกันได้เลยค่ะ

#2 การสร้างระบบอัตโนมัติใน Google Apps Script

ให้ทุกท่านเปิด GoogleSheet แล้วเพิ่ม Extension App Script เข้าไป หรือไปที่ Script Editor เพื่อเขียน Google AppsScript: https://script.google.com/ เมื่อเข้ามาแล้วให้ “+ Add new project” ก็จะได้หน้าต่างของ Script Editor ขึ้นมา

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

ซึ่งหมายความว่าตอนนี้เราได้ Script Editor มาเรียบร้อยแล้วค่ะ และต่อไปเราจะมาเริ่ม Codding ให้ GoogleSheet สามารถใช้ API key จาก Service ที่เรา Generated มาก่อนหน้านี้ช่วยสรุปข้อมูลของเนื้อหา/บทความที่เราสนใจจาก URL ที่ใส่เป็น Input ลงใน Google Sheets แบบอัตโนมัติ

โดยในส่วนต้นจะเริ่มด้วยการประกาศฟังก์ชันใหม่เป็นฟังก์ชัน BlogSummary() และประกาศโมเดลที่เราต้องการจะใช้งาน ซึ่งในที่นี้นิกใช้เป็น gpt-3.5-turbo-instruct (สำหรับโมเดลอื่นๆ ทุกท่านสามารถเข้าไปดูและเลือกตามความเหมาะสมได้ที่ Model

ซึ่งโค้ดบรรทัดต่อไปหลังจากประกาศโมเดลแล้ว เราจะประกาศจำนวน Token ที่จะสร้างในการตอบสนองสำหรับ URL ของเนื้อหาที่เราส่งไปสรุป หลังจากประกาศจำนวน Token สูงสุดแล้ว เราจะดำเนินการประกาศ Temperature เพื่อควบคุมการ Random (หรือความ Varity) ของการตอบสนองที่ให้ไว้ตามคำสั่ง (สำหรับเพื่อนๆ ที่ต้องการศึกษาเรื่อง Parameters ในการตั้งค่าอื่นๆ เพิ่มเติมสามารถเข้าไปศึกษาได้ที่ Completions

var API_key = “ใส่ API key ของแต่ละท่านลงไป
function BlogSummary(){
var Model_ID = “gpt-3.5-turbo-instruct”;
var maxtokens = 200;
var temperature = 0.7;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(“Sheet1”);
var urls = sheet.getRange(“A2:A6”).getValues()

หลังจากประกาศพารามิเตอร์บางตัวแล้ว เราจะเริ่มด้วยการดึง URLs จาก Sheet ซึ่งเราจะส่งไปยัง Prompts โดยเริ่มต้นด้วยการดึง SpreadSheet โดยใช้ฟังก์ชัน getActiveSpreadsheet() หลังจากดึง SpreadSheet แล้วเราจะดำเนินการดึง Sheet เฉพาะโดยใช้ฟังก์ชัน getSheetByName()

*ในที่นี้ จะขอยกตัวอย่างเป็นการสรุปเนื้อหาจาก 5 URL ค่ะ หลังจากนั้นเราจะกำหนด Limit ด้วยฟังก์ชัน getRange() เมื่อเราได้ช่วงที่กำหนดแล้ว เราจะใช้ฟังก์ชัน getValues() ในการดึงค่าจาก URL และหลังจากดึงค่าแล้ว เราจะใช้ Logger.log() เพื่อตรวจสอบว่าเราได้รับ Link ครบถ้วนหรือไม่

for(var i=0; i<urls.length;i++){
var url = urls[i][0]
var payload = {
‘model’: Model_ID,
‘prompt’: ‘Please generate a 50 word summary for the following blog post:\n’+url,
‘temperature’: temperature,
‘max_tokens’:maxtokens,
“presence_penalty”: 0.5,
“frequency_penalty”: 0.5
}

ตอนนี้เรามีลิงก์ทั้งหมดสำหรับบล็อกในตัวแปรเดียวแล้ว ถึงเวลาที่จะรับลิงก์แต่ละรายการเพื่อส่งเป็นคำสั่ง ในการดำเนินการนี้ เราจะเปิดลูป for ซึ่งเราจะวนซ้ำผ่านตัวแปร urls เพื่อตรวจสอบว่าเราได้รับลิงก์ถูกต้องหรือไม่ โดยเราจะเรียกใช้ Logger.log ง่ายๆ และแสดง url แต่ละรายการ

ส่วนนี้ของโค้ดจะกำหนดพารามิเตอร์สำหรับคำขอ Open AI API เราเริ่มต้นด้วยการประกาศโมเดลที่ต้องการซึ่งเราประกาศไว้ก่อนหน้านี้ หลังจากประกาศโมเดลแล้ว เราจะดำเนินการประกาศ Prompt ที่เราจะใช้ และเราจะเพิ่ม URL สำหรับแต่ละบล็อก เมื่อเราประกาศ Prompt แล้ว เราจะประกาศ Temperature เพื่อควบคุมความสุ่มของการตอบสนองตาม Prompt หลังจากนั้น เราจะประกาศจำนวน Tokens เพื่อสร้างการตอบสนอง


var options = {
“method”: “post”,
“headers”: {
“Content-Type”: “application/json”,
“Authorization”: “Bearer ” + API_key
},

“payload”: JSON.stringify(payload)
}

Option variable (var options) ใช้เพื่อกำหนดพารามิเตอร์สำหรับคำขอ HTTP ที่จะส่งไปยัง Open AI API เราเริ่มต้นด้วยการประกาศ Method Parameters ที่จะโพสต์ซึ่งระบุว่าคำขอจะส่งข้อมูลไปยัง API โดยส่วนหัวจะระบุประเภทของข้อมูลที่จะส่งในคำขอ ซึ่งในกรณีนี้คือ “application/json” ซึ่งเป็นรูปแบบที่ใช้กันทั่วไปในการส่งข้อมูลที่มีโครงสร้างผ่านอินเทอร์เน็ต นอกจากนี้ ส่วนหัว “Authorization” ยังถูกตั้งค่าให้รวมคีย์ API ที่เราสร้างไว้ก่อนหน้านี้ด้วย

สุดท้าย พารามิเตอร์ “payload” จะถูกใช้เพื่อระบุว่าข้อมูลจะถูกส่งไปในคำขอ ในกรณีนี้ จะเป็นอ็อบเจ็กต์ JSON ที่มีรหัสโมเดล Prompt, Temperature และโทเค็นสูงสุดสำหรับคำขอ API


var response = UrlFetchApp.fetch(“https://api.openai.com/v1/completions”,options);
var summary = JSON.parse(response.getContentText());
var final_summary = summary.choices[0].text.trim();

var doc = DocumentApp.create(“Summary of Blog Post #”+ (i+1));
var body = doc.getBody();
body.appendParagraph(final_summary);

var docUrl = doc.getUrl();
sheet.getRange(i+2,2).setValue(docUrl);
}
}

ซึ่งตัวเลือกเหล่านี้จะถูกส่งเป็นอาร์กิวเมนต์ไปยังฟังก์ชัน “UrlFetchApp.fetch” ซึ่งส่งคำขอไปยังปลายทางของ Open AI และส่งคืนการตอบสนองที่มีข้อความที่สร้างโดย API

และในกรณีนี้ ปลายทางของ API คือ “https://api.openai.com/v1/completions” ซึ่งเป็นปลายทางสำหรับ ChatGPT API ที่จัดทำโดย OpenAI

Option Variable ที่เรากำหนดจะถูกส่งเป็นอาร์กิวเมนต์ไปยัง fetch function เพื่อจัดเตรียมพารามิเตอร์เพิ่มเติมสำหรับคำขอ จากนั้น fetch function จะส่งคำขอไปยังปลายทางของ API และรอการตอบสนองจากเซิร์ฟเวอร์ การตอบสนองจากเซิร์ฟเวอร์จะมีข้อความที่สร้างโดย AI ซึ่งจะถูกเก็บไว้ใน response variable

หมายความว่าตอนนี้เราได้ส่งคำขอไปยังปลายทาง Open AI และได้รับ response แล้ว ซึ่งเราจะวิเคราะห์การตอบกลับนี้
ฟังก์ชัน getContentText() ใช้ในการแยกเนื้อหาข้อความจากอ็อบเจ็กต์การตอบกลับ เนื่องจากการตอบสนองอยู่ในรูปแบบ JSON เราจึงใช้ฟังก์ชัน JSON.parse เพื่อแปลงสตริง JSON ให้เป็นอ็อบเจ็กต์

จากนั้นข้อมูลที่วิเคราะห์แล้วจะถูกเก็บไว้ในตัวแปร final_summary ซึ่งประกอบด้วย array of choices ที่โมเดล AI สร้างขึ้นให้เราตามพรอมต์ และเนื่องจากเราสนใจเฉพาะ choices แรกของอาร์เรย์เท่านั้น เราจึงใช้ summary.choices[0] เพื่อเข้าถึงตัวเลือกนั้น จากนั้นเราใช้ .text เพื่อแยกข้อความจาก choices และสุดท้ายใช้ฟังก์ชัน .trim เพื่อลบช่องว่างนำหน้าหรือต่อท้ายออกจากข้อความที่สร้างขึ้น

เรียบร้อยค่ะ ตอนนี้เราได้สรุปข้อมูลจาก Google Apps Script เรียบร้อยแล้ว ท้ายสุดคือตั้งค่าสรุปข้อมูลถัดจากลิงก์แต่ละลิงก์ใน Google Sheet เริ่มต้นด้วยการรับช่วงข้อมูลโดยใช้ฟังก์ชัน getRange() ตามด้วยการตั้งค่าสรุปข้อมูลที่สร้างขึ้นโดยใช้ฟังก์ชัน setValue() เป็นอันครบกระบวนการค่ะ^^

#3 ตรวจสอบผลลัพธ์ Google Apps Script

ถึงเวลาตรวจสอบผลลัพธ์และดูว่าโค้ดทำงานตามที่เราต้องการไหม ด้วยการ Save แล้ว Run ค่ะซึ

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

ซึ่งเมื่อรันโค้ดแล้ว เราควรได้รับเอาต์พุตใน Execution log ตามภาพด้านล่างนี้ค่ะ

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API

และเมื่อเรากลับไปที่ Google Sheet จะเห็นว่าสรุปของแต่ละ URL จะอยู่ในคอลัมน์ถัดไปตามภาพด้านล่างนี้ค่ะ^^

สรุปเนื้อหาอัตโนมัติด้วย Google Apps Script-ChatGPT  OpenAI API
Panaya Sudta

การใช้ Google Apps Script และ Open AI API ช่วยให้เราสามารถสร้างสรุปของเนื้อหาหรือบทความต่างๆ จาก URL ที่เราต้องการได้ง่ายๆ ซึ่งกระบวนการเป็นไปโดยอัตโนมัติตั้งแต่ดึงสรุปของเนื้อหาแต่ละเนื้อหาจาก Google Sheet แล้ววางกลับลงใน Google Sheet ซึ่งนิกหวังเป็นอย่างยิ่งว่าสิ่งนี้จะช่วยประหยัดเวลาและเพิ่มประสิทธิภาพในการสร้างเนื้อหา ทำให้เราสามารถวิเคราะห์ข้อมูลลูกค้า หรือสร้างเนื้อหาที่น่าสนใจเพื่อการประชาสัมพันธ์ และให้ความรู้กับลูกค้าได้อย่างสะดวกและรวดเร็วยิ่งขึ้นค่ะ

Hi, I am Nick,,,,Panaya Sudta (●'◡'●) Engineer during the daytime. Researcher at night. Reader in spare time. (❁´◡`❁) วิศวกร/นักวิจัย/ Market research ค่ะ หวังเป็นอย่างยิ่งว่าจะได้แชร์มุมมองกันนะคะ

Leave a Reply

Your email address will not be published. Required fields are marked *