ปรับขนาดการสรุปฝั่งไคลเอ็นต์ในหน้าต่างบริบทขนาดเล็ก

เผยแพร่: 12 มีนาคม 2025

วิดีโออธิบาย เว็บ ส่วนขยาย สถานะ Chrome ความตั้งใจ
GitHub อยู่หลังธง ช่วงทดลองใช้จากต้นทาง อยู่หลังธง ช่วงทดลองใช้จากต้นทาง ดู ความตั้งใจที่จะทดสอบ

Summarizer API ช่วยสร้างสรุปข้อมูลในความยาวและรูปแบบต่างๆ ใช้กับ Gemini Nano ใน Chrome เพื่อทำการอนุมานฝั่งไคลเอ็นต์ และอธิบายข้อความที่ซับซ้อนหรือยาวอย่างกระชับ

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

สรุปของสรุปคืออะไร

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

เช่น หากเอกสารแบ่งออกเป็น 3 ส่วน ระบบจะสรุปแต่ละส่วน ระบบจะรวมข้อมูลสรุปทั้ง 3 รายการเข้าด้วยกันและสรุปอีกครั้งเพื่อดูผลลัพธ์สุดท้าย

แบ่งเนื้อหาอย่างรอบคอบ

คุณควรพิจารณาวิธีแบ่งข้อความขนาดใหญ่ เนื่องจากการแบ่งตำแหน่งต่างๆ อาจทําให้ Gemini Nano หรือ LLM อื่นๆ แสดงผลลัพธ์ที่แตกต่างกันอย่างมาก ตามหลักการแล้ว ข้อความควรแบ่งเมื่อมีการเปลี่ยนไปใช้หัวข้ออื่น เช่น ส่วนใหม่ของบทความ หรือที่ย่อหน้า คุณควรหลีกเลี่ยงการแยกข้อความตรงกลางของคำหรือประโยค ซึ่งหมายความว่าคุณไม่สามารถกำหนดจำนวนอักขระเป็นแนวทางการแยกเพียงอย่างเดียว

ซึ่งคุณทำได้หลายวิธีโดยไม่ต้องลงแรงเอง ในตัวอย่างต่อไปนี้ เราใช้ Recursive Text Splitter จาก LangChain.js ซึ่งจะปรับสมดุลระหว่างประสิทธิภาพและคุณภาพเอาต์พุต ซึ่งควรใช้ได้กับปริมาณงานส่วนใหญ่

เมื่อสร้างอินสแตนซ์ใหม่ พารามิเตอร์หลักๆ จะมี 2 รายการดังนี้

  • chunkSize คือจํานวนอักขระสูงสุดที่อนุญาตในการแยกแต่ละรายการ
  • chunkOverlap คือจำนวนอักขระที่จะซ้อนทับกันระหว่างการแยก 2 ครั้งติดต่อกัน วิธีนี้ช่วยให้มั่นใจว่าแต่ละกลุ่มจะมีบริบทบางส่วนจากกลุ่มก่อนหน้า

แยกข้อความด้วย splitText() เพื่อแสดงผลอาร์เรย์สตริงที่มีแต่ละกลุ่ม

LLM ส่วนใหญ่มีหน้าต่างบริบทที่แสดงเป็นจํานวนโทเค็น ไม่ใช่จํานวนตัวอักษร โดยเฉลี่ยแล้ว โทเค็นจะมีอักขระ 4 ตัว คุณจึงประมาณจํานวนโทเค็นที่ใช้โดยอินพุตได้โดยหารจํานวนตัวอักขระด้วย 4

ในตัวอย่างของเรา chunkSize มีความยาว 3, 000 อักขระ ซึ่งเท่ากับโทเค็นประมาณ 750 รายการ

สร้างข้อมูลสรุปสำหรับการแยกแต่ละรายการ

เมื่อตั้งค่าวิธีแบ่งเนื้อหาแล้ว คุณสามารถสร้างสรุปสำหรับแต่ละส่วนด้วย Summarizer API

