Rewriter API

公開日: 2025 年 10 月 22 日

商品の解説 ウェブ 拡張機能 Chrome のステータス インテント
GitHub デベロッパー トライアルデベロッパー トライアル デベロッパー トライアルデベロッパー トライアル 表示 試験運用版のインテント

Rewriter API を使用すると、テキストを修正して再構成できます。この API と Writer API は、 Writing Assistance APIs の提案の一部です。

これらの API は、ユーザーが作成したコンテンツの改善に役立ちます。

ユースケース

既存のテキストを長くしたり短くしたり、トーンを変更したりして、テキストを洗練させます。たとえば、次のようなことができます。

  • 短いメールを書き換えて、より丁寧でフォーマルな表現にする。
  • 他のユーザーがフィードバックを理解しやすくしたり、有害なコンテンツを削除したりできるように、カスタマー レビューの編集を提案する。
  • 特定の視聴者の期待に応えるようにコンテンツをフォーマットする。

ユースケースが見つからない場合は、早期プレビュー プログラムに参加してフィードバックをお寄せください。

始める

Rewriter API オリジン トライアルに参加します( Chrome 137 ~ 148 で実行)。

ハードウェア要件を確認する

Chrome でこれらの API を使用して機能を操作するデベロッパーとユーザーには、次の要件があります。他のブラウザでは、動作要件が異なる場合があります。

Language Detector APITranslator API は、パソコン版 Chrome で動作します。これらの API はモバイル デバイスでは動作しません。

Prompt APISummarizer APIWriter APIRewriter APIProofreader API は、次の条件を満たす場合に Chrome で動作します。

  • オペレーティング システム: Windows 10 または 11、macOS 13 以降(Ventura 以降)、 Linux、またはChromebook Plus デバイスの ChromeOS(プラットフォーム 16389.0.0 以降)。 Android、iOS、Chromebook Plus 以外のデバイスの ChromeOS 向けの Chrome は、Gemini Nano を使用する API ではまだサポートされていません 。
  • ストレージ: Chrome プロファイルを含むボリュームに 22 GB 以上の空き容量。
  • GPU または CPU: 組み込みモデルは GPU または CPU で実行できます。
    • GPU: 4 GB を超える VRAM。
    • CPU: 16 GB 以上の RAM と 4 個以上の CPU コア。
    • : 音声入力を使用する Prompt API には GPU が必要です。
  • ネットワーク: 無制限のデータまたは従量制課金ではない接続。

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 の使用を開始します。

オリジン トライアルの開始方法について詳しくは、こちらをご覧ください。

ローカルホストのサポートを追加する

ローカルホストで Rewriter API にアクセスするには、 Chrome フラグを使用します。

  1. chrome://flags/#optimization-guide-on-device-model を [有効] に設定します。
  2. 次のフラグを [**有効**] または [**多言語対応**] に設定します:
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  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() 関数を呼び出します。 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 オブジェクトを受け取ります。

次の例は、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);
  });
}

想定される言語を割り当てる

Rewriter API は複数の言語をサポートしています。セッションを作成するときに、想定される入力言語、出力言語、コンテキスト言語を設定します。 これにより、ブラウザが特定の言語の組み合わせをサポートできない場合に、リクエストを拒否できます。

const rewriter = await Rewriter.create({
  tone: "more-formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to rewrite 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 つがあります。

リクエスト ベースの出力

リクエスト ベースの出力(または「非ストリーミング」)の場合、モデルは入力全体が生成されるのを待ってから、その入力をまとめて処理し、出力します。

リクエスト ベースの出力を取得するには、非同期の rewrite() 関数を呼び出します。書き換える元のテキストを含める必要があります。オプションで context を追加して、モデルの背景情報を提供できます。これにより、モデルが出力の期待に応えやすくなります。

// Request-based
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、ウェブワーカー

デフォルトでは、Rewriter API はトップレベル ウィンドウとその同一オリジンの iframe でのみ使用できます。権限ポリシー 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>

Rewriter API はウェブワーカーでは使用できません。これは、権限ポリシーのステータスを確認するために、ワーカーごとに責任あるドキュメントを確立することが複雑なためです。

意見交換とフィードバックの提供

Writer API と Rewriter API は現在、活発な議論が行われており、今後変更される可能性があります。この API を試してフィードバックをお寄せください。

  • 解説を読んで、 質問をしたり、ディスカッションに参加したりしてください。
  • Chrome のステータス を確認して、Chrome での Rewriter API の実装を確認してください。
  • Chrome の実装についてフィードバックがある場合は、 Chromium のバグを報告してください。
  • 早期プレビュー プログラムに参加して、 新しい API をいち早く確認し、メーリング リストにアクセスしてください。

モデルを使用するすべての組み込み AI APIGemini Nano やその他のエキスパート モデルなど)をブラウザで確認してください。