ทำความรู้จักกับ DialogFlow

Founder, MyCoding.Academy
วิศวกรไฟฟ้าและโทรคมนาที่หลงไหลการเขียนโปรแกรม เลยได้ทำงานประจำช่วงหนึ่งทางด้านการพัฒนาซอฟต์แวร์ ปัจจุบันก็ยังทำงานเป็นฟรีแลนซ์ทางด้านการเขียนโปรแกรมอยู่นะครับ

DialogFlow เป็นผลิตภัณฑ์ของ Google แบ่งเป็นสองตัวคือ DialogFlow ES (Essentials) และ DialogFlow CX (Advanced) ตัว ES จะเป็นตัวพื้นฐาน ส่วนตัว CX ก็จะเป็นตัวที่เหมาะกับองค์กรใหญ่เนื่องจากมีตัวช่วยมากกว่า แลกมากับการที่ต้องจ่ายเงินเลย ไม่มีตัวให้ทดลองใช้งานฟรีเหมือนของ ES และตัว CX จะมีตัวช่วยออกแบบเป็นแบบ Visual รองรับหนึ่งโครงการแต่มีหลาย agent ได้ในขณะที่ทาง ES หนึ่งโครงการมีได้แค่หนึ่ง agent เท่านั้นครับ

แล้ว DialogFlow คืออะไรกันแน่

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

"เธอชื่ออะไร"

เมื่อผู้ใช้ถามด้วยคำถามใกล้เคียงกันมันก็สามารถเข้าใจและทำให้ผู้ใช้สามารถเข้าถึงได้เลย คำถามที่คล้ายกันก็เช่น

"ชื่อไร" "เธอเป็นใคร"

เช่นนี้เป็นต้นครับ สาเหตุที่เป็นเช่นนี้ได้เพราะ DialogFlow มีส่วนของ AI หรือ Machine Learning อยู่ด้วยนั่นเองครับ เพราะถ้าให้เราเขียนโปรแกรมเราเขียนได้แบบนี้ก็ไม่ง่ายแน่ครับ แม้ว่าจะมีภาษาที่ใช้สำหรับเรื่องนี้โดยเฉพาะก็ตาม

นอกจากนี้แล้วตัว DialogFlow สามารถรองรับได้ทั้งโหมดข้อความ และเสียงด้วยนะครับ รวมทั้งสามารถเชื่อมกับระบบต่างๆ ได้เช่น Facebook Messenger, Line, Skype เป็นตัน ทีนี้เรามาดูส่วนประกอบที่สำคัญของ DialogFlow กันครับ ซึ่งผมขอเป็นส่วนของ ES นะครับ เพราะผมใช้ตัวนี้อยู่

Agents

Agents เป็นส่วนของตัวแทนที่จะให้ทำหน้าที่ตอบคำถามครับ ในส่วนของ ES มีได้เพียง 1 agent ต่อหนึ่งโครงการครับ ถ้าเปรียบเทียบกับ Call Center ตัว Agents จะเหมือนกับพนักงานรับโทรศัพท์นั่นเองครับ ก่อนที่เราจะใช้งาน Agents ได้เราต้องมีการฝึกหัดมันก่อนนะครับ เพื่่อสร้างองค์ความรู้ให้มัน ซึ่งทำไม่ยากเลยครับ

Intents

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

ช่วงการฝึก (Training Phase)

คือการให้ข้อมูลแก่ Agent ว่าใน Intent นี้ ผู้ใช้จะพูดหรือมีข้อมูลว่าอย่างไรบ้าง โดยคุณไม่ต้องระบุทุกตัว ตัว DialogFlow จะเรียนรู้และมีการตัดสินใจจับคู่กับ Intent ให้เอง

Actions

ในกรณีที่ตัว DialogFlow จับคู่ Intent จากข้อมูลที่ได้จากผู้ใช้แล้วเราอาจจะกำหนดการกระทำที่จะให้เกิดแก่ระบบได้ด้วย

Parameters

