หลังจากที่ platformใหญ่ๆ อย่าง Facebook Messenger, LINE, และ Slack ได้เปิดให้นักพัฒนาสามารถเขียนโปรแกรมโต้ตอบกับผู้ใช้งานผ่านการ chat ได้ ตอนนี้ผู้คนในแวดวงเทคโนโลยีคงจะไม่มีใครไม่รู้จักกับ chatbot
“Bots are the new apps.”
— Microsoft CEO Satya Nadella
ธุรกิจทั้งใหญ่และเล็กต่างก็พากันตื่นตัวหันมาเพิ่มช่องทางการให้บริการด้วย chatbot เพื่อขยายโอกาสทางธุรกิจ (และไม่ให้ตกเทรนด์!) ไม่ว่าจะเป็นการค้นหาตั๋วเครื่องบิน (Hipmunk), ค้นหาร้านอาหาร (Wongnai), ช็อปปิ้ง (eBay), ทำธุรกรรมทางธนาคาร (KAI), ตรวจสอบสภาพอากาศ (Poncho), ติดตามข่าวสาร (TechCrunch) และอื่นๆอีกเพียบ
“ยุพิน” ที่ผมและทีมงานจิตอาสาได้ช่วยกันสร้างขึ้นมาก็เป็นหนึ่งในนั้น…
Table of Contents
ยุพิน: หยุดบ่น ส่งพิน
ยุพิน หรือชื่ออังกฤษว่า YouPin เป็น application ให้คุณมาปัก pin รายงานปัญหาต่างๆในเมือง เช่น ทางเท้ามีน้ำท่วมขัง หรือขยะล้นส่งกลิ่น เพื่อรวบรวมข้อมูลและประสานงานส่งต่อไปยังหน่วยงานที่รับผิดชอบ #opendata #crowdsourcing #activecitizen
ยุพินน่าจะเป็นทีมพัฒนากลุ่มแรกๆ ในไทยที่หยิบเอา chatbot มาใช้ (ตั้งแต่ช่วงกลางปี 2016) โดยความตั้งใจของทีมในตอนนั้น คือ
- อยากให้คนรายงานปัญหาผ่านมือถือได้ง่าย เห็นปัญหาปุ๊ป สามารถหยิบมือถือขึ้นมาแล้วรายงานได้ทันที ไม่ต้องดาวน์โหลด app เพิ่ม (ซึ่งคนส่วนใหญ่ก็ไม่ค่อยอยากดาวน์โหลดอยู่แล้ว โดยเฉพาะอย่างยิ่ง app ที่นานๆจะได้ใช้ที) และให้เจ้าหน้าที่สามารถติดต่อกลับเพื่อสอบถามเพิ่มเติมหรือรายงานความคืบหน้าได้ง่าย
- อยากให้การรายงานปัญหาเป็นเรื่องที่สนุก คนที่เจอปัญหาน่าหงุดหงิดมา เค้าอยากจะบ่น อยากจะระบายให้คนอื่นฟัง (เหมือนที่เราเห็นกันอยู่เต็ม social media) ไม่มีใครอยากจะมานั่งกรอกแบบฟอร์มยาวๆบน website
สุดท้ายก็เลยได้ออกมาเป็น บอทป้ายุพิน คุณป้าใจดี(รึเปล่า?)ที่คอยรับฟังปัญหาของคนเมืองผ่าน Facebook Messenger App
หลังจากที่ได้เปิดตัวป้ายุพินออกไป ก็มีเพื่อนๆ มาถามถึงการทำ chatbot กันหลายคน เลยถือโอกาสนี้เขียนบันทึกเก็บไว้ให้ผู้ที่สนใจได้อ่านกัน
Chatbot กับการเป็น User Interface
เวลาพูดถึง chatbot คนส่วนใหญ่มักจะนึกถึง AI ที่ฉลาด เข้าใจคำพูดมนุษย์ และโต้ตอบบทสนากับเราได้แบบเนียนๆ และมักจะมองข้ามไปว่า บทบาทที่สำคัญของ chatbot ไม่ว่าจะฉลาดหรือโง่ คือการเป็น user interface การเป็นตัวกลางระหว่างผู้ใช้งานกับระบบ เพื่อช่วยให้ผู้ใช้งานสามารถทำ task อะไรบางอย่างได้ ไม่ว่าจะเป็นการค้นหาร้านอาหาร โอนเงินให้เพื่อน หรือพินบอกปัญหาที่พบในเมือง
การสร้าง chatbot (หรือ conversational interface) อาจจะเปรียบได้กับการทำหน้าเว็บ (web interface) ให้คนเข้ามาปฏิสัมพันธ์กับระบบได้ ไม่ว่าจะอ่านข้อมูล เขียนข้อมูล หรือทำธุรกรรมต่างๆ chatbot ที่พูดจาน่าฟัง ไหลลื่น ไม่ถามวกไปวนมา อาจจะเปรียบได้กับเว็บไซต์ที่สวยงาม ใช้งานง่าย ในขณะที่ chatbot ที่ฉลาด อาจจะเปรียบเทียบได้กับเว็บล้ำๆ ที่รู้ว่าเราต้องการอะไร มีการทำ personalization หรือมีระบบแนะนำสินค้าและบริการต่างๆ
Chatbot สร้างได้ไม่ยาก
ข้อดีอย่างหนึ่งของการพัฒนา chatbot บน platform ต่างๆ ก็คือ เราสามารถเริ่มต้นได้ง่ายมากๆ เพียงแค่คิดข้อความ คำถาม คำตอบ ที่จะใช้ในแอปของเรา (แต่จะออกมาดีหรือไม่ นั่นอีกเรื่องหนึ่ง เดี๋ยวเราจะพูดถึงกันในหัวข้อถัดไป) หากเปรียบเทียบกับการทำเว็บ แค่การจะเอาข้อความๆ หนึ่งขึ้นมาแสดง เราก็ต้องใช้เวลาพอสมควรในการจัดวางหน้า เลือกสี เลือกฟอนต์
ความง่ายไม่ใช่แค่นั้น เราสามารถรับข้อมูลประเภทอื่นๆ ที่ platform รองรับ นอกเหนือจากตัวอักษรได้อีกด้วย
เช่น ในแอปยุพิน ป้ายุพินก็จะถามหา location ของปัญหาที่พบ พร้อมภาพประกอบ ซึ่ง Facebook Messenger รองรับอยู่แล้ว หากเราเปลี่ยนจาก chatbot เป็น web application นักพัฒนาก็คงต้องใช้เวลาพอสมควร ในการสร้างฟังก์ชันการอัพโหลดรูป หรือต่อ Map API เพื่อให้ผู้ใช้งานระบุพิกัดสถานที่
สร้าง User Experience ที่ดี … ไม่ง่าย
ความท้าทายอย่างหนึ่งของ conversational UI คือ ผู้ใช้งานอาจจะพูดอะไรมาก็ได้ ซึ่งมีความเป็นไปได้สูงมากที่ chatbot ของเราจะไม่เข้าใจ และไม่รู้จะตอบว่าอะไรดี หรือในทางตรงกันข้ามผู้ใช้งานบางกลุ่มอาจจะยังไม่คุ้นเคย และไม่รู้ว่าควรจะพูดอะไรหรือไม่รู้ว่า chatbot เราทำอะไรได้บ้าง กลายเป็นปัญหา discoverability ไป
Is it possible to even figure out what actions are possible and where and how to perform them?
— The Design of Everyday Things (Don Norman)
นอกจากนี้ในการออกแบบ conversational UI ที่ดี เรายังต้องคำนึงถึง
- การเริ่มต้น และปิดจบบทสนทนา
- จังหวะจะโคนในการโต้ตอบบทสนทนา ตอนไหนควรหยุดฟัง ตอนไหนควรถามคำถาม หรือตอนไหนควรอธิบาย
- การวาง persona ให้กับ chatbot
สิ่งที่สำคัญมากในการออกแบบบทสนทนาให้กับ chatbot คือ การทดสอบบ่อยๆ อย่ามัวเสียเวลานั่งวาด flow chart ใหญ่โตอยู่คนเดียว เพราะคุณไม่มีทางเดาได้เลยว่าผู้ใช้งานอาจจะตอบอะไรมาบ้าง นอกจากนี้การทดสอบอาจจะทำได้ตั้งแต่ตอนที่ยังเป็น prototype โดยการใช้คนจริงๆ มาทำตัวเป็น chatbot เพื่อศึกษาการตอบสนองของผู้ใช้งาน หรือที่เรียกว่าการทำ Wizard of Oz
ในส่วนของป้ายุพิน จะมีขั้นตอนหนึ่งที่ป้าจะให้ผู้ใช้งานเล่ารายละเอียดปัญหาที่พบให้ฟัง ในเวอร์ชันแรกที่ออกแบบมา ทันทีที่ผู้ใช้งานบรรยายปัญหาตอบกลับมาหนึ่งข้อความ ป้าก็จะถามคำถามสำหรับขั้นตอนถัดไปทันที แต่หลังจากที่เอาไปทดสอบกับผู้ใช้งานจริง พบว่าผู้ใช้งานหลายคน บรรยายปัญหาไม่จบในข้อความเดียว กด Enter ทุกๆ สามสี่คำ ทำให้ระบบและผู้ใช้งานสับสนกันไปหมด ????
ในเวอร์ชันที่สอง เราเลยลองเปลี่ยนให้ผู้ใช้งานสามารถส่งข้อความมาได้ไม่จำกัด และป้าจะถามคำถามต่อไปก็ต่อเมื่อผู้ใช้งานเงียบไปเกิน 5 วินาที ผลปรากฏว่าผู้ใช้งานส่วนใหญ่พอเห็นป้าเงียบไปเกินสามวินาทีก็จะคิดว่าป้าเดี้ยงไปแล้ว ผู้หวังดีหลายท่านก็จะส่งข้อความมาถามว่าป้ายังอยู่ไม๊ โอเครึเปล่า ทำให้ไม่ได้ไปขั้นต่อไปสักที #ติดลูป แต่ถ้าเราลดเวลารอให้น้อยลงไปกว่านี้ ก็มีโอกาสที่เราจะข้ามไปขั้นต่อไปในขณะที่ผู้ใช้งานกำลังพิมพ์บรรยายปัญหาอยู่
ในเวอร์ชันสุดท้าย เราจึงให้ผู้ใช้งานบอกเราเองเลยว่าอธิบายปัญหาเสร็จแล้วด้วย hashtag #จบนะ จะได้ไม่ต้องเดาผิดเดาถูกว่าตกลงผู้ใช้งานรายงานปัญหาเสร็จหรือยัง
ปล. จริงๆ แล้ว #จบนะ อาจจะไม่ใช่ทางออกที่ดีที่สุด เพราะการเปลี่ยนแป้นพิมพ์จากภาษาไทย เพื่อไปพิมพ์ตัว # แล้วเปลี่ยนกลับมา ออกจะยุ่งยากไปสักนิด แต่ก็หวังว่าผู้ใช้งานน่าจะชินกับการใช้ hashtag บน social media แล้ว #แถ และก็เป็น gimmick เล็กๆ ให้กับป้ายุพินของเราไป #จบนะ
AI กับ Chatbot
Chatbot ที่ไม่ค่อยฉลาด (เช่น ป้ายุพิน ????) สามารถสร้างได้โดยการระบุกฎต่างๆ เพื่อกำหนด flow ของบทสนทนา หรือที่เรียกกันว่า rule-based chatbots
การที่จะทำให้ rule-based chatbots ทำงานได้ดีนั้น เราจะต้องระบุกฎให้ครอบคลุมทุกคำตอบที่ผู้ใช้งานอาจจะตอบเข้ามา ซึ่งทำได้ค่อนข้างยาก #ถึก ด้วยเหตุนี้เอง AI จึงถูกนำเข้ามาใช้เพื่อเรียนรู้ pattern จากบทสนทนาที่เกิดขึ้นจริง และช่วยให้ chatbot สามารถเข้าใจสิ่งที่ผู้ใช้งานพูดได้อย่างมีประสิทธิภาพมากยิ่งขึ้น
หน้าที่หลักๆ ของ AI ใน chatbot คือ การเข้ามาช่วยทำนายว่าผู้ใช้งานมีความตั้งใจ (intent) ที่จะทำอะไร และดึงข้อมูลบริบทที่เกี่ยวข้องออกมาจากบทสนทนา จากตัวอย่างด้านล่าง ในการถามสภาพอากาศ ผู้ใช้งานอาจจะถามได้หลายวิธี และอาจมีการระบุข้อมูลเวลาหรือสถานที่มาด้วย
ข้อความจาก chatbot โดยทั่วไปมักจะมาจาก template ที่ถูกเตรียมเอาไว้แล้วสำหรับ การโต้ตอบในกรณีต่างๆ แต่ถ้าอยากจะล้ำขึ้นไปอีกขั้น เราก็สามารถนำ AI มาใช้สร้างข้อความโต้ตอบที่หลากหลายได้เช่นกัน ผ่านสิ่งที่เรียกว่า generative models
หัวใจสำคัญในการนำ AI มาใช้สร้าง chatbot คือ ข้อมูลปริมาณมากที่จะนำมาใช้สอนให้เครื่องเรียนรู้บทสนทนาในรูปแบบที่แตกต่างกันออกไป ซึ่งหากคุณไม่ได้ทำงานอยู่ในองค์กรขนาดใหญ่ที่มีการบันทึกบทสนทนาจาก call center ไว้อยู่แล้ว ก็อาจจะเป็นไปได้ค่อนข้างยาก และคงต้องเริ่มจาก chatbot ง่ายๆ ก่อนเพื่อเริ่มเก็บตัวอย่างข้อความจากผู้ใช้งาน
ทิ้งท้าย
Conversational UI อาจจะได้ไม่ได้เหมาะสมกับงานทุกอย่าง โดยเฉพาะงานที่ซับซ้อนและต้องการความถูกต้องแม่นยำสูง ด้วยข้อจำกัดและความท้าทายในการสร้าง chatbot ที่เล่ามาข้างต้น ก่อนจะลงมือสร้าง chatbot ขึ้นมาสักอัน อยากให้คุณลองถามตัวเองดูสักเล็กน้อยว่างานของคุณนั้น เหมาะสมกับ interface อื่นๆ อย่าง web หรือ mobile application มากกว่าหรือไม่
Resources
- Github ของทีมยุพิน (โค้ดยังกากๆอยู่บ้าง…งานการกุศลครับ ????)
- LINE Bot 101 โดยพี่ nuuneoi
- LINE Messaging SDK สำหรับ Node.js โดย คุณ Bundit J.