1. ภาพรวม
อัปเดตล่าสุด: 07-08-2023
สิ่งที่คุณจะสร้าง
ในโค้ดแล็บนี้ คุณจะได้สร้าง ทำให้ใช้งานได้ และกำหนดค่าเอเจนต์เสมือนอย่างง่ายใน 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 Console ในเบราว์เซอร์
- ในคอนโซล 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.
รับรหัส
คุณจะไม่ต้องสร้างเอเจนต์เสมือนตั้งแต่ต้น เราจะจัดหาเอเจนต์ให้คุณ ซึ่งคุณจะต้องกู้คืนจาก Dialogflow CX Console แล้วจึงปรับปรุง
วิธีดาวน์โหลดซอร์สโค้ด
- เปิดแท็บเบราว์เซอร์ใหม่ ไปที่ที่เก็บ Agent แล้วโคลนจากบรรทัดคำสั่ง
- ระบบได้ส่งออกเอเจนต์เริ่มต้นเป็นแพ็กเกจ JSON แล้ว คลายซิปไฟล์ ตรวจสอบการตั้งค่าเอเจนต์ ดูคำจำกัดความของโฟลว์
Liveaboards.jsonและสุดท้ายคือเรียกดูหน้าโฟลว์ เจตนา และเอนทิตี
3. สร้างเอเจนต์ใหม่
เปิดคอนโซล Dialogflow
คุณจะใช้คอนโซล Dialogflow CX พร้อมกับโปรเจ็กต์ Google Cloud เพื่อทำขั้นตอนที่เหลือในโค้ดแล็บนี้
- ไปที่คอนโซล Dialogflow CX ในเบราว์เซอร์
- เลือกโปรเจ็กต์ Google Cloud ที่ต้องการใช้ หรือสร้างโปรเจ็กต์ใหม่เพื่อใช้งาน
- คุณควรเห็นรายการ Agent ในคอนโซล Dialogflow CX
หากใช้ Dialogflow CX เป็นครั้งแรก โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าโปรเจ็กต์และการตั้งค่าตามความต้องการของคุณในเอกสารประกอบของ Dialogflow CX
สร้างเอเจนต์ 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 ว่าจะเปลี่ยนไปที่หน้าใดเมื่อตรงกับความตั้งใจนี้

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

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

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

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

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

