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

公開日: 2024 年 11 月 11 日

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

Summarizer API を使用すると、さまざまな長さと形式(文、段落、箇条書きリストなど)でさまざまなタイプの要約を生成できます。この API は次のような場合に役立つと考えられます。

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

対象

  • Chrome 131 ~ Chrome 136 で実施される Summarizer API オリジン トライアルに参加して、本番環境で実際のユーザーを対象に API をテストできます。オリジン トライアルでは、オリジンのすべての Chrome ユーザーがこの機能を利用できます。オリジン トライアルの利用方法を確認する。
    • 使用量上限がある場合がありますが、これらの機能をライブテストやユーザー フィードバックの収集に統合できます。今後、この API の提供範囲を拡大していく予定です。
  • Chrome のステータスで実装状況を追跡できます。
  • Summarizer API の提案は、一連の書き込み API の一部であり、議論の対象となっています。
  • 早期プレビュー プログラムに登録すると、新しい組み込み AI API をいち早く確認し、メーリング リストのディスカッションにアクセスできます。

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

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

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 Technical Architecture Group にフィードバックを求め、MozillaWebKit で基準の見解を尋ねました。

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

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