Writer API

公開日: 2025 年 5 月 20 日

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

Writer API を使用すると、指定されたライティング タスクに準拠した新しいコンテンツを作成できます。Writer API と Rewriter API は、Writing Assistance APIs の提案の一部です。

これらのパートナー API を使用すると、ユーザーが作成したコンテンツを改善できます。

ユースケース

最初のアイデアとオプションのコンテキストに基づいて、新しいコンテンツを作成します。この機能は、次の目的で使用できます。

  • ユーザーがレビュー、ブログ投稿、メールなどのあらゆる種類のコンテンツを作成できるようにします。
  • ユーザーがより適切なサポート リクエストを作成できるようにします。
  • 特定のスキルをより適切に捉えるために、一連の作品例の紹介文を作成します。

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

始める

Chrome 137 ~ 142 で実施される Writer 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 は、Chrome for Android、iOS、ChromeOS ではまだサポートされていません。
  • ストレージ: Chrome プロファイルを含むボリュームに 22 GB 以上の空き容量が必要です。
  • GPU: 4 GB を超える VRAM。
  • ネットワーク: 無制限のデータ通信または従量制でない接続。

Gemini Nano の正確なサイズは、ブラウザがモデルを更新するにつれて変化する可能性があります。現在のサイズを確認するには、chrome://on-device-internals にアクセスして [モデルのステータス] に移動します。リストに表示された [ファイルパス] を開いて、モデルのサイズを確認します。

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

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

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

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

localhost のサポートを追加

オリジン トライアル中に localhost で Writer API と Rewriter API にアクセスするには、Chrome を最新バージョンに更新する必要があります。続いて、次の手順を実行します。

  1. chrome://flags/#writer-api-for-gemini-nanoに向かいます。
  2. [有効] を選択します。
  3. [再起動] をクリックするか、Chrome を再起動します。

Writer API を使用する

まず、機能検出を実行して、ブラウザがこれらの API をサポートしているかどうかを確認します。

if ('Writer' in self) {
  // The Writer API is supported.
}

Writer API と他のすべての組み込み AI API は、ブラウザに統合されています。Gemini Nano は、ウェブサイトが組み込みの AI API を初めて使用するときに個別にダウンロードされます。実際には、ユーザーが組み込み API をすでに操作している場合、モデルはブラウザにダウンロードされています。

モデルを使用できる状態かどうかを判断するには、非同期の Writer.availability() 関数を呼び出します。次の 4 つの値のいずれかを取る文字列を返します。

  • unavailable: ブラウザは Writer API をサポートしていますが、現時点では使用できません。これには、モデルをダウンロードするためのディスク空き容量が不足しているなど、さまざまな理由が考えられます。
  • available: ブラウザが Writer API をサポートしており、すぐに使用できます。
  • downloadable: ブラウザは Writer API をサポートしていますが、最初にモデルをダウンロードする必要があります。
  • downloading: ブラウザは Writer API をサポートしており、現在モデルをダウンロードしています。

モデルのダウンロードをトリガーしてライターを開始するには、Writer.create() 関数を呼び出します。availability() へのレスポンスが downloadable だった場合は、ダウンロードの進行状況をリッスンし、ダウンロードに時間がかかる可能性があることをユーザーに伝えます。

const writer = await Writer.create({
  monitor(m) {
    m.addEventListener("downloadprogress", e => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

API 関数

create() 関数を使用すると、新しいライター オブジェクトを構成できます。次のパラメータを含むオプションの options オブジェクトを受け取ります。

  • tone: 文章のトーンは、コンテンツのスタイル、キャラクター、態度を指すことがあります。値は formalneutral(デフォルト)、casual に設定できます。
  • format: 出力形式。使用できる値は markdown(デフォルト)と plain-text です。
  • length: 出力の長さ。使用できる値は shortmedium(デフォルト)、long です。
  • sharedContext: 複数の出力を記述する場合、共有コンテキストを使用すると、モデルが期待どおりのコンテンツを生成しやすくなります。

次の例は、writer オブジェクトを初期化する方法を示しています。

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'casual',
  format: 'plain-text',
  length: 'medium',
};

const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
  // The Writer API isn't usable.
  return;
}
if (available === 'available') {
  // The Writer API can be used immediately .
  writer = await Writer.create(options);
} else {
  // The Writer can be used after the model is downloaded.
  const writer = await Writer.create({
    ...options,
    monitor(m) {
      m.addEventListener("downloadprogress", e => {
        console.log(`Downloaded ${e.loaded * 100}%`);
      });
    }
  });
}

ジャーナルを書く

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

非ストリーミング出力

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

ストリーミング以外の出力を取得するには、非同期の write() 関数を呼び出します。作成したいコンテンツのプロンプトを含める必要があります。必要に応じて context を追加してモデルの背景情報を提供できます。これにより、モデルが期待どおりの出力を生成しやすくなります。

// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);

ストリーム書き込みの出力

ストリーミングは結果をリアルタイムで提供します。入力が追加、調整されると、出力は継続的に更新されます。

ストリーミング ライターを取得するには、writeStreaming() 関数を呼び出し、ストリーム内の使用可能なテキスト セグメントを反復処理します。必要に応じて context を追加してモデルの背景情報を提供できます。これにより、モデルが期待どおりの出力を生成しやすくなります。

// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);
for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

複数のタスクのコンテキストを共有する

writer を使用して複数のコンテンツを生成することもできます。この場合、sharedContext を追加すると便利です。たとえば、レビュー担当者がコメントでより良いフィードバックを提供できるようにしたい場合があります。

// Shared context and per writing task context
const writer = await Writer.create({
sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = writer.writeStreaming(
  "Write a blog post about how I love all this work on gen AI at Google!" +
  "Mention that there's 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."}
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

ライターを再利用する

同じライターを使用して複数のコンテンツを作成できます。

// Reuse a writer
const writer = await Writer.create({ tone: "formal" });

const reviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => writer.write(reviewEl.textContent)
  ),
);

ライターを停止する

書き込みプロセスを終了するには、コントローラを中止してライターを破棄します。

// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });

// Destroying a writer
writer.destroy();

デモ

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

Writer API と Rewriter API は現在活発な議論の対象となっており、今後変更される可能性があります。この API をお試しになり、フィードバックがございましたら、ぜひお聞かせください。

ブラウザで、Gemini Nano やその他のエキスパート モデルなど、モデルを使用するすべての組み込み AI API を確認できます。