Transition — เส้นเชื่อมที่กำหนดว่า Agent จะไปยัง Node ใดต่อ
Node กำหนดว่า Agent จะทำสิ่งใด ส่วน Transition กำหนดว่าจะไปยัง Node ใดต่อ ทั้งสองส่วนทำงานร่วมกันเพื่อขับเคลื่อน Flow
Transition คืออะไร
Transition (เส้นเชื่อมระหว่าง Node) คือ ลูกศรที่ลากจาก Node หนึ่งไปยังอีก Node หนึ่ง ทำหน้าที่ระบุว่า เมื่อจบ Node ต้นทางแล้ว ให้ Agent ไปยัง Node ใดต่อ
เปรียบเทียบให้เห็นภาพ: เปรียบได้กับ ทางแยกในเมือง ที่มีสัญญาณไฟเปลี่ยนตามเงื่อนไข Transition คือ "ป้ายบอกทางพร้อมเงื่อนไข" ที่ทางแยกออกจาก Node แต่ละจุด เช่น หากลูกค้าตอบว่าใช่ ให้ไปยัง Node เสนอขาย หรือหากตอบว่าไม่ ให้ไปยัง Node ขอนัดหมายใหม่
ทุก Transition ประกอบด้วยสองส่วน ได้แก่ เงื่อนไข (สิ่งที่ต้องเกิดขึ้น) และ ปลายทาง (Node ที่จะไปต่อ) Transition มีกลไกเดียวเท่านั้น คือประเมินจากเงื่อนไข — ไม่มีปลายทางที่ "ไปทันทีเสมอ" หรือ "ไปสำรอง" แยกต่างหาก ทุกครั้งที่ลูกค้าพูดจบ Agent จะตรวจสอบว่าคำตอบนั้นตรงกับเงื่อนไขใดที่คุณเขียนไว้ แล้วเลือกไปยัง Node ที่กำหนดไว้สำหรับเงื่อนไขนั้น
วิธีสร้าง Transition
คลิก Node ต้นทางบน Canvas
คลิก Node ที่คุณต้องการสร้างทางออก โดยรอบ Node จะปรากฏ จุดกลมเล็ก ๆ 4 จุด (บน ล่าง ซ้าย ขวา) เรียกว่าจุดเชื่อมต่อ (handle) สำหรับใช้ลากเส้น
ลากเส้นจาก Node ต้นทางไปยัง Node ปลายทาง
นำเมาส์ไปวางที่จุดเชื่อมต่อ (handle) ที่ขอบของ Node ต้นทาง จากนั้นกดค้างไว้ ลากไปยังขอบของ Node ปลายทาง แล้วปล่อย
หากปรากฏเส้นลูกศรชี้จาก Node ต้นทางไปยัง Node ปลายทาง แสดงว่าเชื่อมต่อสำเร็จ
คลิกเส้นลูกศรเพื่อตั้งค่า Transition
คลิกที่เส้นที่เพิ่งลาก แผงด้านขวา (Panel) จะเปิดให้กรอกช่อง Condition — ระบุเงื่อนไขที่จะพา Agent ออกจาก Node นี้ไปยัง Node ปลายทาง ด้วยภาษาทั่วไป (ดูวิธีเขียนโดยละเอียดในหัวข้อถัดไป)
ทำซ้ำสำหรับทุกทางออก
หาก Node ต้นทางมีหลายทางออก ให้ลากเส้นจากจุดเชื่อมต่อ (handle) เดิมไปยัง Node อื่น ๆ เพิ่มเติม เพื่อสร้างทางออกที่สอง สาม สี่ ได้โดยไม่จำกัดจำนวน
วิธีเขียนเงื่อนไขที่ดี
Transition รองรับเงื่อนไขที่เขียนด้วยภาษาทั่วไป โดยไม่ต้องเขียนโค้ดหรือคำสั่งเงื่อนไขใด ๆ Agent จะอ่านสิ่งที่ลูกค้าพูดจริงในสาย แล้วเทียบกับข้อความเงื่อนไขที่คุณเขียนไว้ในแต่ละทางออก เพื่อเลือกว่าจะไปยัง Node ใด
1. เขียนเป็นประโยคที่ตรวจสอบได้ทันที
เงื่อนไขที่ดีควรอ่านแล้วรู้ทันทีว่าเกิดอะไรขึ้นถึงจะเข้าเงื่อนไขนี้ โดยไม่ต้องอาศัยบริบทอื่นเพิ่มเติม เช่น
ลูกค้าตอบว่าสะดวกสนทนา / ว่าง / มีเวลาลูกค้าปฏิเสธ / ไม่สนใจ / แจ้งว่ามีอยู่แล้วลูกค้าขอสนทนากับเจ้าหน้าที่ลูกค้ายืนยันยอด
2. แยกความแตกต่างระหว่างเงื่อนไขพี่น้องให้ชัดเจน
เมื่อ Node หนึ่งมีหลายทางออก แต่ละเงื่อนไขต้องแยกจากกันอย่างชัดเจน หลีกเลี่ยงถ้อยคำกำกวมที่ตีความได้หลายแบบ เช่น "ลูกค้าตอบดี" เทียบกับ "ลูกค้าตอบไม่ดี" ยังไม่ชัดเจนว่าหมายถึงคำตอบแบบใด ควรระบุให้เจาะจงกว่านั้น เช่น "ลูกค้ายอมรับข้อเสนอ" เทียบกับ "ลูกค้าปฏิเสธข้อเสนอ"
3. เผื่อคำตอบที่หลากหลายของลูกค้า
4. เขียนทางออกที่ครอบคลุมกรณีที่เหลือเสมอ (Fallback)
ทุก Node ที่มีเงื่อนไขเฉพาะเจาะจงหลายทาง ควรมีอีกหนึ่งทางออกที่เขียนกว้างพอจะครอบคลุมคำตอบใดก็ตามที่ไม่เข้าเงื่อนไขอื่น เช่น "ลูกค้าตอบกลับด้วยประโยคใด ๆ ที่ไม่ได้บอกว่าไม่สะดวกคุย" — แนวทางนี้เรียกกันทั่วไปว่า Fallback (ทางออกดักคำตอบที่เหลือ) แม้จะเรียกต่างจากเงื่อนไขอื่น แต่ในทางเทคนิคแล้ว Fallback ก็คือ Condition ปกติทางหนึ่ง เพียงแต่เขียนให้ครอบคลุมกว้างกว่าทางอื่น ไม่ใช่กลไกที่แยกออกไปต่างหาก
สามารถใช้ตัวแปรในเงื่อนไขได้
หากตัวแปรถูกดึงค่ามาจากบทสนทนาก่อนหน้าแล้ว คุณสามารถนำมาใช้ในเงื่อนไขได้ เช่น
ลูกค้ายืนยันที่จะชำระภายใน {{debt_due_date}}ลูกค้ายอมจ่ายอย่างน้อย {{min_payment}} บาท
ลำดับความสำคัญ — Agent ตรวจสอบทางออกอย่างไร
หาก Node มี Transition หลายทาง Agent จะตรวจสอบตามลำดับดังนี้
- ตรวจสอบเงื่อนไขแต่ละทาง ตามลำดับจากบนลงล่างที่ปรากฏในแผงด้านขวา (Panel) โดยจะไปยังทางแรกที่ตรงกับเงื่อนไข
- หากไม่ตรงกับเงื่อนไขเฉพาะเจาะจงใดเลย จะไปยังทางออกที่เขียนครอบคลุมกว้างที่สุด (หากมี — ดูหัวข้อ "เขียนทางออกที่ครอบคลุมกรณีที่เหลือเสมอ" ด้านบน)
- หากไม่มีทางออกใดครอบคลุมคำตอบนั้นเลย Agent จะค้างอยู่ที่ Node เดิมและพูดวนซ้ำ ซึ่งควรหลีกเลี่ยง
ควรจัดลำดับทางออกให้เหมาะสม: โดยนำทางที่พบบ่อยที่สุดไว้บนสุด
ข้อผิดพลาดที่เจอบ่อย
❌ Agent พูดประโยคเดิมวนซ้ำ ไม่ไปต่อ
สาเหตุ: คำตอบของลูกค้าไม่ตรงกับ Condition ข้อใดเลย และไม่มีทางออกที่ครอบคลุมกรณีที่เหลือกำกับไว้ ทำให้ Agent ค้างอยู่ที่ Node เดิม
วิธีแก้: เพิ่มทางออกที่เขียนครอบคลุมคำตอบที่เหลือทั้งหมด (Fallback) ให้กับทุก Conversation Node ที่ต้องรอฟังคำตอบ
❌ Agent ไปผิดทางอยู่เสมอ
สาเหตุ: Condition ในแต่ละทางคล้ายกันเกินไป ทำให้ Agent ตีความสับสน
วิธีแก้: ระบุ Condition ให้ แตกต่างกันอย่างชัดเจน และหลีกเลี่ยงถ้อยคำกำกวม เช่น คำว่า "ลูกค้าตอบดี" ยังไม่ชัดเจนว่าหมายถึงสิ่งใด
❌ เขียน Condition แล้วแต่ AI ยังไม่ไปต่อ
สาเหตุ: Condition อาจจะยังไม่ครอบคลุมกว้างพอ เช่น "เมื่อลูกค้าบอกว่าสะดวกคุย" แต่ถ้าลูกค้าตอบแค่ ครับ/ค่ะ AI อาจจะไม่เข้าใจว่าอันนี้คือสะดวกหรือยัง
วิธีแก้: ระบุ Condition ให้ กว้างขึ้น เช่น "ลูกค้าไม่ได้บอกว่าไม่สะดวกคุย" หรือ "ลูกค้าตอบกลับด้วยประโยคอะไรก็ตามที่ไม่ได้บอกว่าไม่สะดวกคุย"
❌ ให้ Agent ถามซ้ำโดยลาก Transition วนกลับเข้า Node เดิม
สาเหตุ: การลาก Transition กลับไปยัง Node ต้นทางเดียวกัน ทำให้ Agent เริ่มพูดประโยคเปิดของ Node นั้นใหม่ทั้งหมด ฟังดูเหมือนระบบค้างหรือรีสตาร์ท ไม่ใช่การถามซ้ำแบบธรรมชาติ
วิธีแก้: เขียนพฤติกรรม "หากคำตอบไม่ชัดเจน ให้ถามซ้ำอีกครั้ง" ไว้ใน Prompt ของ Node นั้นแทน โดยไม่ต้องสร้าง Transition วนกลับ และควรระบุจำนวนครั้งที่ยอมให้ถามซ้ำไว้ด้วย (เช่น "ถามซ้ำได้ไม่เกิน 1-2 ครั้ง") เพื่อไม่ให้ Agent วนถามไม่จบ