Rewriter API

發布日期:2025 年 5 月 20 日

說明 網頁 額外資訊 Chrome 狀態 Intent
GitHub 來源試用 原始碼試用 來源試用 原始碼試用 查看 實驗意圖

Rewriter API 可協助您修訂及重組文字。這項 API 和 Writer API 屬於寫作輔助 API 提案

這些 API 可協助您改善使用者建立的內容。

用途

您可以加長或縮短現有文字,也可以改變語氣。舉例來說,您可以:

  • 改寫簡短電子郵件,讓內容聽起來更禮貌和正式。
  • 建議編輯顧客評論,協助其他顧客瞭解意見回饋或移除不當內容。
  • 以特定目標對象期望的形式呈現內容。

找不到適合的用途嗎?加入搶先體驗計畫,分享你的意見。

開始使用

加入 Rewriter 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 並前往「模型狀態」。開啟列出的「檔案路徑」,判斷模型大小。

申請參加來源試用

Rewriter API 與 Writer API 共同推出來源試用。如要開始使用這些 API,請按照下列步驟操作:

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

進一步瞭解如何開始使用原始碼試用計畫

新增對 localhost 的支援

如要在來源試用期間透過 localhost 存取 Writer 和 Rewriter API,請務必將 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 都已整合至瀏覽器。第一次有網站使用內建 AI API 時,系統會另外下載 Gemini Nano。實際上,如果使用者已與內建 API 互動,他們就會將模型下載至瀏覽器。

如要判斷模型是否已可使用,請呼叫非同步 Rewriter.availability() 函式。這個函式會傳回字串,可能的值有四種:

  • 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-formalas-is (預設值) 或 more-casual
  • format:輸出格式,允許的值為 as-is (預設值)、markdownplain-text
  • length:輸出內容的長度,允許的值為 shorteras-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);
  });
}

開始重寫

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

非串流輸出

使用非串流重寫功能時,模型會處理整個輸入內容,然後產生輸出內容。

如要取得非串流輸出內容,請呼叫非同步 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 和其他專家模型。