Chrome に組み込まれた AI による要約

公開日: 2024 年 11 月 11 日

長い記事、複雑なドキュメント、活発なチャット会話を簡潔で有益な要約にまとめる機能をユーザーに提供できるとしたらどうでしょう。

Summarizer API を使用すると、さまざまな長さと形式(文、段落、箇条書きリストなど)でさまざまなタイプの要約を生成できます。この API は、次のようなシナリオで役立ちます。

  • 記事やチャット会話の要点をまとめる。
  • 記事のタイトルと見出しの候補を表示する。
  • 長いテキストの簡潔で有益な要約を作成する。
  • 書籍のレビューに基づいて書籍の予告編を生成します。

対象

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

Summarizer API の使用を開始する手順は次のとおりです。

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

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

オリジン トライアルの制限事項

オリジン トライアルでは、モデルの品質が英語コンテンツでのみ徹底的にテストされているため、Summarizer API は英語テキストの要約のみをサポートしています。品質と安全性について追加の言語をテストし、API が広く利用可能になったら、この制限を解除する予定です。

localhost のサポートを追加

オリジン トライアル中に localhost で Summarizer API にアクセスするには、Chrome Canary が必要です。次に、次の手順を実施します。

  1. Windows、Mac、Linux のいずれかのプラットフォームで Chrome Canary を開きます。
  2. chrome://flags/#summarization-api-for-gemini-nanoに向かいます。
  3. [有効] を選択します。
  4. [再起動] をクリックするか、Chrome を再起動します。

Summarizer API を使用する

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

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

モデルのダウンロード

Summarizer API は、高品質な要約を生成するようにトレーニングされた強力な AI モデルを使用します。API は Chrome に組み込まれていますが、ウェブサイトが API を初めて使用するときにモデルが個別にダウンロードされます。

モデルの使用準備ができているかどうかを確認するには、非同期の ai.summarizer.capabilities() 関数を呼び出します。available フィールドを持つ AISummarizerCapabilities オブジェクトを返します。このフィールドには、次の 3 つの値を指定できます。

  • no: 現在のブラウザは Summarizer API をサポートしていますが、現時点では使用できません。モデルをダウンロードするための空きディスク容量が不足しているなど、さまざまな原因が考えられます。
  • readily: 現在のブラウザは Summarizer API をサポートしており、すぐに使用できます。
  • after-download: 現在のブラウザは Summarizer API をサポートしていますが、まずモデルをダウンロードする必要があります。

モデルのダウンロードをトリガーして要約ツールを作成するには、非同期の ai.summarizer.create() 関数を呼び出します。capabilities() へのレスポンスが after-download だった場合は、ダウンロードの進行状況をリッスンすることをおすすめします。これにより、ダウンロードに時間がかかる場合はユーザーに通知できます。

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

API 関数

create() 関数を使用すると、ニーズに合わせて新しい要約オブジェクトを構成できます。次のパラメータを持つ省略可能な options オブジェクトを受け取ります。

  • sharedContext: 要約ツールに役立つ追加の共有コンテキスト。
  • type: 要約のタイプ。有効な値は key-points(デフォルト)、tl;drteaserheadline です。
  • format: 要約の形式。使用できる値は markdown(デフォルト)と plain-text です。
  • length: 要約の長さ。使用できる値は shortmedium(デフォルト)、long です。これらの長さの意味は、リクエストされた type によって異なります。たとえば、Chrome の実装では、短い要約は 3 つの箇条書きで構成され、短い要約は 1 文で構成されます。長い要約は 7 つの箇条書きで構成され、長い要約は 1 つの段落で構成されます。

次の例は、要約ツールを初期化する方法を示しています。

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

要約ツールを実行する

要約ツールを実行するには、ストリーミングと非ストリーミングの 2 つの方法があります。

非ストリーミングの要約

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

ストリーミング以外の要約を取得するには、要約ツールの非同期 summarize() 関数を呼び出します。この関数の最初の引数は、要約するテキストです。2 つ目の引数(省略可)は、context フィールドを含むオブジェクトです。このフィールドには、要約の精度を高めるのに役立つ背景情報を追加できます。

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

ストリーミングの要約

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

ストリーミング サマリーを取得するには、サマライザの summarizeStreaming() 関数を呼び出します。次に、ストリーム内の使用可能なテキスト セグメントを反復処理します。

let result = '';
let previousChunk = '';
for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

summarizeStreaming()ReadableStream を返します。この場合、レスポンス セグメントは互いに連続して構築されます。つまり、各レスポンスには、次のセグメントだけでなく、その時点で生成されたサマリー全体が含まれます。これは意図した動作ではありません。

セグメントは単一の長いストリームの連続した部分であるため、プラットフォーム上の他のストリーミング API と整合させる予定です。現時点では、意図した動作を実現するために、次を実装します。

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

デモ

Summarizer API は、Summarizer API Playground で試すことができます。

標準化の取り組み

Google は、クロスブラウザの互換性を確保するため、Summarizer API の標準化に取り組んでいます。

Google の API 提案はコミュニティのサポートを受け、W3C ウェブ インキュベーター コミュニティ グループに移行され、さらに議論されています。Chrome チームは W3C 技術アーキテクチャ グループにフィードバックをリクエストし、MozillaWebKit に標準に関する立場を尋ねました。

参加してフィードバックを共有する

オリジン トライアルに参加して Summarizer API のテストを始め、フィードバックをお寄せください。ご意見は、この API の今後のバージョンと、すべての組み込み AI API の構築と実装に直接影響します。