Rewriter API

เผยแพร่เมื่อวันที่ 20 พฤษภาคม 2025

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

Rewriter API ช่วยคุณแก้ไขและปรับโครงสร้างข้อความ API นี้และ Writer API เป็นส่วนหนึ่งของข้อเสนอ API ความช่วยเหลือด้านการเขียน

API เหล่านี้จะช่วยคุณปรับปรุงเนื้อหาที่ผู้ใช้สร้างขึ้น

กรณีการใช้งาน

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

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

หากไม่มี Use Case เข้าร่วมโปรแกรมทดลองใช้ก่อนเปิดตัวเพื่อแชร์ความคิดเห็น

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

เข้าร่วมช่วงทดลองใช้จากต้นทางของ Rewriter API ซึ่งทํางานใน Chrome 137 ถึง 142

ตรวจสอบข้อกำหนดด้านฮาร์ดแวร์

เครื่องมือตรวจหาภาษาและ Translator API ใช้งานได้ในเดสก์ท็อปใน Chrome เท่านั้น

Prompt API, Summarizer API, Writer API และ Rewriter API จะทำงานใน Chrome ได้เมื่อมีคุณสมบัติตรงตามเงื่อนไขต่อไปนี้

  • ระบบปฏิบัติการ: Windows 10 หรือ 11, macOS 13 ขึ้นไป (Ventura ขึ้นไป) หรือ Linux API ที่ Gemini Nano รองรับยังไม่รองรับ Chrome สำหรับ Android, iOS และ ChromeOS
  • พื้นที่เก็บข้อมูล: อย่างน้อย 22 GB ในวอลุ่มที่มีโปรไฟล์ Chrome
  • GPU: VRAM มากกว่า 4 GB เท่านั้น
  • เครือข่าย: อินเทอร์เน็ตแบบไม่จำกัดหรือการเชื่อมต่อแบบไม่จำกัดปริมาณ

ข้อกำหนดเหล่านี้มีไว้สำหรับคุณในกระบวนการพัฒนาและผู้ใช้ที่ทำงานกับฟีเจอร์ที่คุณสร้าง

ลงชื่อสมัครทดลองใช้จากต้นทาง

Rewriter API พร้อมใช้งานในช่วงทดลองใช้จากต้นทางร่วมกับ Writer API วิธีเริ่มใช้ API เหล่านี้

  1. รับทราบนโยบายการใช้งานที่ไม่อนุญาตสำหรับ Generative AI ของ Google
  2. ไปที่ช่วงทดลองใช้ Rewriter API จากต้นทาง
  3. คลิกลงทะเบียน แล้วกรอกแบบฟอร์ม ในช่องต้นทางของเว็บ ให้ระบุต้นทางหรือรหัสส่วนขยาย chrome-extension://YOUR_EXTENSION_ID
  4. คลิกลงทะเบียนเพื่อส่งข้อมูล
  5. คัดลอกโทเค็นที่ระบุ แล้วเพิ่มลงในหน้าเว็บทุกหน้าในต้นทางของคุณที่เข้าร่วม หรือรวมไว้ในไฟล์ Manifest ของส่วนขยาย
  6. เริ่มใช้ Rewriter API

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งานการทดสอบต้นทาง

เพิ่มการรองรับ localhost

หากต้องการเข้าถึง Writer และ Rewriter API ใน localhost ในระหว่างช่วงทดลองใช้จากต้นทาง คุณต้องอัปเดต Chrome เป็นเวอร์ชันล่าสุด จากนั้น ดำเนินการตามขั้นตอนเหล่านี้:

  1. ไปที่ chrome://flags/#rewriter-api-for-gemini-nano
  2. เลือกเปิดใช้
  3. คลิกเปิดใหม่หรือรีสตาร์ท Chrome

ใช้ Rewriter API

ก่อนอื่น ให้เรียกใช้การตรวจหาฟีเจอร์เพื่อดูว่าเบราว์เซอร์รองรับ API เหล่านี้หรือไม่


if ('Rewriter' in self) {
  // The Rewriter API is supported.
}

Rewriter API และ AI API ในตัวอื่นๆ ทั้งหมดผสานรวมอยู่ในเบราว์เซอร์ ระบบจะดาวน์โหลด Gemini Nano แยกต่างหากเมื่อเว็บไซต์ใดก็ตามใช้ AI API ในตัวเป็นครั้งแรก ในทางปฏิบัติ หากผู้ใช้โต้ตอบกับ API ในตัวแล้ว แสดงว่าผู้ใช้ได้ดาวน์โหลดโมเดลลงในเบราว์เซอร์แล้ว

หากต้องการตรวจสอบว่าโมเดลพร้อมใช้งานหรือไม่ ให้เรียกใช้ฟังก์ชันแบบแอซิงโครนัส Rewriter.availability() โดยจะแสดงผลสตริงที่มีค่าได้ 4 ค่า ดังนี้

  • unavailable: เบราว์เซอร์รองรับ Rewriter API แต่ใช้งานไม่ได้ในขณะนี้ ซึ่งอาจเกิดจากสาเหตุหลายประการ เช่น พื้นที่ในดิสก์ไม่เพียงพอที่จะดาวน์โหลดโมเดล
  • available: เบราว์เซอร์รองรับ Rewriter API และสามารถใช้งานได้ทันที
  • downloadable: เบราว์เซอร์รองรับ Rewriter API แต่ต้องดาวน์โหลดโมเดลก่อน
  • downloading: เบราว์เซอร์รองรับ Rewriter API และกำลังดาวน์โหลดโมเดล

