1. ภาพรวม
Last Updated: 2023-08-07
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้สร้าง ทำให้ใช้งานได้ และกำหนดค่าตัวแทนเสมือนอย่างง่ายใน Dialogflow CX เพื่อช่วยเหลือนักดำน้ำแบบกลุ่มและแบบส่วนตัว ตัวแทนเสมือนจะใช้ Generative AI และโมเดลภาษาขนาดใหญ่ (LLM) แบบ Generative ล่าสุดของ Google เพื่อสร้างคำตอบของตัวแทนเสมือน
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้ API ที่เกี่ยวข้อง
- วิธีที่ Dialogflow กรอกค่าพารามิเตอร์ของแบบฟอร์มหน้าเว็บล่วงหน้าโดยอัตโนมัติจากพารามิเตอร์ของ Intent
- วิธีกำหนดค่าเครื่องจัดการเหตุการณ์ใน Dialogflow
- วิธีเปิดใช้คำตอบสำรองแบบ Generative ในตัวแฮนเดิลเหตุการณ์ที่ไม่มีรายการที่ตรงกันซึ่งใช้ในโฟลว์และระหว่างการกรอกพารามิเตอร์
- วิธีกำหนดค่าพรอมต์ข้อความของคุณเองเพื่อจัดการสถานการณ์การสนทนาขั้นพื้นฐานและสถานการณ์การสนทนาเฉพาะตัวแทน
- วิธีเขียนคำอธิบาย Intent และพารามิเตอร์ที่ดีเพื่อสร้างตัวแฮนเดิลการแจ้งให้ดำเนินการต่อสำหรับพารามิเตอร์ที่จำเป็น (นอกเหนือจากการแจ้งให้ดำเนินการต่อที่ผู้ใช้กำหนด)
- วิธีทดสอบเอเจนต์และจำลองคำถามของลูกค้าที่ทริกเกอร์การสำรองข้อมูลแบบ Generative
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud
- เบราว์เซอร์ เช่น Chrome
2. การเริ่มต้นใช้งาน
คุณต้องเปิดใช้ Dialogflow API ก่อนจึงจะเริ่มใช้ฟีเจอร์ Fallback แบบ Generative ใน Dialogflow CX ได้
เปิดใช้ Dialogflow API โดยใช้ Cloud Console
- เปิด คอนโซล Google Cloud ในเบราว์เซอร์
- ในคอนโซล Google Cloud ให้ไปที่คลัง API เพื่อเรียกดู API และบริการที่เปิดใช้ได้
- ใช้แถบค้นหาที่ด้านบนของหน้าคลัง API เพื่อค้นหา
Dialogflow APIแล้วคลิกบริการที่ปรากฏ - คลิกปุ่มเปิดใช้เพื่อเปิดใช้ Dialogflow API ในโปรเจ็กต์ Google Cloud
การใช้ gcloud CLI (ทางเลือก)
หรือจะเปิดใช้ API โดยใช้คำสั่ง gcloud ต่อไปนี้ก็ได้
gcloud services enable dialogflow.googleapis.com
หากเปิดใช้ API สำเร็จ คุณจะเห็นข้อความที่คล้ายกับข้อความต่อไปนี้
Operation "operations/..." finished successfully.
รับรหัส
คุณจะไม่ต้องสร้างตัวแทนเสมือนตั้งแต่ต้น เราจะมอบ Agent ให้คุณ ซึ่งคุณจะต้องกู้คืนจากคอนโซล Dialogflow CX แล้วจึงปรับปรุง
วิธีดาวน์โหลดซอร์สโค้ด
- เปิดแท็บเบราว์เซอร์ใหม่ ไปที่ที่เก็บ Agent แล้วโคลนจากบรรทัดคำสั่ง
- ระบบได้ส่งออกเอเจนต์เริ่มต้นเป็นแพ็กเกจ JSON แล้ว คลายซิปไฟล์ ตรวจสอบการตั้งค่าเอเจนต์ ดูคำจำกัดความของโฟลว์
Liveaboards.jsonและสุดท้ายคือเรียกดูหน้าโฟลว์ เจตนา และเอนทิตี
3. สร้างเอเจนต์ใหม่
เปิดคอนโซล Dialogflow
คุณจะใช้คอนโซล Dialogflow CX พร้อมกับโปรเจ็กต์ Google Cloud เพื่อทำขั้นตอนที่เหลือในโค้ดแล็บนี้
- ไปที่คอนโซล Dialogflow CX ในเบราว์เซอร์
- เลือกโปรเจ็กต์ Google Cloud ที่ต้องการใช้ หรือสร้างโปรเจ็กต์ใหม่เพื่อใช้งาน
- คุณจะเห็นรายการ Agent ในคอนโซล Dialogflow CX
หากใช้ Dialogflow CX เป็นครั้งแรก โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าโปรเจ็กต์และการตั้งค่าตามความต้องการของคุณในเอกสารประกอบของ Dialogflow CX
สร้าง Agent Dialogflow CX ใหม่
- หากต้องการกู้คืน Agent ที่ดาวน์โหลดจากที่เก็บ GitHub คุณต้องสร้าง Agent ใหม่ จากคอนโซล Dialogflow CX ให้คลิกสร้าง Agent ใหม่ที่มุมขวาบนของหน้า

- เลือกตัวเลือก Agent สร้างเอง

