ตัวสรุป

ฟีเจอร์บนเว็บ: เครื่องมือสรุป

Summarizer API ช่วยให้นักพัฒนาเว็บสามารถนำเสนอการกลั่นกรองข้อความที่ทำงานด้วยระบบ AI ในเครื่องได้โดยตรงภายในเบราว์เซอร์โดยใช้ Gemini Nano ใน Chrome หรือ Phi ใน Edge API นี้รองรับรูปแบบต่างๆ เช่น ประเด็นสำคัญ พาดหัว และสรุปสั้นๆ โดยทำงานในอุปกรณ์ทั้งหมดเพื่อรับประกันความเป็นส่วนตัวของผู้ใช้


เริ่มต้นใช้งาน

Summarizer API พร้อมใช้งานตั้งแต่ Chrome และ Edge 138 เป็นต้นไป โดยจะต้องดาวน์โหลดโมเดล Gemini Nano หรือ Phi (ตามลำดับ) เพียงครั้งเดียว

ข้อกำหนดด้านฮาร์ดแวร์และซอฟต์แวร์

  • ระบบปฏิบัติการ: Windows 10/11, macOS 13 ขึ้นไป, Linux หรือ ChromeOS (Chromebook Plus)
  • พื้นที่เก็บข้อมูล: พื้นที่ว่าง 22 GB สำหรับวอลุ่มโปรไฟล์
  • RAM/CPU: RAM 16 GB ขึ้นไปและ CPU 4 คอร์ขึ้นไป
  • VRAM: 4 GB ขึ้นไป (หากใช้ GPU)

การดาวน์โหลดและความพร้อมใช้งานของโมเดล

ตรวจสอบว่าโมเดลพร้อมใช้งาน ต้องดาวน์โหลด หรือไม่พร้อมใช้งาน

การส่งออบเจ็กต์ตัวเลือกการกำหนดค่าที่จำเป็น: คุณต้องส่งออบเจ็กต์ตัวเลือกการกำหนดค่าที่เหมือนกันไปยังทั้ง Summarizer.availability(options) และ Summarizer.create(options) อย่าใช้แพลตฟอร์ม API window.ai.summarizer ที่เลิกใช้งานแล้ว

การตรวจสอบความคืบหน้าที่จำเป็น: คุณต้องใช้การตรวจสอบความคืบหน้าในการดาวน์โหลดโมเดลโดยระบุ Callback monitor(m) ไปยัง Summarizer.create() และเพิ่ม Listener สำหรับเหตุการณ์ downloadprogress

ข้อกำหนดเกี่ยวกับท่าทางผู้ใช้: เมื่อ availability เป็น 'downloadable' หรือ 'downloading' การเรียกให้ดาวน์โหลดจริงผ่าน Summarizer.create() ต้องใช้ท่าทางผู้ใช้ (เช่น การคลิกของผู้ใช้) คุณต้องวางการเรียกการสร้างไว้ใน Listener เหตุการณ์แทนที่จะเรียกใช้แบบไม่มีเงื่อนไขเมื่อโหลดหน้าเว็บเพื่อป้องกัน NotAllowedError

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

ฟังก์ชันและการกำหนดค่า API

เมื่อสร้างเครื่องมือสรุปผ่าน Summarizer.create(options) คุณจะปรับแต่งเอาต์พุตได้ดังนี้

พารามิเตอร์ ตัวเลือก คำอธิบาย
type key-points, tldr, teaser, headline กำหนดกลยุทธ์สรุป
format markdown, plain-text รูปแบบไวยากรณ์เอาต์พุต
length short, medium, long ความยาวเป้าหมาย (เช่น 1 ประโยคเทียบกับ 5 ประโยค)
preference auto, speed, capability ปรับสมดุลระหว่างเวลาในการตอบสนองกับคุณภาพ

ตัวอย่างการกำหนดค่า

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

ภาษาที่สนับสนุน

คุณสามารถระบุภาษาที่คาดหวังเพื่อให้แน่ใจว่าเบราว์เซอร์จะจัดการคำขอสรุปที่เฉพาะเจาะจงได้

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

วิธีการสรุป

1. การสรุปเป็นกลุ่ม

ประมวลผลข้อความทั้งหมดพร้อมกันและแสดงผลลัพธ์

const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);

2. การสรุปสตรีม

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

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

ความปลอดภัยและสิทธิ์

  • ความเป็นส่วนตัวของข้อมูล: ระบบจะไม่ส่งข้อมูลไปยัง Google โดยการประมวลผลจะเกิดขึ้นในอุปกรณ์ในเครื่อง
  • แบบข้ามต้นทาง: สามารถให้สิทธิ์เข้าถึง iframe โดยใช้นโยบายสิทธิ์

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Web Workers: ปัจจุบันยังไม่รองรับ

กลยุทธ์สำรอง

ก่อนเริ่มต้นหรือค้นหาความพร้อมใช้งาน ให้ตรวจสอบว่าเบราว์เซอร์รองรับ Summarizer API หรือไม่ โดยทำดังนี้

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

หากระบบไม่รองรับ Summarizer API หรือการตรวจสอบความพร้อมใช้งานแสดงผลเป็น 'unavailable' คุณต้องเปลี่ยนกลับอย่างราบรื่น

ตัวเลือกที่แนะนำมีดังนี้

  1. Remote API Fallback: ส่งคำขอการกลั่นกรองไปยังปลายทางเซิร์ฟเวอร์หรือ Remote API (เช่น Vertex AI Gemini API) เพื่อให้ผู้ใช้ยังคงได้รับสรุป
  2. การลดลงอย่างค่อยเป็นค่อยไป: ปิดใช้การควบคุมการสรุปใน UI ด้วยภาพ หรือซ่อนปุ่มขณะแสดงข้อความที่เข้าใจง่าย (เช่น "Local summarization is currently unsupported in this browser") อย่าอนุญาตให้การโต้ตอบทริกเกอร์ข้อยกเว้นรันไทม์ทั่วไปที่ไม่ได้จัดการ
  3. Polyfill Fallback: คุณสามารถใช้ Polyfill ที่ชุมชนดูแลรักษา เช่น built-in-ai-task-apis-polyfills หรือ prompt-api-polyfill เพื่อจำลองแพลตฟอร์ม API โดยใช้บริการระยะไกลที่มีโมเดลในระบบคลาวด์หรือการอนุมานในอุปกรณ์ที่มีโมเดลในเครื่อง

ผลกระทบด้านความเป็นส่วนตัวและค่าใช้จ่าย: Polyfill เหล่านี้อาจส่งคำขอพร็อกซีไปยังเซิร์ฟเวอร์ระยะไกล (เช่น Gemini API ผ่านระบบคลาวด์) ซึ่งจะทำให้การรับประกันความเป็นส่วนตัวในอุปกรณ์ของ Built-in AI API แบบเนทีฟเป็นโมฆะโดยสมบูรณ์ และจะทำให้เกิดค่าใช้จ่ายในการใช้งาน API ฝั่งเซิร์ฟเวอร์