Writer API

เผยแพร่: 20 พฤษภาคม 2025

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

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

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

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

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

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

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

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

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

ตรวจสอบข้อกำหนดเกี่ยวกับฮาร์ดแวร์

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

API ตรวจหาภาษาและ API แปลภาษาใช้งานได้ใน Chrome บนเดสก์ท็อป API เหล่านี้ใช้ไม่ได้ในอุปกรณ์เคลื่อนที่ Prompt API, Summarizer API, Writer API และ Rewriter API จะทำงานใน Chrome เมื่อเป็นไปตามเงื่อนไขต่อไปนี้

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

ขนาดที่แน่นอนของ Gemini Nano อาจแตกต่างกันไปเมื่อเบราว์เซอร์อัปเดตโมเดล หากต้องการดูขนาดปัจจุบัน ให้ไปที่ chrome://on-device-internals แล้วไปที่ สถานะโมเดล เปิดเส้นทางไฟล์ที่ระบุเพื่อกำหนดขนาดโมเดล

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

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

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

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

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

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

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

ใช้ Writer API

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

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

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

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

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

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

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

ฟังก์ชัน API

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

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

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

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

const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
  // The Writer API isn't usable.
  return;
}
if (available === 'available') {
  // The Writer API can be used immediately .
  writer = await Writer.create(options);
} else {
  // The Writer can be used after the model is downloaded.
  const writer = await Writer.create({
    ...options,
    monitor(m) {
      m.addEventListener("downloadprogress", e => {
        console.log(`Downloaded ${e.loaded * 100}%`);
      });
    }
  });
}

เริ่มเขียน

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

เอาต์พุตที่ไม่ใช่การสตรีม

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

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

// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);

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

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

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

// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);
for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

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

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

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

const stream = writer.writeStreaming(
  "Write a blog post about how I love all this work on gen AI at Google!" +
  "Mention that there's 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."}
);

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

ใช้ผู้เขียนซ้ำ

คุณใช้ผู้เขียนคนเดียวกันเพื่อสร้างเนื้อหาหลายชิ้นได้

// Reuse a writer
const writer = await Writer.create({ tone: "formal" });

const reviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => writer.write(reviewEl.textContent)
  ),
);

หยุดการเขียน

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

// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });

// Destroying a writer
writer.destroy();

สาธิต

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

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

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