วิศวกรรมคำสั่งส่วนใหญ่มุ่งเน้นความถูกต้องและความครอบคลุมของคำสั่ง การปรับปรุงระบบใช้งานจริงให้ได้ผลสูงสุดเกิดจากการมองว่าตัวบทสนทนาเองคือโจทย์หลักในการออกแบบ
การกำหนดเจตนาแบบเงื่อนไขและการกระทำช่วยชี้นำวิธีตัดสินใจของโมเดล แทนที่จะกำหนดบทพูดตายตัวจนโมเดลไม่สามารถปรับเปลี่ยนได้ ตำแหน่งของเนื้อหาในพรอมต์ถือเป็นคำสั่งอย่างหนึ่งในตัวเอง โดยวางอัตลักษณ์ไว้ตอนต้น รายละเอียดปลีกย่อยด้านพฤติกรรมไว้ตรงกลาง และข้อจำกัดที่ต้องปฏิบัติตามอย่างเคร่งครัดไว้ตอนท้าย ส่วนข้อกำหนดที่สำคัญอย่างแท้จริงให้ระบุไว้ทั้งตอนต้นและตอนท้าย
การเขียนพรอมต์ด้วยน้ำเสียงที่ต้องการโดยตรง แทนที่จะอธิบายว่าน้ำเสียงนั้นควรเป็นอย่างไร เป็นหนึ่งในการปรับเปลี่ยนที่ส่งผลมากที่สุด
เอเจนต์ที่สื่อสารได้อย่างต่อเนื่องและเป็นอันหนึ่งอันเดียวกันมากที่สุด มักเกิดจากพรอมต์ที่กำหนดให้แต่ละช่วงของบทสนทนามีรูปแบบการโต้ตอบที่เหมาะกับบริบทนั้นๆ โดยไม่ทำให้น้ำเสียงโดยรวมเปลี่ยนไปจนรู้สึกว่าเป็นคนละเอเจนต์
ในบางกรณี การแยกเอเจนต์ที่ทำหน้าที่คิดออกจากเอเจนต์ที่ทำหน้าที่สื่อสาร ช่วยให้คำตอบมีความเป็นอันหนึ่งอันเดียวกันและอิงข้อเท็จจริงมากขึ้น อีกทั้งยังป้องกันไม่ให้กระบวนการใช้เหตุผลภายในหลุดออกมาในคำตอบ
ก่อนหน้านี้ เราได้แนะนำแนวทางใหม่ในการเขียนพรอมต์ที่พัฒนาขึ้นจากองค์ความรู้ด้านภาษาศาสตร์และจิตวิทยาการรู้คิด โดยเน้นย้ำถึงความสำคัญของการกำหนดกรอบปัญหาให้ชัดเจนและมีขอบเขต เพื่อให้เอเจนต์ทำงานอยู่ภายในกรอบนั้นได้อย่างเหมาะสม ทั้งยังต้องครอบคลุมภารกิจในระดับเมตาของการดำเนินบทสนทนา ซึ่งเป็นหัวใจสำคัญของ AI ที่สื่อสารกับลูกค้า
ต่อไป เราจะมาดูตัวอย่างการปรับเปลี่ยนพรอมต์ในทางปฏิบัติ เมื่อเรานำหลักการเหล่านี้ไปประยุกต์ใช้กับระบบจริง
จากการปรับพรอมต์ซ้ำหลายร้อยครั้งในระบบที่ให้บริการลูกค้าจริง เราพบว่าการพัฒนาที่เห็นผลชัดเจนที่สุดไม่ได้เกิดจากการเพิ่มคำสั่ง ใส่ตัวอย่างให้มากขึ้น หรือทำตามแนวทางการเขียนพรอมต์ทั่วไป หากแต่มาจากการมองว่าบทสนทนาคือแก่นแท้ของโจทย์
จากการสำรวจและทดสอบอย่างต่อเนื่อง เราได้ค้นพบเทคนิคที่มีประสิทธิภาพหลายประการ โดยแต่ละครั้งเราจะปรับพรอมต์ แล้วสังเกตว่าบทสนทนาส่วนใดได้ผลหรือไม่เป็นไปตามที่ต้องการ พร้อมสืบหาต้นตอของปัญหาว่าเกิดจากแนวทางที่ให้ไว้ โครงสร้างพรอมต์ หรือการเลือกใช้ภาษา ผลลัพธ์ที่ได้คือรูปแบบจำนวนหนึ่งที่นำกลับมาใช้ซ้ำได้ ซึ่งช่วยเปลี่ยนวิธีที่เอเจนต์ตีความบทบาทของตนในบทสนทนา ตัดสินใจว่าจะทำอะไรต่อไป และรักษาน้ำเสียงให้สม่ำเสมอเมื่อบริบทเปลี่ยนไป
เนื้อหาต่อไปนี้ไม่ใช่กรอบแนวทางที่ใช้ได้กับทุกกรณี และไม่ได้หมายความว่าเรา “แก้โจทย์” การเขียนพรอมต์ได้อย่างสมบูรณ์แล้ว แต่เป็นการกลั่นบทเรียนจากสิ่งที่พิสูจน์แล้วว่าใช้ได้ผลจริงในระบบที่พร้อมให้บริการออกมาเป็น 5 รูปแบบ โดยเป้าหมายไม่ได้มีเพียงความถูกต้องในการทำงาน แต่ยังรวมถึงบทสนทนาที่ดียิ่งขึ้น ทั้งสอดคล้อง เป็นธรรมชาติ และมีน้ำเสียงที่สม่ำเสมอจนสามารถถ่ายทอดเอกลักษณ์ของแบรนด์ได้
แม้จะมีหลายวิธีในการจัดโครงสร้างระบบเอเจนต์ แต่เวิร์กโฟลว์ที่ประสานการทำงานแบบหลายเอเจนต์ยังคงได้รับความนิยม โดยเฉพาะในระบบเหล่านี้ การปรับปรุงที่ให้ผลสม่ำเสมอที่สุดคือการแยกเอเจนต์ที่คิดออกจากเอเจนต์ที่พูด
การประสานเจตนา การจำแนกประเภท การดึงข้อมูลความรู้ และการใช้เครื่องมือ ล้วนเป็นงานเบื้องหลัง คำตอบที่ส่งถึงลูกค้าคืองานเบื้องหน้า เมื่อเอเจนต์ตัวเดียวทำทั้งสองอย่างในรอบเดียว การให้เหตุผลและตรรกะภายในอาจรั่วไหลสู่คำตอบ คำตอบจึงเต็มไปด้วยถ้อยคำเผื่อเหลือเผื่อขาด คุณสมบัติประกอบที่มากเกินไป หรือมีโครงสร้างตามตรรกะของกระบวนการแทนที่จะตอบสนองความต้องการของผู้ใช้


