Published: October 22, 2025
| วิดีโออธิบาย | เว็บ | ส่วนขยาย | สถานะ Chrome | ความตั้งใจ |
|---|---|---|---|---|
| GitHub | ดู | ความตั้งใจที่จะทดลอง |
Writer API ช่วยคุณสร้างเนื้อหาใหม่ที่เป็นไปตามงานเขียนที่ระบุ Writer API และ Rewriter API เป็นส่วนหนึ่งของ ข้อเสนอ Writing Assistance APIs
API ของพาร์ทเนอร์เหล่านี้ช่วยคุณปรับปรุงเนื้อหาที่ผู้ใช้สร้างขึ้นได้
กรณีการใช้งาน
เขียนเนื้อหาใหม่โดยอิงตามแนวคิดเริ่มต้นและบริบทที่ไม่บังคับ ซึ่งอาจใช้เพื่อวัตถุประสงค์ต่อไปนี้
- ช่วยผู้ใช้เขียนเนื้อหาทุกประเภท เช่น รีวิว บล็อกโพสต์ หรืออีเมล
- ช่วยผู้ใช้เขียนคำขอรับการสนับสนุนได้ดียิ่งขึ้น
- ร่างบทนำสำหรับชุดตัวอย่างงานเพื่อแสดงทักษะบางอย่างได้ดียิ่งขึ้น
หากไม่พบกรณีการใช้งานของคุณ โปรดเข้าร่วมโปรแกรมทดลองใช้ก่อนเปิดตัว เพื่อแชร์ความคิดเห็น
เริ่มต้นใช้งาน
เข้าร่วมการทดลองใช้จากต้นทางของ Writer API ที่ทำงานใน Chrome 137 ถึง 148
ตรวจสอบข้อกำหนดของฮาร์ดแวร์
นักพัฒนาแอปและผู้ใช้ที่ใช้ฟีเจอร์โดยใช้ API เหล่านี้ใน Chrome ต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้ เบราว์เซอร์อื่นๆ อาจมีข้อกำหนดในการทำงานที่แตกต่างกัน
Language Detector และ Translator API ทำงานใน Chrome บน เดสก์ท็อป แต่ API เหล่านี้ไม่ทำงานในอุปกรณ์เคลื่อนที่
Prompt API, Summarizer API, Writer API, Rewriter API และ Proofreader API ทำงานใน Chrome เมื่อเป็นไปตามเงื่อนไขต่อไปนี้
- ระบบปฏิบัติการ: Windows 10 หรือ 11, macOS 13 ขึ้นไป (Ventura ขึ้นไป), Linux หรือ ChromeOS (ตั้งแต่แพลตฟอร์ม 16389.0.0 ขึ้นไป) ใน อุปกรณ์ Chromebook Plus API ที่ใช้โมเดลพื้นฐานยังไม่รองรับ Chrome สำหรับ Android, iOS และ ChromeOS ในอุปกรณ์ที่ไม่ใช่ Chromebook Plus
- พื้นที่เก็บข้อมูล: มีพื้นที่ว่างอย่างน้อย 22 GB ในโวลุ่มที่มีโปรไฟล์ Chrome
- GPU หรือ CPU: โมเดลในตัวสามารถทำงานร่วมกับ GPU หรือ CPU ได้
- GPU: VRAM มากกว่า 4 GB
- CPU: RAM 16 GB ขึ้นไปและคอร์ CPU 4 คอร์ขึ้นไป
- หมายเหตุ: Prompt API ที่มีอินพุตเสียงต้องใช้ GPU
- เครือข่าย: อินเทอร์เน็ตแบบไม่จำกัดหรือการเชื่อมต่อแบบไม่จำกัดปริมาณข้อมูล การเชื่อมต่อ Wi-Fi และอีเทอร์เน็ตมักจะเป็นแบบไม่จำกัดปริมาณข้อมูล โดยค่าเริ่มต้น ขณะที่การเชื่อมต่อมือถือมักจะเป็นแบบจำกัดปริมาณข้อมูล
ขนาดที่แน่นอนของ Gemini Nano อาจแตกต่างกันไปเมื่อเบราว์เซอร์อัปเดตโมเดล หากต้องการดูขนาดปัจจุบัน ให้ไปที่ chrome://on-device-internals
ลงชื่อสมัครเข้าร่วมการทดลองใช้จากต้นทาง
Writer API พร้อมให้บริการในการทดลองใช้จากต้นทางร่วมกับ Rewriter API หากต้องการเริ่มใช้ API เหล่านี้ ให้ทำดังนี้
- ไปที่การทดลองใช้จากต้นทางของ Writer API
- คลิกลงทะเบียน แล้วกรอกแบบฟอร์ม ในช่องต้นทางของเว็บ ให้ระบุ
ต้นทางหรือรหัสส่วนขยาย
chrome-extension://YOUR_EXTENSION_ID - คลิกลงทะเบียน เพื่อส่งข้อมูล
- คัดลอกโทเค็นที่ได้รับ แล้วเพิ่มลงในทุกหน้าเว็บที่เข้าร่วมใน ต้นทางของคุณ หรือใส่ไว้ใน ไฟล์ Manifest ของส่วนขยาย
- เริ่มใช้ Writer API และ Rewriter API
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งานการทดลองใช้จากต้นทาง
เพิ่มการรองรับ localhost
หากต้องการเข้าถึง Writer API ใน localhost ให้ใช้ Chrome Flag ดังนี้:
- ตั้งค่า
chrome://flags/#optimization-guide-on-device-modelเป็นเปิดใช้ - ตั้งค่า Flag ต่อไปนี้เป็นเปิดใช้ หรือเปิดใช้หลายภาษา:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-inputchrome://flags/#writer-api-for-gemini-nano
- คลิกเปิดใหม่ หรือรีสตาร์ท Chrome
ใช้ Writer API
ขั้นแรก ให้เรียกใช้การตรวจหาฟีเจอร์เพื่อดูว่าเบราว์เซอร์รองรับ API เหล่านี้หรือไม่
if ('Writer' in self) {
// The Writer API is supported.
}
Writer API และ API อื่นๆ ของ AI ในตัวทั้งหมดจะผสานรวมอยู่ในเบราว์เซอร์ ระบบจะดาวน์โหลดโมเดลแยกกันในครั้งแรกที่เว็บไซต์ใช้ API ของ AI ในตัว ในทางปฏิบัติ หากผู้ใช้โต้ตอบกับ API ในตัวแล้ว ผู้ใช้จะดาวน์โหลดโมเดลลงในเบราว์เซอร์
หากต้องการดูว่าโมเดลพร้อมใช้งานหรือไม่ ให้เรียกใช้ฟังก์ชันแบบอะซิงโครนัส
Writer.availability() หากการตอบกลับ availability() เป็น downloadable ให้ฟังความคืบหน้าในการดาวน์โหลดและแจ้งให้ผู้ใช้ทราบ เนื่องจากอาจใช้เวลาในการดาวน์โหลด
const availability = await Writer.availability();
หากต้องการทริกเกอร์การดาวน์โหลดโมเดลและเริ่ม Writer ให้ตรวจสอบการเปิดใช้งานของผู้ใช้
และเรียกใช้ฟังก์ชัน Writer.create()
const writer = await Writer.create({
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
ฟังก์ชัน API
ฟังก์ชัน create() ช่วยให้คุณกำหนดค่าออบเจ็กต์ Writer ใหม่ได้ โดยจะใช้ออบเจ็กต์ options ที่ไม่บังคับพร้อมพารามิเตอร์ต่อไปนี้
tone: ลักษณะการเขียน อาจหมายถึงสไตล์ ตัวอักษร หรือทัศนคติของเนื้อหา โดยค่าที่ตั้งได้คือformal,neutral(ค่าเริ่มต้น) หรือcasualformat: การจัดรูปแบบเอาต์พุต โดยค่าที่อนุญาตคือmarkdown(ค่าเริ่มต้น) และplain-textlength: ความยาวของเอาต์พุต โดยค่าที่อนุญาตคือshort(ค่าเริ่มต้น),mediumและlongsharedContext: เมื่อเขียนเอาต์พุตหลายรายการ บริบทที่แชร์ จะช่วยให้โมเดลสร้างเนื้อหาที่สอดคล้องกับความคาดหวังของคุณได้ดียิ่งขึ้น
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มต้นออบเจ็กต์ 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}%`);
});
}
});
}
กำหนดภาษาที่คาดหวัง
Writer API รองรับหลายภาษา ตั้งค่าภาษาอินพุตและบริบทที่คาดหวัง รวมถึงภาษาเอาต์พุตที่คาดหวังเมื่อสร้างเซสชัน ซึ่งจะช่วยให้เบราว์เซอร์ปฏิเสธคำขอได้หากเบราว์เซอร์ไม่รองรับการผสมภาษาที่เฉพาะเจาะจง
const writer = await Writer.create({
tone: "formal",
expectedInputLanguages: ["en", "ja", "es"],
expectedContextLanguages: ["en", "ja", "es"],
outputLanguage: "es",
sharedContext: "These are requests to write messages to teachers in a Spanish
language program, by students who may speak Spanish, Japanese, or English.
Staff expect questions to be written in Spanish."
});
เริ่มเขียน
คุณสามารถรับเอาต์พุตการเขียนจากโมเดลได้ 2 วิธี ได้แก่ เอาต์พุตตามคำขอและการสตรีม
เอาต์พุตตามคำขอ
สำหรับเอาต์พุตตามคำขอ (หรือ "แบบไม่สตรีม") โมเดลจะรอให้มีการสร้างอินพุตทั้งหมด ประมวลผลอินพุตนั้นทั้งหมด แล้วจึงสร้างเอาต์พุต
หากต้องการรับเอาต์พุตตามคำขอ ให้เรียกใช้ฟังก์ชัน write() แบบอะซิงโครนัส คุณต้องใส่พรอมต์สำหรับเนื้อหาที่ต้องการเขียน และสามารถเพิ่ม context ที่ไม่บังคับเพื่อระบุข้อมูลพื้นหลังของโมเดล ซึ่งอาจช่วยให้โมเดลตอบสนองความคาดหวังของคุณสำหรับเอาต์พุตได้ดียิ่งขึ้น
// Request-based
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",
},
);
สตรีมเอาต์พุตการเขียน
การสตรีมจะแสดงผลลัพธ์อย่างต่อเนื่องแบบเรียลไทม์ เอาต์พุตจะอัปเดตทีละส่วนเมื่อมีการเพิ่มและปรับอินพุต
หากต้องการรับ Writer แบบสตรีม ให้เรียกใช้ฟังก์ชัน writeStreaming() และวนซ้ำส่วนข้อความที่พร้อมใช้งานในสตรีม และสามารถเพิ่ม context ที่ไม่บังคับเพื่อระบุข้อมูลพื้นหลังของโมเดล ซึ่งอาจช่วยให้โมเดลตอบสนองความคาดหวังของคุณสำหรับเอาต์พุตได้ดียิ่งขึ้น
// Streaming
const writer = await Writer.create(
expectedInputLanguages: ["en"],
expectedContextLanguages: ["en"],
outputLanguage: "en",
);
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({
expectedInputLanguages: ["en"],
expectedContextLanguages: ["en"],
outputLanguage: "en",
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);
}
ใช้ Writer ซ้ำ
คุณสามารถใช้ Writer คนเดียวกันเพื่อสร้างเนื้อหาหลายรายการได้
// 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
หากต้องการสิ้นสุดกระบวนการเขียน ให้ยกเลิกคอนโทรลเลอร์และทำลาย 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();
สาธิต
นโยบายสิทธิ์, iframe และ Web Worker
โดยค่าเริ่มต้น Writer API จะใช้ได้เฉพาะกับหน้าต่างระดับบนสุดและ iframe ที่มีต้นทางเดียวกัน คุณสามารถมอบสิทธิ์เข้าถึง API ให้กับ iframe แบบข้ามต้นทางได้
โดยใช้แอตทริบิวต์ของนโยบายสิทธิ์ allow=""
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Writer API by
setting the `allow="writer"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="writer"></iframe>
Writer API ไม่พร้อมใช้งานใน Web Worker เนื่องจากความซับซ้อนในการสร้างเอกสารที่รับผิดชอบสำหรับ Worker แต่ละคนเพื่อตรวจสอบสถานะนโยบายสิทธิ์
มีส่วนร่วมและแชร์ความคิดเห็น
Writer API และ Rewriter API อยู่ระหว่างการหารืออย่างต่อเนื่อง และอาจมีการเปลี่ยนแปลงในอนาคต หากคุณลองใช้ API นี้และมีข้อเสนอแนะ โปรดแจ้งให้เราทราบ
- อ่านวิดีโออธิบาย, ถามคำถาม และเข้าร่วมการสนทนา
- ตรวจสอบสถานะ Chrome เพื่อดูข้อมูลอัปเดตเกี่ยวกับการใช้งาน API ใน Chrome
- หากมีข้อเสนอแนะเกี่ยวกับการใช้งานของ Chrome โปรดรายงานข้อบกพร่องของ Chromium
- เข้าร่วมโปรแกรมทดลองใช้ก่อนเปิดตัว เพื่อดู API ใหม่ก่อนใครและรับสิทธิ์เข้าถึงรายชื่ออีเมลของเรา
ค้นพบ API ของ AI ในตัว ทั้งหมดที่ใช้ โมเดลพื้นฐานและโมเดลผู้เชี่ยวชาญในเบราว์เซอร์