- กรอกแบบฟอร์มด้วยการตั้งค่า Agent ด้านล่าง แล้วคลิกสร้างเพื่อสร้าง Agent
- เลือกชื่อที่แสดงเป็น
Divebooker - เลือกตำแหน่งเป็น
us-central1 - เลือกเขตเวลาที่ต้องการ
- เลือก
en - Englishเป็นภาษาเริ่มต้น
- Dialogflow จะเปิด Agent ให้คุณโดยอัตโนมัติ เรายังมีอะไรให้ดูอีก
กู้คืนตัวแทน Divebooker
- กลับไปที่หน้ารายการตัวแทน แล้วระบุตัวแทนที่คุณเพิ่งสร้าง คลิกตัวเลือก
แล้วคลิกปุ่มกู้คืน - เลือกตัวเลือกอัปโหลด จากนั้นวางหรือเลือกไฟล์ ZIP ที่คุณดาวน์โหลดจากที่เก็บ GitHub ไว้ก่อนหน้านี้
- คลิกปุ่มกู้คืนเพื่อนำเข้าเอเจนต์ที่เราให้ไว้

ยอดเยี่ยม คุณสร้างตัวแทนเสมือนสำหรับการจองดำน้ำที่พร้อมช่วยเหลือลูกค้าเสร็จแล้ว ในส่วนถัดไป คุณจะได้ทดสอบและดูว่าโมเดลตอบคำถามของผู้ใช้และช่วยจัดการคำขอจองได้ดีเพียงใด
4. ทดสอบ Agent
Dialogflow มีเครื่องจำลองในตัวเพื่อให้คุณแชทกับ Agent และค้นหาข้อบกพร่อง ในแต่ละรอบ คุณสามารถยืนยันค่าที่ถูกต้องสำหรับ Intent ที่ทริกเกอร์ การตอบกลับของเอเจนต์ หน้าที่ใช้งานอยู่ และพารามิเตอร์เซสชัน
เราจะทดสอบสถานการณ์ 2-3 สถานการณ์ และในแต่ละสถานการณ์ เราจะดูเหตุผลที่เอเจนต์ให้คำตอบที่เฉพาะเจาะจง มาเริ่มที่ข้อแรกกันเลย
ความตั้งใจที่ยังไม่ได้รับการแก้ไข
- ในคอนโซล Dialogflow และจากภายใน Agent ให้คลิกทดสอบ Agent เพื่อเปิดโปรแกรมจำลอง

- พิมพ์คำทักทายเจ้าหน้าที่ เช่น
Helloและถามwhat is a liveaboard?หากคำถามไม่ตรงกับเจตนาใดๆ ระบบจะแสดงข้อความทั่วไป เช่น "ขอโทษนะ ไม่แน่ใจว่าจะช่วยได้ยังไง" คุณสามารถตรวจสอบว่ามีการเรียกใช้เหตุการณ์ในตัว sys.no-match-default หรือไม่โดยตรวจสอบการตอบกลับเดิมในเครื่องจำลอง

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

- เปลี่ยนไปที่แท็บสร้าง แล้วเปิดหน้าเริ่มต้นของโฟลว์ Liveaboards

โดยค่าเริ่มต้น ทุกโฟลว์จะมีตัวแฮนเดิลเหตุการณ์สำหรับเหตุการณ์ในตัวที่ไม่มีการจับคู่และไม่มีอินพุต ระบบจะสร้างตัวแฮนเดิลเหตุการณ์เหล่านี้โดยอัตโนมัติเมื่อคุณสร้างโฟลว์ และคุณจะลบตัวแฮนเดิลเหตุการณ์ไม่ได้
- คลิกตัวแฮนเดิลเหตุการณ์ sys.no-match-default แล้วเลื่อนลงไปที่ส่วนคำตอบของเอเจนต์ Dialogflow มีรายการคำตอบสำรอง แต่คุณยังกำหนดข้อความตอบกลับประเภทต่างๆ เพื่อให้ผู้ใช้ปลายทางได้รับคำตอบมากกว่าแค่ข้อความได้ด้วย

ตอนนี้เรามาดูเส้นทางที่ราบรื่นกัน
เส้นทางที่ไม่พบข้อผิดพลาด
ในกรณีที่ 2 ให้สมมติว่าคุณเป็นนักดำน้ำที่ต้องการจองทริปล่องเรือดำน้ำสำหรับกลุ่มคน 12 คนไปยังหมู่เกาะกาลาปากอสในเดือนกรกฎาคมปีหน้า
- ในแผงจำลอง ให้คลิกไอคอนรีเซ็ตเพื่อเริ่มการสนทนาใหม่กับตัวแทน


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

- เปิดหน้าเริ่มต้น แล้วคลิกเส้นทาง head.send.group.request เลื่อนลงไปที่ส่วนการเปลี่ยนหน้า ซึ่งจะบอก Dialogflow ว่าจะเปลี่ยนไปที่หน้าใดเมื่อตรงกับ Intent นี้

- ปิดคำจำกัดความเส้นทางและขยายหน้ารวบรวมข้อมูลเพิ่มเติม สังเกตการดำเนินการตามรายการและรายการพารามิเตอร์