ข้อจำกัดเพียงข้อเดียวนี้ให้ผลลัพธ์มากกว่าที่คิด เพราะช่วยให้คำตอบยึดโยงกับบทสนทนาที่เกิดขึ้นจริง รักษาบริบทเดิมไว้ และทำให้ผลลัพธ์ใกล้เคียงกับสิ่งที่เราเรียกว่า “การเติมเฉพาะส่วนต่าง” ซึ่งหมายความว่าเอเจนต์จะเสริมเพียงสิ่งใหม่ที่จำเป็นที่สุดและช่วยให้ผู้ใช้เดินหน้าต่อได้อย่างแท้จริง
การเลือกประเภทของคำตอบก็มีความสำคัญไม่แพ้กัน เราพบว่าการให้เอเจนต์ที่ทำหน้าที่สนทนาตัดสินใจก่อนว่าจะตอบแบบไหน เช่น ให้คำตอบ ขอความชัดเจน ชี้นำไปในทิศทางอื่น หรือแจ้งให้รอ แล้วจึงค่อยเขียน ช่วยลดความผิดพลาดในการสนทนาที่พบได้บ่อยที่สุดอย่างเห็นผล ซึ่งไม่ใช่การเขียนที่ไม่มีคุณภาพ แต่เป็นการให้คำตอบที่ผิดประเภทโดยสิ้นเชิง
สิ่งที่น่าสังเกตคือ ภายใต้เงื่อนไขที่เหมาะสม โมเดลระดับแนวหน้ารุ่นล่าสุดเริ่มท้าทายสมมติฐานของรูปแบบนี้แล้ว ถึงอย่างนั้นนักพัฒนาจำนวนมากยังคงเลือกใช้โมเดลขนาดเล็กกว่าหรือรุ่นเก่าด้วยเหตุผลหลายประการ ดังนั้นในบริบทเหล่านี้ เราจึงแนะนำให้แยกงานเบื้องหลังและงานที่สื่อสารกับผู้ใช้ออกจากกันอย่างชัดเจน
สำหรับโมเดลที่ไม่ใช้การให้เหตุผล ตัวอย่างแบบ few-shot ให้ผลดีเพราะมีความเป็นรูปธรรม ใช้งานได้รวดเร็ว และโมเดลตอบสนองต่อแนวทางนี้ได้ดี แต่ปัญหาคือโมเดลอาจยึดติดกับตัวอย่างมากเกินไป เมื่อให้ตัวอย่างแก่โมเดล โมเดลมักเลียนแบบทั้งถ้อยคำ จังหวะ และโครงสร้าง จนสร้างคำตอบที่คล้ายกับตัวอย่างเดิมซ้ำๆ แม้ว่าสถานการณ์จะเปลี่ยนไปแล้วก็ตาม
คุณเขียนสคริปต์ที่จำกัดโมเดลไว้โดยไม่รู้ตัว จนโมเดลไม่สามารถตอบนอกเหนือจากรูปแบบที่กำหนดไว้ได้
การกำหนดแนวทางปฏิบัติหรือหลักเกณฑ์ทั่วไปเป็นทางเลือกที่ใช้ได้ยั่งยืนกว่า แทนที่จะแสดงให้โมเดลเห็นว่าควรพูดอะไรในแต่ละสถานการณ์* *เราจะกำหนดคู่ของเงื่อนไขและการกระทำที่ครอบคลุมกว่า เช่น หากเกิด X ให้ทำ Y
ความแตกต่างสำคัญคือ แทนที่จะค่อยๆ จำกัดความหมายของ X และ Y ให้แคบลงทีละตัวอย่างจนกลายเป็นกฎที่ตายตัวมากขึ้น เราจะใช้คำสั่งที่แม่นยำเพื่อกำหนดขอบเขตของทั้งสองอย่างให้ชัดเจนจนไม่จำเป็นต้องมีตัวอย่าง วิธีนี้ช่วยให้เอเจนต์ตอบสนองต่อความหลากหลายของบทสนทนาที่เกิดขึ้นจริงได้ แทนที่จะจับคู่รูปแบบตามเทมเพลต
ในทางปฏิบัติ วิธีนี้ดูคล้ายกฎง่ายๆ ที่นำไปปฏิบัติได้ มากกว่าจะเป็นตัวอย่าง:
หากขาดรายละเอียดสำคัญ ให้ถามคำถามเพื่อขอความชัดเจนหนึ่งข้อ
หากไม่มีข้อมูลรองรับคำตอบ ให้บอกตรงๆ และเสนอขั้นตอนถัดไปที่ดีที่สุดเท่าที่ทำได้
หากคำขอขัดกับข้อจำกัดด้านความปลอดภัย ให้ปฏิเสธสั้นๆ และเปลี่ยนทิศทางโดยไม่ต้องพูดเกริ่นเกินจำเป็น
วิธีนี้อาจไม่ได้น่าตื่นตาตื่นใจ แต่มีความทนทานกว่าการรวบรวมตัวอย่างคำตอบไว้เป็นชุดอย่างมาก เพราะเป็นการสอนให้โมเดลรู้จักตัดสินใจ ไม่ใช่สอนว่าต้องพูดอะไรซ้ำ
ข้อความแต่ละส่วนจะมีน้ำหนักมากน้อยเพียงใด ขึ้นอยู่กับว่าข้อความนั้นอยู่ตรงไหนของพรอมต์ นี่เป็นรูปแบบที่เราพบอย่างต่อเนื่องในโมเดลและระบบที่นำไปใช้งานจริง ช่วงต้นและช่วงท้ายของพรอมต์ดึงความสนใจจากโมเดลได้มากกว่าส่วนอื่นอย่างชัดเจน ขณะที่ช่วงกลางเหมาะกับการใส่รายละเอียดที่ช่วยเสริมความหมาย ซึ่งควรอยู่ตรงนั้นอยู่แล้ว
เราจึงจัดโครงสร้างพรอมต์โดยคำนึงถึงหลักการนี้ โดยวางบทบาทและการรับรู้ตัวตนของเอเจนต์ไว้ส่วนต้น เพื่อกำหนดอัตลักษณ์ให้ชัดเจนก่อนเป็นอันดับแรก ส่วนกลางใช้ระบุรายละเอียดด้านพฤติกรรม เช่น แนวทางที่บทสนทนาน่าจะดำเนินไป หลักเกณฑ์ที่ช่วยกำกับการตอบ และสถานการณ์ต่างๆ ที่เอเจนต์ต้องรับมือ ส่วนข้อจำกัดที่เคร่งครัดและเงื่อนไขที่ไม่อาจต่อรองได้จะอยู่ด้านล่าง เพื่อให้เอเจนต์ “นึกถึงเป็นอันดับแรก”
หากเป็นเรื่องที่สำคัญจริงๆ เราจะใส่ข้อกำหนดนั้นไว้ทั้งสองจุด ตัวอย่างเช่น กฎที่ชัดเจนเกี่ยวกับเครื่องหมายวรรคตอนหรือรูปแบบผลลัพธ์อาจหลุดหายไปได้ง่าย หากปรากฏเพียงครั้งเดียวท่ามกลางเนื้อหาที่อัดแน่นในช่วงกลางของพรอมต์ แต่เมื่อย้ำอีกครั้งในตอนท้าย โมเดลจะปฏิบัติตามได้อย่างสม่ำเสมอ
ประเด็นหนึ่งที่ควรกล่าวถึงเกี่ยวกับการให้น้ำหนักกับคำสั่งล่าสุดคือ หากใช้เอาต์พุตแบบมีโครงสร้าง คำสั่งส่วนนี้จะทำหน้าที่เสมือนเป็นคำสั่งสุดท้ายในพรอมต์ ช่องคำอธิบายในเอาต์พุตแบบมีโครงสร้างส่งผลโดยตรงต่อลักษณะของคำตอบ จึงกลายเป็นข้อกำหนดด้านผลลัพธ์ที่มีน้ำหนักมากกว่าเนื้อหาส่วนอื่นของพรอมต์


