เผยแพร่: 12 มีนาคม 2025
วิดีโออธิบาย | เว็บ | ส่วนขยาย | สถานะ Chrome | ความตั้งใจ |
---|---|---|---|---|
GitHub | ดู | ความตั้งใจที่จะทดสอบ |
Summarizer API ช่วยสร้างสรุปข้อมูลในความยาวและรูปแบบต่างๆ ใช้กับ Gemini Nano ใน Chrome เพื่อทำการอนุมานฝั่งไคลเอ็นต์ และอธิบายข้อความที่ซับซ้อนหรือยาวอย่างกระชับ
เมื่อดำเนินการฝั่งไคลเอ็นต์ คุณจะทำงานกับข้อมูลในเครื่องได้ ซึ่งจะช่วยให้คุณเก็บข้อมูลที่มีความละเอียดอ่อนให้ปลอดภัยและให้บริการได้ในระดับที่ต้องการ อย่างไรก็ตาม กรอบเวลาของบริบทจะเล็กกว่ามากเมื่อเทียบกับโมเดลฝั่งเซิร์ฟเวอร์ ซึ่งหมายความว่าอาจสรุปเอกสารขนาดใหญ่ได้ยาก ในการแก้ปัญหานี้ คุณสามารถใช้เทคนิคสรุปของสรุป
สรุปของสรุปคืออะไร
หากต้องการใช้เทคนิคสรุปของสรุป ให้แยกเนื้อหาอินพุตตามจุดสำคัญ แล้วสรุปแต่ละส่วนแยกกัน คุณสามารถต่อผลลัพธ์จากแต่ละส่วนเข้าด้วยกัน แล้วสรุปข้อความที่ต่อต่อกันนี้เป็นสรุปสุดท้ายได้

แบ่งเนื้อหาอย่างรอบคอบ
คุณควรพิจารณาวิธีแบ่งข้อความขนาดใหญ่ เนื่องจากการแบ่งตำแหน่งต่างๆ อาจทําให้ 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 ในตัวทั้งหมด
- หากต้องการแสดงความคิดเห็นเกี่ยวกับการใช้งาน Chrome ให้ส่งรายงานข้อบกพร่องหรือคำขอฟีเจอร์
- พูดคุยเกี่ยวกับการออกแบบ Summarizer API ใน GitHub โดยแสดงความคิดเห็นในปัญหาที่มีอยู่หรือเปิดปัญหาใหม่
- มีส่วนร่วมในมาตรฐานโดยเข้าร่วมกลุ่มชุมชน Web Incubator
- แชทกับทีม AI ของ Chrome เกี่ยวกับกระบวนการสรุป หรือคำถามอื่นๆ เกี่ยวกับ AI ในตัว