คุณสามารถกำหนดแบบฟอร์มสำหรับแต่ละหน้าใน Dialogflow CX ซึ่งเป็นรายการพารามิเตอร์ที่ควรเก็บรวบรวมจากผู้ใช้ปลายทางสำหรับหน้าดังกล่าว โปรดทราบว่าเอเจนต์ไม่ได้ถามถึงจุดหมายการเดินทางเนื่องจากเราส่งเป็นส่วนหนึ่งของข้อมูลเริ่มต้น และจุดหมายยังเป็นพารามิเตอร์ของเจตนาด้วย เมื่อหน้าเว็บเริ่มทํางานในตอนแรกและในระหว่างระยะเวลาที่ใช้งานอยู่ ระบบจะตั้งค่าพารามิเตอร์แบบฟอร์มที่มีชื่อเดียวกับพารามิเตอร์ความตั้งใจเป็นค่าพารามิเตอร์เซสชันโดยอัตโนมัติ และข้ามพรอมต์ที่เกี่ยวข้อง
- เปลี่ยนไปที่แท็บจัดการ แล้วคลิกเจตนา head.send group request ในส่วนเจตนา ดูวลีฝึกที่ระบุไว้สำหรับความตั้งใจนี้และส่วนที่อธิบายประกอบของวลีฝึก

- ลองพิจารณาวลีการฝึก "ฉันต้องการจัดการทริปไปคอสตาริกาสำหรับนักดำน้ำ 15 คน" "คอสตาริกา" มีคำอธิบายประกอบเป็นจุดหมาย และ "15" มีคำอธิบายประกอบเป็นจำนวนแขก เมื่อคุณใส่คำอธิบายประกอบในส่วนต่างๆ ของวลีการฝึก Dialogflow จะรับรู้ว่าส่วนต่างๆ เหล่านี้เป็นเพียงตัวอย่างของค่าจริงที่ผู้ใช้ปลายทางจะระบุในขณะรันไทม์ ด้วยเหตุนี้ สำหรับอินพุตเริ่มต้น "คุณมีบริการเช่าเหมาลำไปยังหมู่เกาะกาลาปาโกสไหม" Dialogflow ดึงพารามิเตอร์ปลายทางจาก "หมู่เกาะกาลาปากอส"
จากนั้นเราจะมาดูสิ่งที่เกิดขึ้นหากเราไม่ได้ระบุอินพุตที่ถูกต้องให้กับ Agent เมื่อถูกขอให้กรอกพารามิเตอร์แบบฟอร์ม
ข้อมูลที่ป้อนไม่ถูกต้อง
- ในแผงจำลอง ให้คลิกไอคอนรีเซ็ตเพื่อเริ่มการสนทนาใหม่กับตัวแทน
- แสดงความตั้งใจที่จะจองแบบกลุ่ม แต่คราวนี้ไม่ต้องบอกตัวแทนว่าคุณต้องการไปที่ไหน และเมื่อถูกถามถึงจุดหมายปลายทาง ให้ตอบด้วยค่าแบบสุ่มที่ไม่ใช่คอสตาริกา กาลาปากอส หรือเม็กซิโก

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

- คลิกเอนทิตีปลายทางเพื่อดูว่าเอนทิตีตรงกับค่าใด "ยุโรป" ไม่ใช่รายการใดรายการหนึ่งและไม่ใช่คำพ้องความหมายด้วย
- ในโฟลว์ไดอะแกรม ให้ขยายหน้ารวบรวมข้อมูลเพิ่มเติมที่มีพารามิเตอร์แบบฟอร์ม คลิกพารามิเตอร์ปลายทาง
- ในแผงพารามิเตอร์ ให้เลื่อนลงไปที่ส่วนตัวแฮนเดิลเหตุการณ์แจ้งอีกครั้ง แล้วคลิกตัวแฮนเดิลเหตุการณ์ค่าเริ่มต้นเมื่อไม่พบรายการที่ตรงกัน
ตัวแฮนเดิลเหตุการณ์ระดับพารามิเตอร์นี้มีไว้เพื่อจัดการอินพุตของผู้ใช้ปลายทางที่ไม่ถูกต้องในระหว่างการกรอกแบบฟอร์มโดยเฉพาะ เนื่องจาก "Europe'' เป็นอินพุตที่ไม่คาดคิด ระบบจึงเรียกใช้เหตุการณ์ sys.no-match-default และเรียกใช้เครื่องจัดการการแจ้งให้พูดซ้ำที่เกี่ยวข้องซึ่งกำหนดไว้สำหรับเหตุการณ์นี้ ส่วนตัวแทนพูดแสดงข้อความแจ้งอีกครั้ง 2 ข้อความ

