Rewriter API

公開日: 2025 年 5 月 20 日

商品の解説 ウェブ 拡張機能 Chrome のステータス インテント
GitHub フラグの背後 オリジン トライアル フラグの背後 オリジン トライアル 表示 テストの目的

Rewriter API は、テキストの修正と再構成に役立ちます。この API と Writer API は、Writing Assistance API の提案の一部です。

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

ユースケース

既存のテキストを長くしたり短くしたり、トーンを変更したりして、推敲します。たとえば、次のような操作を行うことができます。

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

ユースケースが見つかりませんか?早期プレビュー プログラムに参加してフィードバックをお寄せください。

使ってみる

Chrome 137 ~ 142 で実施されている Rewriter API オリジン トライアルに参加する。

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

Language Detector API と Translator API は、パソコンの Chrome でのみ動作します。

Prompt API、Summarizer API、Writer API、Rewriter API は、次の条件を満たしている場合に Chrome で動作します。

  • オペレーティング システム: Windows 10 または 11、macOS 13 以降(Ventura 以降)、Linux。Android、iOS、ChromeOS 版 Chrome は、Gemini Nano を基盤とする API ではまだサポートされていません。
  • ストレージ: Chrome プロファイルを含むボリュームに 22 GB 以上の空き容量。
  • GPU: 4 GB を超える VRAM が必要です。
  • ネットワーク: データ通信量無制限または無制限接続。

これらの要件は、開発プロセスと、作成した機能を利用するユーザーに存在します。

オリジン トライアルに登録する

Rewriter API は、Writer API との共同オリジン トライアルで利用できます。これらの API の使用を開始するには:

  1. Google の生成 AI の使用禁止に関するポリシーに同意する。
  2. Rewriter API オリジン トライアルに移動します。
  3. [登録] をクリックし、フォームに必要事項を入力します。[ウェブ送信元] フィールドに、送信元または拡張機能 ID chrome-extension://YOUR_EXTENSION_ID を指定します。
  4. 送信するには、[登録] をクリックします。
  5. 提供されたトークンをコピーし、オリジンの参加するすべてのウェブページに追加するか、拡張機能のマニフェストに含めます。
  6. Rewriter API の使用を開始する。

詳しくは、オリジン トライアルの利用を開始する方法をご覧ください。

localhost のサポートを追加

オリジン トライアル中にローカルホストで Writer API と 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 はブラウザに統合されています。Gemini Nano は、ウェブサイトが組み込み AI API を初めて使用するときに個別にダウンロードされます。実際には、ユーザーが組み込み API を操作した時点で、モデルがブラウザにダウンロードされています。

モデルが使用可能かどうかを確認するには、非同期の Rewriter.availability() 関数を呼び出します。次の 4 つの値を取る文字列を返します。

  • 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);
  });
}

書き換えを開始する

モデルからコンテンツを出力する方法は、ストリーミングと非ストリーミングの 2 つがあります。

ストリーミング以外の出力

非ストリーミングの書き換えでは、モデルは入力全体を処理してから出力を生成します。

ストリーミング以外の出力を取得するには、非同期の 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 API と Rewriter API は現在、活発な議論の段階にあり、今後変更される可能性があります。この API をお試しになった際のフィードバックをお寄せください。

ブラウザでモデルを使用するすべての組み込み AI APIGemini Nano などのエキスパート モデルを含む)を確認する。