เราพบว่าการใช้ตัวอย่างแบบ few-shot ไม่เหมาะสำหรับการกำหนดน้ำเสียงเช่นกัน การเลิกใช้วิธีนี้จึงเป็นหนึ่งในการเปลี่ยนแปลงที่สร้างความแตกต่างได้มากที่สุดสำหรับเอเจนต์ที่ต้องสื่อสารกับลูกค้า
สิ่งที่เราทำคือเขียนพรอมต์ทั้งหมดด้วยน้ำเสียงเป้าหมาย ไม่ใช่เพียงบอกลักษณะของน้ำเสียงหรือแจกแจงคำคุณศัพท์ที่พอจะสื่อถึงน้ำเสียงนั้น แต่ใช้น้ำเสียงจริงในรูปแบบร้อยแก้วตั้งแต่บรรทัดแรกถึงบรรทัดสุดท้าย ตัวพรอมต์จึงเป็นทั้งคำสั่งและตัวอย่าง เราเรียกแนวทางนี้ว่า “anti-scriptness” ซึ่งช่วยให้โมเดลทำตามรูปแบบภาษาของอินพุต โดยไม่ยึดติดกับบทพูดตายตัวและยังเลือกใช้ภาษาและสำนวนที่อยู่ในแนวทางเดียวกันได้กว้างขึ้น
นี่คือวิธีที่เราเขียนพรอมต์เพื่อให้เอเจนต์ใช้ภาษาได้หลากหลาย แต่ยังคงน้ำเสียงที่สอดคล้องกัน แนวทางนี้เป็นส่วนหนึ่งของกลยุทธ์ที่มุ่งให้บทสนทนาเป็นหัวใจสำคัญของงานสำหรับเอเจนต์ทุกประเภท โดยไม่ต้องใส่คำสั่งอย่างชัดเจนมากเกินไป เพราะเราพยายามลดคำสั่งเหล่านั้นให้เหลือน้อยที่สุด
หากเราจะยกตัวอย่างเกี่ยวกับน้ำเสียงอย่างชัดเจน ตัวอย่างเหล่านั้นจะชี้ให้เห็นว่า “ไม่ควรทำแบบไหน” เช่น “ห้ามใช้เครื่องหมายขีดยาวโดยเด็ดขาด ห้ามใช้ถ้อยคำจำเจ อย่าใส่เนื้อหานโยบายมายืดยาว และห้ามอธิบายเกินจำเป็น หากประโยคเดียวก็ให้คำตอบที่ครบถ้วนได้” ข้อห้ามเช่นนี้มีทั้งความชัดเจนและเปิดพื้นที่ให้โมเดลได้มากกว่าคำแนะนำเชิงบวก เพราะชี้ชัดถึงข้อผิดพลาดที่โมเดลมักเบี่ยงไปทำ
รูปแบบการจัดข้อความก็สำคัญเช่นกัน เพราะมีส่วนกำหนดน้ำเสียงของคำตอบ พรอมต์ที่เต็มไปด้วยรายการหัวข้อ หัวเรื่อง และคำสั่งในวงเล็บจะชี้นำให้โมเดลตอบอย่างเป็นระบบและเป็นทางการมากขึ้น หากต้องการให้คำตอบมีลักษณะเหมือนบทสนทนา อินพุตก็ไม่ควรดูเหมือนเอกสารข้อกำหนดแบบย่อ
การเขียนพรอมต์เพื่อกำหนดน้ำเสียงส่วนใหญ่มักลงเอยที่การกำหนดบุคลิก โดยระบุคำคุณศัพท์ชุดหนึ่งเพื่อบอกว่าเอเจนต์ควรสื่อสารอย่างไร เช่น อบอุ่น เป็นมืออาชีพ เป็นมิตรแต่กระชับ คำเหล่านี้ไม่ได้ผิด แต่สิ่งที่กำหนดว่าน้ำเสียงจะให้ความรู้สึกอย่างไรเมื่อใช้ในการสนทนาจริงๆ คือระดับภาษา หรือวิธีที่บุคลิกเดียวกันแสดงออกในสถานการณ์ทางสังคมที่แตกต่างกัน
ข้อความระหว่างที่ระบบกำลังประมวลผลคำขอไม่ควรทำให้เข้าใจว่าเป็นคำตอบสุดท้าย ข้อความที่แจ้งข้อจำกัดด้านความปลอดภัยก็ไม่ควรใช้น้ำเสียงเป็นกันเองแบบเดียวกับการพูดคุยทั่วไป และเมื่อลูกค้ากำลังไม่พอใจ เอเจนต์ก็ไม่ควรใช้ลูกเล่นหรืออารมณ์ขันในระดับเดียวกับตอนพูดคุยกับลูกค้าที่เพียงกำลังเลือกดูข้อมูล


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