公開日: 2025 年 5 月 20 日
商品の解説 | ウェブ | 拡張機能 | Chrome ステータス | インテント |
---|---|---|---|---|
GitHub | 表示 | テストの目的 |
Rewriter API を使用すると、テキストの修正と再構成を行えます。この API と Writer API は、Writing Assistance APIs 提案の一部です。
これらの API を使用すると、ユーザーが作成したコンテンツを改善できます。
ユースケース
既存のテキストを長くしたり短くしたり、トーンを変更したりして、推敲します。たとえば、次のような操作を行えます。
- 短いメールを、より丁寧でフォーマルな表現に書き直してください。
- 他のユーザーがフィードバックを理解したり、有害なコンテンツを削除したりできるように、ユーザー レビューの編集を提案します。
- 特定の視聴者の期待に応えるようにコンテンツの形式を整えます。
ユースケースが見つからない場合は、早期プレビュー プログラムに参加して、フィードバックをお寄せください。
始める
Chrome 137 ~ 142 で実施される Rewriter API のオリジン トライアルに参加する。
ハードウェア要件を確認する
Chrome でこれらの API を使用して機能を操作するデベロッパーとユーザーには、次の要件があります。他のブラウザでは動作要件が異なる場合があります。
言語検出 API と翻訳 API は、パソコン版 Chrome で動作します。これらの API はモバイル デバイスでは動作しません。Prompt API、Summarizer API、Writer API、Rewriter API は、次の条件を満たす場合に Chrome で動作します。
- オペレーティング システム: Windows 10 または 11、macOS 13 以降(Ventura 以降)、Linux。Gemini Nano を使用する API は、Android 版 Chrome、iOS 版 Chrome、ChromeOS 版 Chrome ではまだサポートされていません。
- ストレージ: Chrome プロファイルを含むボリュームに 22 GB 以上。
- GPU: 4 GB を超える VRAM。
- ネットワーク: 無制限のデータ通信または従量制でない接続。
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 API と 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 は、ブラウザに統合されています。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-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);
});
}
書き換えを開始
モデルからコンテンツを出力する方法は、非ストリーミングとストリーミングの 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 をお試しになり、フィードバックがございましたら、ぜひお聞かせください。
- 説明を読む、質問をする、ディスカッションに参加する。
- Chrome Status で Chrome の実装を確認してください。
- 早期プレビュー プログラムに参加して、新しい API をいち早く確認し、メーリング リストにアクセスしましょう。
- Chrome の実装についてフィードバックがある場合は、Chromium のバグを報告してください。
ブラウザで、Gemini Nano などのエキスパート モデルを含む、モデルを使用するすべての組み込み AI API を見つけてください。