สร้างอินสแตนซ์ของเครื่องมือสรุปด้วยฟังก์ชัน create() เราได้ตั้งค่าพารามิเตอร์ format เป็น plain-text, type เป็น tl;dr และ length เป็น long เพื่อเก็บบริบทไว้ให้มากที่สุด

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

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

สรุปแบบเรียกซ้ำของสรุป

เมื่อคุณมีข้อความยาวมาก ความยาวของสรุปที่ต่อเชื่อมกันอาจใหญ่กว่ากรอบบริบทที่มีอยู่ จึงทําให้สรุปไม่สําเร็จ วิธีแก้ปัญหานี้คือคุณสามารถสรุปข้อมูลสรุปแบบซ้ำ

หากสรุปของสรุปยังยาวเกินไป คุณสามารถทำซ้ำขั้นตอนนี้ได้ ในทางทฤษฎีแล้ว คุณสามารถทำซ้ำขั้นตอนนี้ได้ไม่จำกัดจนกว่าจะได้รับความยาวที่เหมาะสม

เรายังคงรวบรวมการแยกรายได้ครั้งแรกที่สร้างขึ้นโดย RecursiveCharacterTextSplitter จากนั้น ในฟังก์ชัน recursiveSummarizer() เราจะวนรอบกระบวนการสรุปตามความยาวของตัวอักษรของส่วนที่มีการต่อเชื่อม หากความยาวอักขระของข้อมูลสรุปเกิน 3000 เราจะต่อข้อมูลสรุปเป็น fullSummaries หากไม่ถึงขีดจํากัด ระบบจะบันทึกสรุปเป็น partialSummaries

เมื่อสร้างข้อมูลสรุปทั้งหมดแล้ว ระบบจะเพิ่มข้อมูลสรุปบางส่วนขั้นสุดท้ายลงในข้อมูลสรุปแบบเต็ม หากมีข้อมูลสรุปเพียง 1 รายการใน fullSummaries ก็ไม่จำเป็นต้องใช้การเรียกซ้ำเพิ่มเติม ฟังก์ชันจะแสดงผลสรุปสุดท้าย หากมีข้อมูลสรุปมากกว่า 1 รายการ ฟังก์ชันจะสรุปข้อมูลสรุปบางส่วนซ้ำแล้วสรุปต่อไป

เราได้ทดสอบโซลูชันนี้กับ Internet Relay Chat (IRC) RFC ซึ่งมีอักขระมากถึง 110,030 ตัว ซึ่งประกอบด้วยคํา 17,560 คํา Summarizer API ให้ข้อมูลสรุปต่อไปนี้

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

ถือว่ามีประสิทธิภาพดีทีเดียว และมีความยาวเพียง 309 อักขระ

ข้อจำกัด

เทคนิคสรุปของสรุปช่วยให้คุณทํางานภายในกรอบบริบทของโมเดลขนาดลูกค้าได้ แม้ว่าประโยชน์ของ AI ฝั่งไคลเอ็นต์จะมีประโยชน์มากมาย แต่คุณอาจพบปัญหาต่อไปนี้

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

เรามีตัวอย่างเครื่องมือสรุป และคุณสามารถดูซอร์สโค้ดแบบเต็มได้

แชร์ความคิดเห็น

ลองใช้เทคนิคสรุปของสรุปกับข้อความอินพุตที่มีความยาวต่างกัน ขนาดการแยกต่างกัน และความยาวที่ซ้อนทับต่างกัน เพื่อดูว่าเทคนิคใดเหมาะกับ Use Case ของคุณมากที่สุด

เริ่มทดสอบ Summarizer API เลยโดยเข้าร่วมช่วงทดลองใช้ต้นทางและแชร์ความคิดเห็น ความคิดเห็นของคุณจะส่งผลโดยตรงต่อวิธีที่เราสร้างและใช้งาน API เวอร์ชันในอนาคต รวมถึงAPI AI ในตัวทั้งหมด