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

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

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

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

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

ข้อมูลสรุปของข้อมูลสรุปคืออะไร

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

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

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

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

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

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

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

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

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

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

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

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

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

สร้างอินสแตนซ์ของเครื่องมือสรุปด้วยฟังก์ชัน create() เราได้ตั้งค่าพารามิเตอร์ format เป็น plain-text, type เป็น tldr, และ 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 ฝั่งไคลเอ็นต์จะมีประโยชน์มากมาย แต่คุณอาจพบปัญหาต่อไปนี้

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

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

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

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