ทำได้ดีมาก กรณีทดสอบเหล่านี้แสดงถึงสถานการณ์ทั่วไปที่คาดว่าเอเจนต์จะจัดการได้อย่างเหมาะสม บ่อยครั้งที่ผู้ใช้ถามคำถามที่บ็อตตอบไม่ได้ หรือส่งคำขอที่บ็อตดำเนินการให้ไม่ได้ การออกแบบสำหรับ Long Tail นั้นซับซ้อนมาก ซึ่งหมายถึงการออกแบบนอกเส้นทางที่ผู้ใช้ส่วนใหญ่จะทำตาม ลองคิดถึงสิ่งต่างๆ ที่อาจผิดพลาดในการสนทนา รวมถึงเส้นทางที่ไม่คาดคิดหรือไม่รองรับที่ผู้ใช้อาจเลือก
ความก้าวหน้าในการจดจำเสียงอัตโนมัติ (ASR) ทำให้เรารู้สิ่งที่ผู้ใช้พูดได้อย่างแม่นยำเกือบทุกครั้ง อย่างไรก็ตาม การพิจารณาว่าผู้ใช้ต้องการอะไรยังคงเป็นเรื่องที่ท้าทาย โดยมักจะเข้าใจคำพูดแบบแยกกันไม่ได้ แต่จะเข้าใจได้ในบริบทเท่านั้น ในส่วนถัดไปของ Codelab นี้ เราจะมาดูว่าโมเดลภาษาขนาดใหญ่ (LLM) แบบ Generative ล่าสุดของ Google จะช่วยให้การสนทนากลับมาอยู่ในเส้นทางเดิมและดำเนินต่อไปได้อย่างไร
5. เปิดใช้การสำรองข้อมูลแบบ Generative
ฟีเจอร์ Generative Fallback คืออะไร
ฟีเจอร์การสำรองข้อมูลแบบ Generative เป็นฟีเจอร์ของ Dialogflow CX ที่ใช้โมเดลภาษาขนาดใหญ่ (LLM) ของ Google เพื่อสร้างคำตอบของตัวแทนเสมือน
ฟีเจอร์นี้ช่วยอะไรได้บ้าง
ระหว่างกรณีการใช้งานหลักๆ มีคำขอของผู้ใช้ที่ค่อนข้างพบบ่อย เช่น การพูดซ้ำสิ่งที่ตัวแทนพูดในกรณีที่ผู้ใช้ไม่เข้าใจ การถือสายเมื่อผู้ใช้ขอ และการสรุปการสนทนา ในการทดสอบครั้งแรก เอเจนต์ตอบคำถาม "ไลฟ์อะบอร์ดคืออะไร" ไม่ได้ เนื่องจากเรายังไม่ได้สร้างเจตนาสำหรับคำถามนี้และออกแบบโฟลว์เพื่อจัดการคำถามทั่วไปประเภทดังกล่าวที่เกี่ยวข้องกับการดำน้ำและการพักผ่อนบนเรือ
แม้ว่าจะมีเจตนาที่ชัดเจน แต่ก็ยังอาจเกิดข้อผิดพลาดได้ ผู้ใช้อาจพูดนอกสคริปต์ด้วยการเงียบ (ข้อผิดพลาด "ไม่มีอินพุต") หรือพูดสิ่งที่ไม่ได้คาดไว้ (ข้อผิดพลาด "ไม่พบรายการที่ตรงกัน") แม้ว่าการป้องกันไม่ให้เกิดข้อผิดพลาดจะดีกว่าการจัดการข้อผิดพลาดหลังจากที่เกิดขึ้นแล้ว แต่ก็ไม่สามารถหลีกเลี่ยงข้อผิดพลาดได้โดยสิ้นเชิง พรอมต์ทั่วไป เช่น "ขอโทษนะ ไม่แน่ใจว่าจะช่วยได้ยังไง" หรือโซลูชันที่คล้ายกันซึ่งมีฟีเจอร์น้อยที่สุดมักไม่ดีพอ พรอมต์ข้อผิดพลาดควรได้รับแรงบันดาลใจจากหลักการความร่วมมือ ซึ่งการสื่อสารที่มีประสิทธิภาพขึ้นอยู่กับสมมติฐานที่ว่าผู้เข้าร่วมการสนทนามีความร่วมมือกัน
ในส่วนถัดไป เราจะดูวิธีกําหนดค่าฟีเจอร์สำรองของ Generative AI เพื่อเพิ่มความครอบคลุมของเจตนาและลดความซับซ้อนในการจัดการข้อผิดพลาดเพื่อประสบการณ์ของลูกค้าที่ดีขึ้น
เปิดใช้การสำรองข้อมูลแบบ Generative สำหรับเหตุการณ์ที่ไม่มีการจับคู่ของทั้งโฟลว์
คุณเปิดใช้การสำรองข้อมูลแบบ Generative ในตัวแฮนเดิลเหตุการณ์ที่ไม่มีรายการที่ตรงกันซึ่งใช้ในโฟลว์ หน้าเว็บ หรือระหว่างการกรอกพารามิเตอร์ได้ เมื่อเปิดใช้คำตอบสำรองแบบ Generative สำหรับเหตุการณ์ที่ไม่มีรายการที่ตรงกัน ทุกครั้งที่เหตุการณ์นั้นทริกเกอร์ Dialogflow จะพยายามสร้างคำตอบที่สร้างขึ้นซึ่งจะพูดกลับไปหาผู้ใช้ หากสร้างคำตอบไม่สำเร็จ ระบบจะออกคำตอบของเอเจนต์ตามที่กำหนดไว้ปกติแทน
คุณเปิดใช้การสำรองข้อมูลแบบ Generative ในเอเจนต์ได้ในตัวแฮนเดิลเหตุการณ์ที่ไม่มีการจับคู่ ซึ่งใช้ได้ในการดำเนินการตามโฟลว์ หน้าเว็บ หรือพารามิเตอร์
เราจะเริ่มเปิดใช้การสำรองข้อมูลแบบ Generative สำหรับทั้งโฟลว์ Liveaboards ในเหตุการณ์เริ่มต้นที่ไม่มีการจับคู่
- ขยายหน้าเริ่มต้นของโฟลว์
- คลิก sys.no-match-default ในส่วนตัวแฮนเดิลเหตุการณ์
- เลือกเปิดใช้การสำรองข้อมูลแบบ Generative ในส่วนคำตอบของเอเจนต์ แล้วคลิกบันทึก


