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

เผยแพร่: 12 มีนาคม 2025, อัปเดตล่าสุด: 28 พฤษภาคม 2025

คำอธิบาย เว็บ ส่วนขยาย สถานะของ Chrome ความตั้งใจ
MDN Chrome 138 Chrome 138 ดู ความตั้งใจที่จะจัดส่ง

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

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

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

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

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

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

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

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

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

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

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

LLM ส่วนใหญ่มีหน้าต่างบริบทที่แสดงเป็นจำนวนโทเค็นแทนที่จะเป็นจำนวนอักขระ โดยเฉลี่ยแล้ว โทเค็นจะมีอักขระ 4 ตัว ใน ตัวอย่างของเรา chunkSize มีความยาว 3, 000 อักขระ ซึ่งคิดเป็นโทเค็นประมาณ 750 รายการ

กำหนดความพร้อมใช้งานของโทเค็น

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

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

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

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

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

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

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

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

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

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

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

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

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

ซึ่งมีประสิทธิภาพมาก และมีอักขระเพียง 309 ตัว

ข้อจำกัด

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

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

เรามีการสาธิตการสรุป และคุณสามารถดูซอร์สโค้ดทั้งหมดได้

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

ลองใช้เทคนิคสรุปของสรุปกับข้อความอินพุตที่มีความยาว ขนาดการแยก และความยาวการทับซ้อนที่แตกต่างกันด้วย Summarizer API