แชทตัวละครพร้อมหน่วยความจำระยะกลางและระยะยาวในตัว
ตรวจสอบที่นี่!
ฉันได้ทดลอง (และสนุกไปกับ) บริการ ai การเล่นตามบทบาทตัวละครต่างๆ มากมายเมื่อเร็วๆ นี้ รายการโปรดของฉันคือ Character.ai, Doppel.ai และ Poly.ai โดย Cloud Whale Interactive Technology (อย่าสับสนกับ poly.ai ผู้พัฒนาแชทบอทฝ่ายบริการลูกค้า)
อย่างไรก็ตาม แต่ละระบบเหล่านี้มีข้อจำกัดที่อาจทำให้รุนแรงขึ้น ฉันได้พยายามพูดถึงบางส่วนในโครงการนี้
การแชทตามตัวละครนั้นยอดเยี่ยมและน่าดึงดูดใจ แต่ก็มีความทรงจำที่สั้น พวกเขามักจะลืมสถานที่ สถานการณ์ และเหตุการณ์สำคัญก่อนหน้านั้นไป แม้ว่าการใช้หน้าต่างบริบทที่ยาวขึ้นสามารถช่วยได้ แต่โทเค็นก็มีราคาแพง! เราจะให้หน่วยความจำยาวแก่ตัวละครได้อย่างไร แต่จำกัดจำนวนโทเค็นที่ส่งในแต่ละความสำเร็จ? อย่างไรก็ตาม Doppel.ai นั้นดีกว่าส่วนอื่นๆ มาก ตัวละครของพวกเขามีความทรงจำที่ยาวนานกว่า
ตัวละครสูญเสียบุคลิกภาพเมื่อเวลาผ่านไปหรือมีแนวโน้มที่จะติดอยู่ในวงจรการตอบสนองซ้ำๆ บริการบางอย่างดีกว่าบริการอื่นในเรื่องนี้ แต่ฉันเห็นว่ามันเกิดขึ้นบ้างกับบริการทั้งหมด
ตัวละครจะคงที่เมื่อสร้างขึ้น บริการบางอย่างให้คุณเพิ่ม 'ความทรงจำ' ให้กับตัวละครได้ แต่ฉันยังไม่พบบริการที่ให้คุณเปลี่ยนบุคลิกพื้นฐานของตัวละครโดยไม่ต้องเริ่มการสนทนาใหม่
เอเจนต์จะได้รับ "หน่วยความจำ" แบบหลายชั้น หรือพรอมต์ระบบที่เปลี่ยนแปลงแบบไดนามิก ซึ่งรวมถึงระดับข้อมูลจากการสนทนาครั้งก่อนๆ ตั้งแต่การสนทนาที่เฉพาะเจาะจงมากสำหรับการสนทนาล่าสุดไปจนถึงการสรุปมากขึ้นสำหรับหัวข้อและข้อมูลระยะทางส่วนใหญ่
หน้าต่างแชทกลิ้งหน่วยความจำระยะสั้น การเรียกโมเดลแต่ละครั้งจะมีรายการข้อความก่อนหน้าแบบคำต่อคำค่อนข้างสั้น สิ่งนี้ช่วยให้แบบจำลองติดตามบริบทของการสนทนาปัจจุบันและข้อความล่าสุด
Meory Scratchpad ระยะกลาง นอกจากนี้ ฉันได้สร้าง scratchpad สำหรับตัวแทน AI เพื่อใช้ในการจดบันทึกเพื่อติดตามไฮไลท์ล่าสุดในการสนทนา Scratchpad นี้ได้รับการอัปเดตเป็นประจำโดยมีการเพิ่มหรืออัปเดตข้อมูลใหม่ และข้อมูลเก่าที่ไม่เกี่ยวข้องอีกต่อไปจะถูกละทิ้ง อย่างไรก็ตาม ไม่มีข้อมูลสูญหายจริงๆ เนื่องจากสแนปชอตของ Scratchpad ของเขาถูกบันทึกเป็นรายการลงในฐานข้อมูลเวกเตอร์
เนื่องจากข้อมูลนี้ได้รับการสรุป จึงบีบอัดข้อมูลล่าสุด ทำให้โมเดลได้รับประโยชน์จากหน้าต่างแชทที่ยาวขึ้นและบริบทที่ใหญ่ขึ้น ในขณะเดียวกันก็ลดโทเค็นจริงที่รวมอยู่ในพรอมต์ให้เหลือน้อยที่สุด
ชื่อตัวละคร (ไม่ใช่แค่ 'ผู้ใช้' และ 'ผู้ช่วย') จะรวมอยู่ในแต่ละข้อความเพื่อช่วยในการสรุป นอกจากนี้ยังช่วยให้โมเดลติดตามว่าใครกำลังพูดอะไรอยู่ สิ่งนี้ทำให้เจ้าหน้าที่ AI มีโอกาสสับสนน้อยลงมากว่าใครพูดอะไร (ซึ่งหากไม่เป็นเช่นนั้นก็เป็นปัญหา) นอกจากนี้ยังช่วยรักษามารยาทในการผลัดกันพูดคุยและป้องกันไม่ให้ตัวแทนพูดแทนผู้ใช้ (ซึ่งอาจเป็นปัญหาได้เช่นกัน)
หน่วยความจำเวกเตอร์จัดเก็บระยะยาว ฉันใช้สรุปการสนทนาเพื่อดึงข้อมูลสำคัญจากการสนทนา จากนั้นจัดเก็บไว้ในฐานข้อมูลเวกเตอร์ ข้อความค้นหาของผู้ใช้แต่ละรายการจะทริกเกอร์การค้นหาเชิงความหมายจากฐานข้อมูลเวกเตอร์เพื่อเรียกคืนข้อมูลที่เกี่ยวข้องจากสรุปการสนทนาครั้งก่อน ข้อมูลนี้จะรวมอยู่ในพรอมต์ไปยังโมเดล รวมถึงข้อความล่าสุดบางส่วน
วิธีนี้ทำให้หน่วยความจำของตัวแทน AI สามารถมีมากกว่าบริบทได้มาก เนื่องจากร้านค้าเวกเตอร์สามารถใช้พื้นที่ดิสก์ค่อนข้างน้อย ขนาดหน่วยความจำของเอเจนต์ที่มีประสิทธิภาพที่เป็นไปได้จึงไม่จำกัดฟังก์ชัน
เมื่อความทรงจำถูกจัดเก็บ ความทรงจำเหล่านั้นจะถูกจัดเก็บด้วยการประทับเวลา และเมื่อถูกเรียกคืน ความทรงจำจะเรียงลำดับตามลำดับเวลา เจ้าหน้าที่จะได้รับคำสั่งให้เลือกข้อมูลล่าสุดหากความทรงจำขัดแย้งกัน
ผลลัพธ์ โมเดลสามารถเรียกคืนข้อมูลจากการสนทนาก่อนหน้าได้อย่างแม่นยำเกือบตลอดเวลา โดยทั่วไปการค้นหาร้านค้าเวกเตอร์จะประสบความสำเร็จในการดึงข้อมูลที่เกี่ยวข้อง แต่แบบจำลองไม่ได้ใช้ประโยชน์จากข้อมูลในการตอบกลับเสมอไป โดยทั่วไปแล้ว ฉันพอใจกับผลลัพธ์ที่ได้
ขั้นตอนต่อไป
ฉันต้องการให้โมเดลอ้างอิงเหตุการณ์ก่อนหน้าในเชิงรุกมากขึ้น ส่วนใหญ่จะประสบความสำเร็จในการจำถ้าฉันถามคำถามเกี่ยวกับการสนทนาก่อนหน้านี้โดยตรง แต่ไม่ค่อยอ้างอิงถึงเหตุการณ์ก่อนหน้านี้โดยธรรมชาติ มันใช้ชีวิตอยู่กับปัจจุบันเป็นอย่างมาก ฉันกำลังดำเนินการด้านวิศวกรรมอย่างทันท่วงทีเพื่อสร้างพฤติกรรมนี้ แต่ก็ยังอยู่ในระหว่างดำเนินการ
ฉันกำลังพิจารณาใช้การจดจำเอนทิตีที่มีชื่อเพื่อให้ตัวแทนสามารถสร้างโปรไฟล์ของตัวละครหรือสถานที่ และจัดเก็บข้อมูลที่เกี่ยวข้องกับเอนทิตีเฉพาะได้ ซึ่งจะช่วยให้โมเดลจัดระเบียบข้อมูลตามเอนทิตี แทนที่จะเป็นเพียงภาพรวมการสนทนา
ฉันสังเกตเห็นว่าในขณะที่ตัวละครมักจะเริ่มต้นด้วยสไตล์การพูดที่เป็นเอกลักษณ์ แต่เมื่อเวลาผ่านไป สไตล์ของพวกเขาก็จางหายไปจนดูจืดชืดและเสียงเหมือน AI พื้นฐานของพวกเขา ฉันทดลองวิธีแก้ปัญหาบางอย่าง รวมถึงให้เขียนข้อความแจ้งเตือนด้วยตัวอักษรด้วย อย่างไรก็ตาม สิ่งนี้ทำให้โทเค็นในหน่วยความจำเสียไปมากโดยการสร้างบันทึกย่อที่มีโทเค็นหนาแน่นน้อยลง
แต่ฉันเก็บตัวอย่างการตอบสนองแรกที่โมเดลจัดเตรียมไว้เป็นตัวอย่างสไตล์แทน จากนั้นการตอบกลับครั้งแรกนี้จะถูกส่งไปยังตัวแทนในทุกการแจ้งเตือน เพื่อเป็นตัวอย่างสไตล์การพูดสำหรับทุกการแจ้งเตือน ฉันพบว่าสิ่งนี้มีประสิทธิภาพมากในการช่วยให้โมเดลรักษารูปแบบการพูดได้อย่างสม่ำเสมอ แม้จะอยู่ในการสนทนาที่ยาวนาน (สำเร็จมากกว่า 100 ครั้ง)
ขั้นตอนถัดไป แม้ว่าน้ำเสียงของข้อความจะสอดคล้องกัน แต่ฉันอยากให้โมเดลมีบุคลิกที่แข็งแกร่ง เหมาะสมยิ่งขึ้น และสม่ำเสมอยิ่งขึ้น ฉันสงสัยว่านี่อาจต้องมีการปรับแต่งอย่างละเอียด
ในระบบการเล่นตามบทบาท LLM หลายระบบ ตัวละครจะคงที่เมื่อสร้างขึ้น อย่างไรก็ตาม ในการใช้งานของฉัน คำอธิบายอักขระและแม้กระทั่งชื่อสามารถเปลี่ยนแปลงได้ทันที ประโยชน์เฉพาะคือความสามารถในการเปลี่ยนตำแหน่งและชื่อผู้ใช้
คำอธิบายตัวละคร บางครั้งคุณต้องการการเปลี่ยนแปลงตามเหตุการณ์ล่าสุด หรือมีเป้าหมายหรือแรงจูงใจที่พัฒนาไปตามกาลเวลา ซึ่งทำได้ง่ายโดยการปรับคำอธิบายตัวละครโดยตรงทันที
บทสนทนาและการสวมบทบาทมักจะสามารถเคลื่อนไหวไปรอบๆ โลก แห่ง จินตนาการได้ คุณอาจจะเดินทางจากเมืองไปยังคุกใต้ดิน หรือจากหอพักไปร้านกาแฟ หรือไปทำงานที่บ้าน เว็บไซต์ของฉันอนุญาตให้คุณเปลี่ยนตำแหน่งของการสนทนาได้ทันที
ชื่อผู้ใช้ ความท้าทายอีกประการหนึ่งกับระบบการเล่นตามบทบาทตัวละครส่วนใหญ่คือการรวมตัวละครหลายตัว ในระบบของฉัน คุณสามารถเปลี่ยนชื่อตัวละครที่คุณกำลังพูดถึงได้ทันที ซึ่งช่วยให้คุณจำลองตัวละครหลายตัวในการสนทนาหรือสถานการณ์ได้
การเปลี่ยน ชื่อตัวละคร นี่ไม่ค่อยมีประโยชน์เท่าไหร่นัก การทำให้ตัวละครเล่นเป็นตัวละครที่แตกต่างกันไม่ได้ผล และจะทำให้เกิดความสับสนเมื่อแบบจำลองพยายามเชื่อมโยงการสนทนาปัจจุบันกับสรุปการสนทนาก่อนหน้า
ขั้นตอนต่อไป