เปิดใช้คำตอบสำรองแบบ Generative ในเหตุการณ์ที่ไม่มีรายการที่ตรงกันที่เฉพาะเจาะจง
ตอนนี้เราต้องการเปิดใช้การสำรองข้อมูลแบบ Generative เพื่อจัดการอินพุตที่ไม่ถูกต้องเมื่อตัวแทนถามจำนวนผู้โดยสาร
- เปิดหน้ารวบรวมข้อมูลเพิ่มเติมที่มีพารามิเตอร์ของแบบฟอร์ม คลิกพารามิเตอร์ number-of-guests
- ไปที่ตัวแฮนเดิลเหตุการณ์ไม่ตรงกันเป้าหมาย (เลื่อนลงไปที่ส่วนตัวแฮนเดิลเหตุการณ์แจ้งอีกครั้ง แล้วคลิกตัวแฮนเดิลเหตุการณ์ค่าเริ่มต้นไม่ตรงกัน)

- เลือกเปิดใช้การสำรองข้อมูลแบบ Generative ในส่วนคำตอบของตัวแทน

- สุดท้ายคลิกบันทึก
- ตอนนี้ให้ทำซ้ำขั้นตอนเดิมเพื่อเปิดใช้การสำรองข้อมูลแบบ Generative สำหรับ destination และ email-address
ทำได้ดีมาก คุณได้เปิดใช้การสำรองข้อมูลแบบ Generative เพื่อจัดการเจตนาที่ไม่คาดคิดและค่าพารามิเตอร์ที่ไม่ถูกต้อง ต่อไปเราจะมาดูวิธีกำหนดค่าฟีเจอร์สำรองแบบ Generative ด้วยพรอมต์ข้อความที่สั่งให้ LLM ตอบสนองอย่างไร
6. กำหนดค่าสำรองแบบ Generative AI
ฟีเจอร์สำรองแบบ Generative จะส่งคำขอไปยังโมเดลภาษาขนาดใหญ่เพื่อสร้างคำตอบที่สร้างขึ้น คำขอจะอยู่ในรูปแบบของพรอมต์ข้อความซึ่งเป็นการผสมผสานระหว่างภาษาธรรมชาติและข้อมูลเกี่ยวกับสถานะปัจจุบันของเอเจนต์และการสนทนา คุณกำหนดค่าฟีเจอร์นี้ได้หลายวิธี ดังนี้
- เลือกพรอมต์ที่เฉพาะเจาะจง (ที่กำหนดไว้แล้ว) เพื่อใช้ในการสร้างคำตอบ
- กำหนดพรอมต์ที่กำหนดเอง
เลือกพรอมต์ที่กำหนดไว้แล้ว
- ในคอนโซล Dialogflow CX ให้คลิกการตั้งค่า Agent

- ไปที่แท็บ ML แล้วไปที่แท็บย่อย Generative AI

ฟีเจอร์นี้มาพร้อมกับพรอมต์เทมเพลต 2 รายการ ได้แก่ เทมเพลตค่าเริ่มต้น (ซึ่งมองไม่เห็น) และเทมเพลตตัวอย่างที่จะแนะนำวิธีเขียนพรอมต์ของคุณเอง
- เลือกเทมเพลตตัวอย่าง แล้วคลิกปุ่มแก้ไขทางด้านขวาของเมนูแบบเลื่อนลงเพื่อตรวจสอบ
พรอมต์ที่กำหนดไว้ล่วงหน้าจะช่วยให้ตัวแทนเสมือนจัดการสถานการณ์การสนทนาขั้นพื้นฐานได้ เช่น
- กล่าวทักทายและบอกลาผู้ใช้
- พูดซ้ำสิ่งที่ตัวแทนพูดในกรณีที่ผู้ใช้ไม่เข้าใจ
- รอสายเมื่อผู้ใช้ขอ
- สรุปการสนทนา
มาลองกำหนดพรอมต์ข้อความที่เฉพาะเจาะจงสำหรับเอเจนต์ Divebooker กัน
7. กำหนดพรอมต์ของคุณเอง
- คัดลอกพรอมต์ด้านล่างและวางในพื้นที่พรอมต์ข้อความ
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
- เลือกบันทึกเป็นเทมเพลตใหม่เพื่อจัดเก็บพรอมต์ใหม่เป็นเทมเพลตใหม่ (เลือกชื่อเทมเพลตใหม่) แล้วคลิกบันทึกที่มุมขวาล่างของแผง

- หากต้องการให้พรอมต์ที่สร้างขึ้นใหม่เป็นพรอมต์ที่ใช้งานอยู่ คุณต้องบันทึกการตั้งค่าด้วย