ในระหว่างการจับคู่กับ Intent นั้นตัว DialogFlow จะทำการดึงข้อมูลที่ได้จากข้อความของผู้ใช้มาเป็นค่า parameters ของ Intent นั้นๆ ด้วยถ้าใน Intent นั้นมีนะครับ เช่น ข้อมูล ID ของผู้ใช้ วันที่ สถานที่ ตัวนี้เราจะกำหนดประเภทของข้อมูลให้มันด้วยเรียนกว่า Entity Types ครับ เราสามารถนำ parameters เหล่านี้ไปใช้งานต่อได้ เพื่อทำการ Query ข้อมูลให้แก่ผู้ใช้ที่จำเพาะเจาะจงได้ครับ

Reponses

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

Entities

ในส่วนของพารามิเตอร์ตามที่กล่าวมาแล้วครับ มันจะมีชนิดของข้อมูล หรือ Entity Types ด้วย ซึ่งจะทำให้ตัว DialogFlow รู้ว่าจะต้องดึงข้อมูลมาจากผู้ใช้ยังไง ในส่วนของข้อความที่ส่งมาให้ สำหรับประเภทของข้อมูลนี้ก็มีท้้งของระบบ หรือเราจะกำหนดขึ้นมาเองก็ได้ 

Contexts

บริบทของการสนทนาก็เหมือนบริบทกับการสนทนาในภาษาทั่วไป ที่เราต้องรู้บริบทจึงจะระบุได้แน่ชัดว่ามันคืออะไร เช่นเมื่อมีคนบอกว่า "มันมีสีดำ" เราก็ต้องรู้ว่าบริบทของ "มัน" คืออะไรในการสนทนา สำหรับ DialogFlow เราสามารถกำหนดได้ทั้งบริบทขาเข้า (Input Context) และ บริบทขาออก (Output Context) เพื่อให้เกิดการไหลของการสนทนาครับ เช่น ในกรณีของบัญชีเงินฝาก

ผู้ใช้: ขอข้อมูลบัญขีออมทรัพย์

agent: ต้องการข้อมูลอะไรเกี่ยวกับบัญชีออมทรัพย์คะ

ผู้ใช้: ยอดเงิน

agent: 20 บาท

เมื่อมีการกำหนดบริบทจะทำให้มีความแม่นยำในการจับคู่กับ Intent ที่เหมาะสมมากขึ้น

Follow-up Intents

เราสามารถใช้ Follow-up intents หรือหัวข้อการสนทนาที่ต่อเนื่องกัน ซึ่งจะทำให้เกิดการไหลของบริบทไปตาม Flow ของบทสนทนาครับ

Fulfillments

โดยปกติตัว Agent จะตอบกลับไปด้วยข้อมูลที่ระบุไว้อย่างตายตัวในตัว Intent ของ DialogFlow เอง เช่น ที่อยู่ หรือ URL สำหรับเว็บไซต์ข้อมูลเพิ่มเติม แต่ในบางกรณีข้อมูลบางอย่างอาจจะต้องดึงมาจากระบบภายนอก เราเรียกการทำงานแบบนี้ว่า Fulfillment ในกรณีที่มีการกำหนด Fulfillment ไว้ ตัว DialogFlow จะทำการเรียกไปยังระบบภายนอกโดยใช้ Webhook Service ซึ่งจะได้รับคำตอบกลับมา พร้อมกับการดำเนินการบางอย่างก็ได้ เช่นส่งข้อมูลผู้ใช้ไปยืนยันการสมัคร แล้วแจ้งผลกลับ ในกรณีที่ล้มเหลวในการเรียกใช้ Webhook Service ก็จะตอบกลับด้วยข้อความสำรองใน Intent อีกทีครับ

สำหรับในบทความนี้ก็ขออารัมภบทไว้แค่นี้ก่อนนะครับ จริงๆ แล้วต้องการแลกเปลี่ยนการใช้ Fulfillment จากระบบที่เป็น Application ที่พัฒนาด้วย Laravel นั่นเองครับ ไว้รอติดตามนะครับ