ทำได้ดีมาก กรณีทดสอบเหล่านี้แสดงถึงสถานการณ์ทั่วไปที่คาดว่าตัวแทนจะจัดการได้อย่างเหมาะสม บ่อยครั้งที่ผู้ใช้ถามคำถามที่บ็อตตอบไม่ได้ หรือส่งคำขอที่บ็อตดำเนินการให้ไม่ได้ การออกแบบสำหรับ Long Tail นั้นซับซ้อนมาก ซึ่งหมายถึงการออกแบบนอกเส้นทางที่ผู้ใช้ส่วนใหญ่จะทำตาม ลองคิดถึงสิ่งต่างๆ ที่อาจผิดพลาดในการสนทนาและเส้นทางที่ไม่คาดคิดหรือไม่รองรับที่ผู้ใช้อาจเลือก
ความก้าวหน้าในการจดจำเสียงอัตโนมัติ (ASR) ทำให้เรารู้สิ่งที่ผู้ใช้พูดได้อย่างแม่นยำเกือบทุกครั้ง อย่างไรก็ตาม การพิจารณาว่าผู้ใช้ต้องการอะไรยังคงเป็นเรื่องที่ท้าทาย โดยทั่วไปแล้ว ระบบจะไม่เข้าใจคำพูดเมื่อแยกออกมา แต่จะเข้าใจได้เมื่ออยู่ในบริบท ในส่วนถัดไปของโค้ดแล็บนี้ เราจะมาดูว่าโมเดลภาษาขนาดใหญ่ (LLM) แบบ Generative ล่าสุดของ Google จะช่วยให้การสนทนากลับมาอยู่ในเส้นทางเดิมและดำเนินต่อไปได้อย่างไร
5. เปิดใช้การสำรองข้อมูลแบบ Generative
ฟีเจอร์ Generative Fallback คืออะไร
ฟีเจอร์ Fallback แบบ Generative เป็นฟีเจอร์ของ Dialogflow CX ที่ใช้โมเดลภาษาขนาดใหญ่ (LLM) ของ Google เพื่อสร้างคำตอบของตัวแทนเสมือน
ฟีเจอร์นี้ช่วยอะไรได้บ้าง
ระหว่างกรณีการใช้งานหลักๆ มีคำขอของผู้ใช้ที่ค่อนข้างพบบ่อย เช่น การพูดซ้ำสิ่งที่ตัวแทนพูดในกรณีที่ผู้ใช้ไม่เข้าใจ การถือสายเมื่อผู้ใช้ขอ และการสรุปการสนทนา ในการทดสอบครั้งแรกที่เราทำ เอเจนต์ตอบคำถาม "ไลฟ์อะบอร์ดคืออะไร" ไม่ได้ เนื่องจากเรายังไม่ได้สร้างเจตนาสำหรับคำถามนี้และออกแบบโฟลว์เพื่อจัดการคำถามทั่วไปประเภทดังกล่าวที่เกี่ยวข้องกับการดำน้ำและการพักผ่อนบนเรือ
แม้ว่าความตั้งใจจะชัดเจนเพียงใด แต่ก็ยังอาจเกิดข้อผิดพลาดได้ ผู้ใช้อาจพูดนอกสคริปต์ด้วยการเงียบ (ข้อผิดพลาด "ไม่มีอินพุต") หรือพูดสิ่งที่ไม่ได้คาดไว้ (ข้อผิดพลาด "ไม่ตรงกัน") แม้ว่าการป้องกันไม่ให้เกิดข้อผิดพลาดจะดีกว่าการจัดการข้อผิดพลาดหลังจากที่เกิดขึ้นแล้ว แต่ก็ไม่สามารถหลีกเลี่ยงข้อผิดพลาดได้โดยสิ้นเชิง พรอมต์ทั่วไป เช่น "ขอโทษนะ ไม่แน่ใจว่าจะช่วยได้ยังไง" หรือโซลูชันที่คล้ายกันซึ่งใช้งานได้ขั้นต่ำมักไม่ดีพอ ข้อความแจ้งข้อผิดพลาดควรได้รับแรงบันดาลใจจากหลักการความร่วมมือ ซึ่งการสื่อสารที่มีประสิทธิภาพขึ้นอยู่กับสมมติฐานที่ว่าผู้เข้าร่วมการสนทนามีความร่วมมือกัน
ในส่วนถัดไป เราจะดูวิธีกำหนดค่าฟีเจอร์ Fallback แบบ Generative เพื่อเพิ่มความครอบคลุมของเจตนาและลดความซับซ้อนในการจัดการข้อผิดพลาดเพื่อประสบการณ์การใช้งานของลูกค้าที่ดียิ่งขึ้น
เปิดใช้การสำรองข้อมูลแบบ 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
ฟีเจอร์สำรองแบบ 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การสนทนาระหว่างตัวแทนกับผู้ใช้ โดยไม่รวมคำพูดสุดท้ายของผู้ใช้ คุณสามารถปรับคำนำหน้าเลี้ยว (เช่น "มนุษย์" "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 Fallback จะส่งไปยังโมเดลภาษาขนาดใหญ่เพื่อสร้างคำตอบแบบ Generative AI
ในส่วนถัดไป คุณจะทดสอบ Agent อีกครั้งเพื่อดูว่า Agent ตอบคำถามที่ท้าทายคำถามเดิมจากก่อนหน้านี้ได้อย่างไร
9. ทดสอบ Agent อีกครั้ง
ตอนนี้คุณได้กำหนดค่าและเปิดใช้การสำรองข้อมูล Generative AI ในเอเจนต์เสมือนแล้ว คุณสามารถถามคำถามที่คล้ายกันซึ่งมีความท้าทายและดูวิธีที่เอเจนต์จัดการคำตอบได้
คลิกทดสอบเอเจนต์เพื่อเปิดโปรแกรมจำลองอีกครั้ง

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

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

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


เมื่อ 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 says" ในการดำเนินการเดียวกัน) แทน
ยอดเยี่ยม เราได้ครอบคลุมสถานการณ์การสนทนาที่หลากหลายซึ่งคำตอบที่สร้างขึ้นสามารถสร้างความแตกต่างได้อย่างแท้จริง คุณสามารถทดสอบต่อไปได้
10. ขอแสดงความยินดี
เก่งมากที่ทำ Codelab เสร็จสมบูรณ์ ได้เวลาพักผ่อนแล้ว

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