เมื่อเขียนพรอมต์ข้อความของคุณเอง ให้เขียนให้ชัดเจน กระชับ และเป็นคำสั่ง วิธีสร้างพรอมต์สำหรับ LLM อาจส่งผลอย่างมากต่อคุณภาพของคำตอบจาก LLM LLM ได้รับการฝึกให้ทําตามคําสั่ง ดังนั้นยิ่งพรอมต์ของคุณดูเหมือนคําสั่งที่แม่นยํามากเท่าใด คุณก็ยิ่งมีแนวโน้มที่จะได้รับผลลัพธ์ที่ดีขึ้นเท่านั้น สร้างพรอมต์และอิงตามผลลัพธ์ที่ได้รับ จากนั้นจึงทำซ้ำเพื่อปรับปรุง
หากต้องการสร้างพรอมต์ที่มีประสิทธิภาพ ให้ทําตามแนวทางปฏิบัติแนะนําต่อไปนี้
- ระบุคำอธิบายที่ชัดเจนและกระชับเกี่ยวกับงานที่คุณต้องการให้ LLM ทำ ไม่มากหรือน้อยไปกว่านี้ ทำให้สมบูรณ์และสั้น
- นอกจากนี้ พรอมต์ควรมีความเฉพาะเจาะจงและกำหนดไว้อย่างชัดเจน โดยหลีกเลี่ยงการใช้ภาษาที่คลุมเครือหรือกำกวม
- แบ่งงานที่ซับซ้อนออกเป็นส่วนย่อยๆ ที่จัดการได้ง่ายขึ้น การแบ่งงานออกเป็นขั้นตอนย่อยๆ จะช่วยให้โมเดลจดจ่อกับสิ่งใดสิ่งหนึ่งได้ในแต่ละครั้ง และลดโอกาสที่จะเกิดข้อผิดพลาดหรือความสับสน
- หากต้องการปรับปรุงคุณภาพคำตอบ ให้เพิ่มตัวอย่างในพรอมต์ LLM จะเรียนรู้ในบริบทจากตัวอย่างเกี่ยวกับวิธีตอบ
เมื่อสร้างพรอมต์ นอกเหนือจากคำอธิบายภาษาธรรมชาติเกี่ยวกับบริบทประเภทที่ควรสร้างแล้ว คุณยังใช้ตัวยึดตำแหน่งต่อไปนี้ได้ด้วย
$conversationการสนทนาระหว่าง Agent กับผู้ใช้ โดยไม่รวมคำพูดสุดท้ายของผู้ใช้ คุณสามารถปรับคำนำหน้าเลี้ยว (เช่น "มนุษย์" "AI" หรือ "คุณ" "เอเจนต์") ในพรอมต์ข้อความ$last-user-utteranceคำพูดของผู้ใช้ล่าสุด$flow-descriptionคำอธิบายโฟลว์ของโฟลว์ที่ใช้งานอยู่$route-descriptionsคำอธิบายความตั้งใจของความตั้งใจที่ใช้งานอยู่
ตอนนี้เรามีพรอมต์ข้อความเริ่มต้นแล้ว งานต่อไปคือการตรวจสอบว่าโฟลว์และเจตนาได้รับการอธิบายอย่างดี
8. เพิ่มคำอธิบายโฟลว์และเจตนา
เพิ่มคำอธิบายโฟลว์
- หากต้องการเพิ่มคำอธิบายลงในโฟลว์ Liveaboards ให้เข้าถึงการตั้งค่าโฟลว์โดยวางเมาส์เหนือโฟลว์ในส่วนโฟลว์

- คลิกปุ่มตัวเลือก

- เลือกการตั้งค่าโฟลว์ แล้วเพิ่มคำอธิบายต่อไปนี้ (หรือคำอธิบายที่คล้ายกัน)
search, find and book liveaboards

- คลิกบันทึก
เพิ่มคำอธิบายความตั้งใจ
- ตอนนี้มาเพิ่มคำอธิบายที่ดีให้กับ Intent head.send.group.request กัน เปลี่ยนไปที่แท็บจัดการ เลือกเจตนาในส่วนทรัพยากร แล้วเลือกเจตนา head.send.group.request
- เพิ่มคำอธิบายต่อไปนี้
assist users with group or full charter reservations. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands
โปรดทราบว่าคำอธิบายมีข้อมูลสำคัญ เช่น จำนวนผู้โดยสารขั้นต่ำและสูงสุดที่อนุญาตบนเรือ โปรดทราบ
- คลิกบันทึก
คุณได้ดำเนินการเสร็จสิ้นแล้ว คุณได้เปิดใช้การสำรองข้อมูลแบบ Generative ในตัวแฮนเดิลเหตุการณ์ที่ไม่มีรายการที่ตรงกันสําหรับทั้งโฟลว์และการดำเนินการตามพารามิเตอร์ นอกจากนี้ คุณยังได้กำหนดพรอมต์ข้อความของคุณเองซึ่งฟีเจอร์การทำงานสำรองแบบ Generative จะส่งไปยังโมเดลภาษาขนาดใหญ่เพื่อสร้างคำตอบแบบ Generative
ในส่วนถัดไป คุณจะทดสอบเอเจนต์อีกครั้งเพื่อดูว่าเอเจนต์ตอบคำถามที่ท้าทายคำถามเดิมจากก่อนหน้านี้ได้อย่างไร
9. ทดสอบ Agent อีกครั้ง
ตอนนี้คุณได้กำหนดค่าและเปิดใช้การสำรองข้อมูลแบบ Generative ในตัวแทนเสมือนแล้ว คุณสามารถถามคำถามที่คล้ายกันซึ่งมีความท้าทายและดูวิธีจัดการคำตอบได้
คลิกทดสอบเอเจนต์เพื่อเปิดโปรแกรมจำลองอีกครั้ง

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

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

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


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


