發布日期:2025 年 5 月 20 日
說明 | 網頁 | 額外資訊 | Chrome 狀態 | Intent |
---|---|---|---|---|
GitHub | 查看 | 實驗意圖 |
Writer API 可協助您建立符合指定寫作任務的新內容。Writer API 和 Rewriter API 屬於寫作輔助 API 提案。
這些合作夥伴 API 可協助您改善使用者建立的內容。
用途
根據初始想法和選用情境撰寫新內容。這項資訊可用於:
- 協助使用者撰寫任何內容,例如評論、網誌文章或電子郵件。
- 協助使用者撰寫更優質的支援要求。
- 為一系列工作樣本草擬簡介,以便更準確地呈現特定技能。
找不到適合的用途嗎?加入搶先體驗計畫,分享你的意見。
開始使用
加入 Writer API 來源試用,這項試用活動將在 Chrome 137 到 142 版進行。
查看硬體需求
開發人員和使用者在 Chrome 中使用這些 API 運作功能時,必須遵守下列規定。其他瀏覽器的操作規定可能不同。
語言偵測器和翻譯器 API 適用於電腦版 Chrome。這些 API 不適用於行動裝置。在 Chrome 中使用 Prompt API、Summarizer API、Writer API 和 Rewriter API 時,須符合下列條件:
- 作業系統:Windows 10 或 11;macOS 13 以上版本 (Ventura 和後續版本);或 Linux。目前 Android 版、iOS 版和 ChromeOS 版 Chrome 尚未支援使用 Gemini Nano 的 API。
- 儲存空間:包含 Chrome 設定檔的磁碟區至少要有 22 GB 的空間。
- GPU:視訊記憶體必須超過 4 GB。
- 網路:無限量數據或不計量的連線。
Gemini Nano 的確切大小可能略有不同。如要查看目前大小,請前往 chrome://on-device-internals
並點選「Model status」(模型狀態)。開啟列出的「檔案路徑」,判斷模型大小。
申請參加來源試用
Writer API 與 Rewriter API 共同提供來源試用。如要開始使用這些 API,請按照下列步驟操作:
- 確認瞭解《Google 生成式 AI 使用限制政策》。
- 前往 Writer API 來源試用。
- 按一下「註冊」並填寫表單。在「網站來源」欄位中,提供來源或擴充功能 ID (
chrome-extension://YOUR_EXTENSION_ID
)。 - 按一下「註冊」即可提交。
- 複製系統提供的權杖,並加到來源中每個參與的網頁,或加入擴充功能資訊清單。
- 開始使用 Writer 和 Rewriter API。
進一步瞭解如何開始使用原始碼試用計畫。
新增對 localhost 的支援
如要在來源試用期間存取 localhost 上的 Writer 和 Rewriter API,請務必將 Chrome 更新至最新版本。接下來,請按照下列步驟進行:
- 前往
chrome://flags/#writer-api-for-gemini-nano
。 - 選取「已啟用」。
- 按一下「重新啟動」或重新啟動 Chrome。
使用 Writer API
首先,請執行功能偵測,確認瀏覽器是否支援這些 API。
if ('Writer' in self) {
// The Writer API is supported.
}
Writer API 和所有其他內建 AI API 都已整合至瀏覽器。首次有網站使用內建 AI API 時,系統會另外下載 Gemini Nano。實際上,如果使用者已與內建 API 互動,他們就會將模型下載至瀏覽器。
如要判斷模型是否已可使用,請呼叫非同步 Writer.availability()
函式。這個函式會傳回字串,可能的值有四種:
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()
函式設定新的寫入器物件。這個方法會採用選用的 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}%`);
});
}
});
}
開始撰寫
模型輸出文字的方式有兩種:非串流和串流。
非串流輸出
使用非串流寫入時,模型會處理整個輸入內容,然後產生輸出內容。
如要取得非串流輸出內容,請呼叫非同步 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)
),
);
停止寫入者
如要結束寫入程序,請中止控制器並刪除寫入器。
// 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,歡迎提供意見。
- 閱讀說明、提出問題並參與討論。
- 請參閱 Chrome 狀態,瞭解 Chrome 的實作情形。
- 加入搶先預覽計畫,搶先瞭解新 API 並加入我們的郵寄清單。
- 如要對 Chrome 的實作方式提供意見,請回報 Chromium 錯誤。
在瀏覽器中探索所有內建 AI API,包括 Gemini Nano 和其他專家模型。