發布日期:2025 年 5 月 20 日
說明 | 網頁 | 擴充功能 | Chrome 狀態 | 意圖 |
---|---|---|---|---|
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;或 ChromeOS (平台 16389.0.0 以上版本) 搭配 [Chromebook Plus](https://www.google.com/chromebook/chromebookplus/) 裝置。 使用 Gemini Nano 的 API 目前不支援 Android 版、iOS 版 Chrome,以及非 Chromebook Plus 裝置上的 ChromeOS。
- 儲存空間:包含 Chrome 設定檔的磁碟區至少要有 22 GB 的可用空間。
- GPU:VRAM 必須超過 4 GB。
- 網路:無限量數據或不計量的連線。
瀏覽器更新模型時,Gemini Nano 的確切大小可能會有所不同。如要判斷目前大小,請前往 chrome://on-device-internals
並前往「模型狀態」。開啟列出的「檔案路徑」,判斷模型大小。
申請參加來源試用
Rewriter API 與 Writer API 共同推出來源試用。如要開始使用這些 API,請按照下列步驟操作:
- 確認瞭解《Google 生成式 AI 使用限制政策》。
- 前往 Rewriter API 來源試用。
- 按一下「註冊」並填寫表單。在「網站來源」欄位中,提供來源或擴充功能 ID (
chrome-extension://YOUR_EXTENSION_ID
)。 - 按一下「註冊」即可提交。
- 複製系統提供的權杖,並加到來源中每個參與的網頁,或加入擴充功能資訊清單。
- 開始使用 Rewriter API。
進一步瞭解如何開始使用來源試用計畫。
新增對 localhost 的支援
如要在來源試用期間透過 localhost 存取 Writer 和 Rewriter API,請務必將 Chrome 更新至最新版本。接下來,請按照下列步驟進行:
- 前往
chrome://flags/#rewriter-api-for-gemini-nano
。 - 選取「已啟用」。
- 按一下「重新啟動」或重新啟動 Chrome。
使用 Rewriter API
首先,請執行功能偵測,確認瀏覽器是否支援這些 API。
if ('Rewriter' in self) { // The Rewriter API is supported. }
Rewriter API 和所有其他內建 AI API 都已整合至瀏覽器。首次有網站使用內建 AI API 時,系統會另外下載 Gemini Nano。實際上,如果使用者已與內建 API 互動,他們就會將模型下載至瀏覽器。
如要判斷模型是否已可使用,請呼叫非同步 Rewriter.availability()
函式。如果對 availability()
的回應是 downloadable
,請監聽下載進度並通知使用者,因為下載可能需要一段時間。
const availability = await Rewriter.availability();
如要觸發模型下載作業並啟動重寫器,請檢查使用者啟用狀態,然後呼叫 Rewriter.create()
函式。
const rewriter = await Rewriter.create({ monitor(m) { m.addEventListener("downloadprogress", e => { console.log(`Downloaded ${e.loaded * 100}%`); }); } });
API 函式
您可以使用 create()
函式設定新的重寫器物件。這個方法會採用選用的 options
物件,並使用下列參數:
tone
:寫作語氣是指內容的風格、特質或態度。值可以設為more-formal
、as-is
(預設值) 或more-casual
。format
:輸出格式,允許的值為as-is
(預設值)、markdown
和plain-text
。length
:輸出內容的長度,允許的值為shorter
、as-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();
示範
權限政策、iframe 和 Web Worker
根據預設,Rewriter API 僅適用於頂層視窗及其同源 iframe。您可以使用 Permission Policy allow=""
屬性,將 API 存取權委派給跨來源 iframe:
<!-- The hosting site at https://main.example.com can grant a cross-origin iframe at https://cross-origin.example.com/ access to the Rewriter API by setting the `allow="rewriter"` attribute. --> <iframe src="https://cross-origin.example.com/" allow="rewriter"></iframe>
由於要為每個 Worker 建立負責的文件,以檢查權限政策狀態,因此目前 Web Worker 無法使用 Prompt API。
參與討論及分享意見
Writer 和 Rewriter API 目前仍在討論階段,日後可能會有變動。如果您試用過這項 API,歡迎提供意見。
- 閱讀說明、提出問題並參與討論。
- 在 Chrome 狀態中查看 Chrome 的實作情形。
- 加入搶先體驗計畫,提前瞭解新 API 並加入我們的郵寄清單。
- 如要對 Chrome 的實作方式提供意見,請回報 Chromium 錯誤。
在瀏覽器中探索所有使用模型的內建 AI API,包括 Gemini Nano 和其他專家模型。