มี 2-3 ประเด็นที่อยากจะพูดถึง
- ทำไม 20 จึงไม่ใช่หมายเลขที่ถูกต้อง เนื่องจากเราได้กำหนดขีดจำกัดจำนวนแขกที่อนุญาตไว้เป็นส่วนหนึ่งของคำอธิบายความตั้งใจว่า "เอเจนต์รวบรวมข้อมูล เช่น ระยะเวลาออกเดินทาง จุดหมายปลายทาง จำนวนแขก ***(ขั้นต่ำ 4 คน สูงสุด 15 คน)* รายละเอียดการติดต่อ" คำตอบที่ Generative AI ของ LLM ส่งกลับมาว่า "ขออภัย เราช่วยเหลือได้เฉพาะการจองแบบกลุ่มสำหรับแขกไม่เกิน 15 คนเท่านั้น" สอดคล้องกับข้อจำกัดที่เรากำหนดไว้เกี่ยวกับจำนวนแขกอย่างสมบูรณ์ เพื่อบังคับใช้ข้อกำหนดนี้เพิ่มเติม จำนวนแขกเป็นเอนทิตี RegExp ที่กำหนดเองซึ่งตรงกับเฉพาะตัวเลขที่รวมอยู่ในช่วง 4-15
- การสนทนาจึงดำเนินต่อไปเนื่องจากท้ายที่สุดแล้วผู้ใช้ยังคงต้องการรับข้อเสนอสำหรับนักดำน้ำ 15 คน ซึ่งเกิดขึ้นบ่อยครั้งในการสนทนาตามปกติ เราเปลี่ยนใจกันบ่อยมาก สังเกตว่าเอเจนต์ให้ความร่วมมือและค่อยๆ นำผู้ใช้กลับไปสู่เส้นทางที่ประสบความสำเร็จ
การออกแบบการสนทนาเกี่ยวข้องกับการเขียนสคริปต์ครึ่งหนึ่งของกล่องโต้ตอบ โดยหวังว่าสคริปต์นั้นจะแข็งแกร่งพอที่ใครๆ ก็สามารถเข้ามาและแสดงอีกครึ่งหนึ่งได้ เมื่อออกแบบสำหรับ Long Tail นักพัฒนาแอปต้องมุ่งเน้นสิ่งที่ผู้ใช้อาจพูดในทุกขั้นตอนของกล่องโต้ตอบเพื่อกำหนดเส้นทาง ตัวแฮนเดิล และพารามิเตอร์ ด้วยเหตุนี้ เราจึงเพิ่มฟีเจอร์สำรองข้อมูลแบบ Generative ลงใน Dialogflow CX เพื่อให้นักพัฒนาแอปมุ่งเน้นที่หลักการออกแบบการสนทนาและรายละเอียดการใช้งานน้อยลง เพื่อมอบประสบการณ์การสนทนาที่แข็งแกร่งแก่ผู้ใช้
มาทดสอบอีกครั้งกันดีกว่า คราวนี้ลองท้าทายบอทอีกครั้งด้วยสถานที่ที่ไม่อยู่ในรายชื่อจุดหมายปลายทางที่พร้อมให้บริการ เช่น มัลดีฟส์ จากนั้นเราจะมาดูเบื้องหลังการทำงานกัน