หากต้องการเรียกให้ดาวน์โหลดโมเดลและเริ่มเครื่องมือเขียนใหม่ ให้เรียกใช้Rewriter.create() ฟังก์ชัน หากคำตอบสำหรับ availability() คือ downloadable ให้ฟังความคืบหน้าการดาวน์โหลดและแจ้งให้ผู้ใช้ทราบ เนื่องจากอาจใช้เวลาสักครู่ในการดาวน์โหลด

const rewriter = await Rewriter.create({
  monitor(m) {
    m.addEventListener("downloadprogress", e => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

ฟังก์ชัน API

ฟังก์ชัน create() ช่วยให้คุณกําหนดค่าออบเจ็กต์โปรแกรมเปลี่ยนรูปแบบใหม่ได้ โดยจะใช้ออบเจ็กต์ options (ไม่บังคับ) ที่มีพารามิเตอร์ต่อไปนี้

  • tone: ระดับภาษา อาจหมายถึงสไตล์ ลักษณะ หรือทัศนคติของเนื้อหา โดยสามารถตั้งค่าเป็น more-formal, as-is (ค่าเริ่มต้น) หรือ more-casual
  • format: การจัดรูปแบบเอาต์พุตซึ่งมีค่าที่อนุญาตคือ as-is (ค่าเริ่มต้น), markdown และ plain-text
  • length: ความยาวของเอาต์พุต ซึ่งมีค่าที่อนุญาตคือ shorter, as-is (ค่าเริ่มต้น) และ longer
  • sharedContext: เมื่อเขียนเนื้อหาหลายรายการใหม่ บริบทที่แชร์จะช่วยให้โมเดลสร้างเนื้อหาที่ตรงกับความต้องการของคุณได้ดีขึ้น

ตัวอย่างต่อไปนี้แสดงวิธีเริ่มต้นออบเจ็กต์ rewriter

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'more-casual',
  format: 'plain-text',
  length: 'shorter',
};

const available = await Rewriter.availability();
let rewriter;
if (available === 'unavailable') {
  // The Rewriter API isn't usable.
  return;
}
if (available === 'available') {
  // The Rewriter API can be used immediately .
  rewriter = await Rewriter.create(options);
} else {
  // The Rewriter can be used after the model is downloaded.
  rewriter = await Rewriter.create(options);
  rewriter.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
}

เริ่มเขียนใหม่

การส่งออกเนื้อหาจากโมเดลทำได้ 2 วิธี ได้แก่ แบบไม่สตรีมและสตรีม

เอาต์พุตแบบไม่สตรีม

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

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

// Non-streaming
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});
const result = await rewriter.rewrite(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible."
});

เอาต์พุตการเขียนสตรีมใหม่

สตรีมมิงแสดงผลลัพธ์แบบเรียลไทม์ เอาต์พุตจะอัปเดตอย่างต่อเนื่องเมื่อมีการเพิ่มและปรับอินพุต

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

const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const stream = rewriter.rewriteStreaming(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible.",
  tone: "more-casual",
});

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

แชร์บริบทสำหรับงานหลายรายการ

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

// Shared context and per writing task context
const rewriter = await Rewriter.create({
  sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = rewriter.rewriteStreaming(
  "Love all this work on generative AI at Google! So much to learn and so many new things I can do!",
  {
    context: "The request comes from someone working at a startup providing an e-commerce CMS solution.",
    tone: "more-casual",
  }
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

ใช้เครื่องมือเขียนใหม่ซ้ำ

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

// Reusing a rewriter
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const rewrittenReviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => rewriter.rewrite(reviewEl.textContent, {
      context: "Avoid any toxic language and be as constructive as possible.",
      tone: "more-casual",
    })
  ),
);

หยุดเครื่องมือเขียนใหม่

หากต้องการสิ้นสุดกระบวนการเขียนใหม่ ให้ยกเลิกการทำงานของตัวควบคุมและทำลาย rewriter

// Stop a rewriter
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const rewriter = await Rewriter.create({ signal: controller.signal });
await rewriter.rewrite(reviewEl.textContent, { signal: controller.signal });

// Destroy a rewriter
rewriter.destroy();

สาธิต

มีส่วนร่วมและแชร์ความคิดเห็น

Writer และ Rewriter API อยู่ระหว่างการหารือและอาจมีการเปลี่ยนแปลงในอนาคต หากลองใช้ API นี้แล้วมีความคิดเห็น เรายินดีรับฟัง

สำรวจ AI API ในตัวทั้งหมดที่ใช้โมเดล ซึ่งรวมถึง Gemini Nano และโมเดลอื่นๆ สำหรับผู้เชี่ยวชาญในเบราว์เซอร์