Writer API

發布日期:2025 年 5 月 20 日

說明 網頁 額外資訊 Chrome 狀態 Intent
GitHub 標記後面 Origin 試用 標記後面 Origin 試用 查看 意圖進行實驗

Writer API 可協助您建立符合指定寫作工作的新內容。Writer API 和 Rewriter APIWriting Assistance APIs 提案的一部分。

這些合作夥伴 API 可協助您改善使用者創作的內容。

用途

根據初始想法和選用情境撰寫新內容。這項功能可用於:

  • 支援使用者撰寫任何類型的內容,例如評論、網誌文章或電子郵件。
  • 協助使用者撰寫更完善的支援要求。
  • 為一系列作品集草擬介紹,以便更清楚呈現特定技能。

是否缺少您的用途?加入搶先體驗方案,分享您的意見回饋。

開始使用

加入 Writer API 來源試用,在 Chrome 137 到 142 之間執行。

查看硬體需求

Language Detector API 和 Translator API 僅適用於 Chrome 桌面版。

在 Chrome 中,Prompt API、Summarizer API、Writer API 和 Rewriter API 會在下列條件下運作:

  • 作業系統:Windows 10 或 11;macOS 13 以上版本 (Ventura 及後續版本);或 Linux。由 Gemini Nano 支援的 API 尚未支援 Android、iOS 和 ChromeOS 版 Chrome。
  • 儲存空間:含有 Chrome 設定檔的磁碟區至少有 22 GB。
  • GPU:VRAM 必須大於 4 GB。
  • 網路:無限上網流量或無限上網連線。

這些規定適用於您在開發過程中,以及使用您建構的功能的使用者。

申請試用來源

Writer API 可透過 Rewriter API 的來源試用方案取得。如要開始使用這些 API,請按照下列步驟操作:

  1. 確認瞭解 Google 的生成式 AI 使用限制政策
  2. 前往 Writer API 來源試用
  3. 按一下「註冊」並填寫表單。在「網站來源」欄位中,提供來源或擴充功能 ID chrome-extension://YOUR_EXTENSION_ID
  4. 按一下「註冊」即可提交。
  5. 複製提供的符記,並將其加入來源網站上的每個參與網頁,或在擴充功能資訊清單中加入。
  6. 開始使用 Writer 和 Rewriter API。

進一步瞭解如何開始使用來源試驗

為 localhost 新增支援

如要在來源試用期間存取本機主機上的 Writer 和 Rewriter API,您必須將 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 都已整合至瀏覽器。任何網站首次使用內建 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寫作語氣是指內容的風格、角色或態度。這個值可以設為 formalneutral (預設值) 或 casual
  • format:輸出格式,允許的值為 markdown (預設) 和 plain-text
  • length:輸出內容的長度,允許的值為 shortmedium (預設值) 和 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.
  writer = await Writer.create(options);
  writer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
}

開始撰寫

從模型輸出寫入內容的方式有兩種:非串流和串流。

非串流輸出

在非串流寫入作業中,模型會整體處理輸入內容,然後產生輸出內容。

如要取得非串流輸出內容,請呼叫非同步 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 後有任何意見,歡迎與我們分享。

在瀏覽器中探索所有使用模型的 內建 AI API,包括 Gemini Nano 和其他專家模型。