โปรดทราบว่าเนื่องจากเราได้เปิดใช้การสำรองข้อมูลแบบ Generative ในเหตุการณ์ no-match สำหรับพารามิเตอร์ปลายทางด้วย ระบบจึงส่งคำขอไปยังโมเดลภาษาขนาดใหญ่เพื่อสร้างคำตอบที่สร้างขึ้น ระบบจะไม่สนใจคำตอบที่กำหนดไว้ล่วงหน้าตามปกติ (ในส่วน "ตัวแทนกล่าวว่า")
ช่องข้อความด้านล่างจะช่วยให้คุณเข้าใจได้ดียิ่งขึ้นว่าตัวยึดตำแหน่งช่วยกำหนดคำขอที่ส่งไปยังโมเดลภาษาขนาดใหญ่ได้อย่างไร
นี่คือพรอมต์ข้อความที่กำหนดเองซึ่งเราได้กำหนดค่าไว้ใน Dialogflow โดยมีตัวยึดตำแหน่งที่ไฮไลต์เป็นตัวหนา
You are a friendly agent that likes helping traveling divers.
You are under development and you can only help
$flow-description
At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts.
Currently you can $route-descriptions
The conversation between the human and you so far was:
${conversation USER:"Human:" AGENT:"AI"}
Then the human asked:
$last-user-utterance
You say:
ในกล่องข้อความด้านล่างนี้ ฉันได้รวมอินพุตที่โมเดลภาษาขนาดใหญ่ได้รับและเอาต์พุตที่มีคำตอบที่สร้างขึ้นซึ่งจะพูดกลับไปหาผู้ใช้
llm_input: You are a friendly agent that likes helping traveling divers. You are under development and you can only help search, find and book liveaboards. At the moment you can't help customers with land-based diving and courses. You cannot recommend local dive shops and diving resorts. Currently you can assist users who are looking for a group reservation or a full charter. Initially collect travel details including departure period, destination, number of guests (min 4 max 15 people), contact details. The destination must be one of the following in the Pacific: Costa Rica, Mexico, Galapagos Islands. The conversation between the human and you so far was: Human: Hi, my name's Alessia AI Hi Alessia, what can I help you with today? Human: Can you help me find a nice boat for myself and my family? AI To assist you with that I need to collect the details of your travel and then we'll get back to you with an offer shortly. Where would you like to go? We can organize a charter in Costa Rica, Galapagos Islands and several locations around Mexico Then the human asked: The kids want to go to the Maldives llm_output: You say: I'm sorry Alessia, we can only help you with liveaboards in Costa Rica, Galapagos Islands and several locations around Mexico.
เช่นเดียวกับการทดสอบที่ทำก่อนหน้านี้ การตอบกลับที่ส่งกลับไปยังผู้ใช้จะสร้างขึ้นโดยโมเดลและอิงตามข้อมูลที่เราให้ไว้เป็นส่วนหนึ่งของคำอธิบายเจตนาที่ว่า "จุดหมายปลายทางต้องเป็นหนึ่งในสถานที่ต่อไปนี้ในมหาสมุทรแปซิฟิก ได้แก่ คอสตาริกา เม็กซิโก และหมู่เกาะกาลาปากอส"
แก้ไขรายการวลีที่ถูกแบน
คุณกำหนดค่าฟีเจอร์การสำรองข้อมูลแบบ Generative ได้หลายวิธี ดังนี้
- เลือกพรอมต์ที่เฉพาะเจาะจง (ที่กำหนดไว้แล้ว) เพื่อใช้ในการสร้างคำตอบ
- กำหนดพรอมต์ที่กำหนดเอง
- เปลี่ยนรายการวลีที่ถูกแบน
ที่ผ่านมาเราได้ดู 2 วิธีแรกไปแล้ว มาดูตัวเลือกที่ 3 กัน
- ในการตั้งค่าเอเจนต์ ให้ไปที่แท็บ ML แล้วไปที่แท็บย่อย Generative AI
- ในส่วนวลีที่ถูกแบน ให้เพิ่มประโยคต่อไปนี้ลงในรายการ
Dangerous countryHateful placeMedical assistance- คลิกบันทึก
- คลิกไอคอนรีเซ็ตและทดสอบสถานการณ์ล่าสุดอีกครั้ง แทนที่จะระบุจุดดำน้ำที่สวยงามทั่วโลก ให้ป้อนวลีที่ถูกแบน

ระบบจะตรวจสอบพรอมต์และคำตอบที่สร้างขึ้นกับรายการวลีที่ถูกแบน วลีที่ถูกแบนคือวลีที่ถูกแบนสำหรับ Generative AI หากอินพุตมีวลีที่ถูกแบนหรือวลีที่ถือว่าไม่ปลอดภัย การสร้างจะไม่สำเร็จ และระบบจะออกการตอบกลับตามปกติที่กำหนดไว้ (ภายใต้ "Agent พูด" ในการดำเนินการเดียวกัน) แทน
ยอดเยี่ยม เราได้ครอบคลุมสถานการณ์การสนทนาที่หลากหลายซึ่งคำตอบที่สร้างขึ้นสามารถสร้างความแตกต่างได้อย่างแท้จริง คุณสามารถทดสอบต่อไปได้
10. ขอแสดงความยินดี
ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์ ได้เวลาพักผ่อนแล้ว

คุณสร้างตัวแทนเสมือนเรียบร้อยแล้ว และได้เปิดใช้การสำรองข้อมูลแบบ Generative ในตัวแฮนเดิลเหตุการณ์ no-match ที่ใช้ในโฟลว์และระหว่างการกรอกพารามิเตอร์
ฟีเจอร์ Fallback แบบ Generative เมื่อใช้ร่วมกับคำอธิบายโฟลว์และเจตนาที่ดีจะช่วยให้เอเจนต์ตอบกลับได้อย่างเฉพาะเจาะจงและให้ความร่วมมือ แทนที่จะใช้พรอมต์ทั่วไป เช่น "ขออภัย ฉันไม่แน่ใจว่าจะช่วยคุณได้อย่างไร" หรือ "ขออภัย คุณป้อนตัวเลือกที่ไม่ถูกต้อง" ข้อความแสดงข้อผิดพลาดที่โมเดลภาษาขนาดใหญ่สร้างขึ้นจะช่วยนำผู้ใช้กลับไปสู่เส้นทางที่ประสบความสำเร็จหรือปรับความคาดหวังของผู้ใช้เกี่ยวกับสิ่งที่เป็นไปได้และเป็นไปไม่ได้
คุณสามารถทดสอบสถานการณ์การสนทนาอื่นๆ และสำรวจฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับ Dialogflow CX และ Generative AI ได้
ล้าง
คุณสามารถล้างข้อมูลต่อไปนี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้
- ไปที่คอนโซล Dialogflow CX แล้วลบ Agent ทั้งหมดที่คุณสร้าง
- ในคอนโซล Google Cloud ให้ไปที่หน้า API และบริการ แล้วปิดใช้ Dialogflow API
อ่านเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ AI แบบสนทนาและ Generative AI ได้จากคำแนะนำและแหล่งข้อมูลต่อไปนี้
- เอกสารประกอบสำหรับ Dialogflow CX
- เอกสารประกอบสำหรับการสำรองข้อมูล Generative AI
- Generative AI ใน Google Cloud
- ข้อมูลเบื้องต้นเกี่ยวกับ PaLM
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป
