利用内置 AI 生成摘要

发布时间:2024 年 11 月 11 日;上次更新时间:2025 年 7 月 30 日

Browser Support

  • Chrome: 138.
  • Edge: 138.
  • Firefox: not supported.
  • Safari: not supported.

Source

您可以让用户将长篇文章、复杂文档,甚至是生动的聊天对话提炼成简洁且富有洞察力的摘要。

Summarizer API 可用于生成不同类型、各种长度和各种格式的摘要,例如句子、段落、列表项等。我们认为此 API 在以下情况下非常有用:

  • 总结文章或聊天对话的要点。
  • 为文章提供标题建议。
  • 为长篇文本创建简洁且信息量充足的摘要。
  • 根据书评为图书生成预告片。

开始使用

Summarizer API 可从 Chrome 138 稳定版 开始使用。

运行功能检测,查看浏览器是否支持 Summarizer API。

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

查看硬件要求

开发者和在 Chrome 中使用这些 API 运行功能的用户需要满足以下要求。其他浏览器可能有不同的运行要求。

Language DetectorTranslator APIs 可在桌面版 Chrome 中运行。这些 API 无法在移动设备上运行。

在满足以下条件时,Prompt APISummarizer APIWriter APIRewriter APIProofreader API 可在 Chrome 中运行:

  • 操作系统:Windows 10 或 11;macOS 13+(Ventura 及更高版本); Linux;或 Chromebook Plus 设备上的 ChromeOS(平台 16389.0.0 及更高版本)。 Chromebook Plus 设备。 采用 Gemini Nano 的 API 尚不支持 Android 版 Chrome、iOS 版 Chrome 和非 Chromebook Plus 设备上的 ChromeOS 。
  • 存储空间:包含 Chrome 配置文件的卷上至少有 22 GB 的可用空间。
  • GPU 或 CPU:内置模型可以使用 GPU 或 CPU 运行。
    • GPU:严格超过 4 GB 的 VRAM。
    • CPU:16 GB 或更多 RAM,以及 4 个或更多 CPU 核心。
    • 注意:采用音频输入的 Prompt API 需要 GPU。
  • 网络:无限数据或不按流量计费的连接。

随着浏览器更新模型,Gemini Nano 的确切大小可能会有所不同。如需确定当前大小,请访问 chrome://on-device-internals

模型下载

Summarizer API 使用经过训练的模型来生成高质量的摘要。该 API 内置于 Chrome 中,Gemini Nano 是网站首次使用此 API 时下载的模型。

如需确定模型是否已准备就绪,请调用异步 Summarizer.availability()函数。 如果对 availability() 的响应为 downloadable,请监听下载进度,以便告知用户进度,因为这可能需要一些时间。

const availability = await Summarizer.availability();

如需触发模型下载并创建摘要生成器,请检查 用户激活情况,然后调用 异步 Summarizer.create() 函数。

// Proceed to request batch or streaming summarization
const summarizer = await Summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

API 功能

借助 create() 函数,您可以根据需要配置新的摘要生成器对象。它采用一个可选的 options 对象,其中包含以下参数:

  • sharedContext:可帮助摘要生成器的其他共享上下文。
  • type:摘要的类型,允许的值包括 key-points(默认值)、tldrteaserheadline。有关详情,请查看下表。
  • format:摘要的格式,允许的值包括 markdown(默认值)和 plain-text
  • length:摘要的长度,允许的值包括 short(默认值)、mediumlong。这些长度的含义因请求的 type 而异。例如,在 Chrome 的实现中,简短的要点摘要包含三个列表项,而简短的摘要则是一个句子。
  • preference:一种机制,供开发者指明他们是优先考虑快速执行还是全面功能。
    • auto:浏览器会平衡执行速度和摘要生成功能,并可能会根据环境、系统限制或上下文动态调整其内部处理。
    • speed:浏览器应优先考虑低延迟和快速执行。 这种方法优先考虑性能,这可能会限制摘要生成功能,从而可能导致提取的细微差别较少或对源文本的合成较简单。
    • capability:浏览器应优先考虑摘要的全面性和连贯性,以及在摘要类型和其他可配置选项方面提供更大灵活性的模型。这种方法侧重于准确捕捉细微的上下文并生成高度精炼的摘要,这可能会导致更高的延迟时间和更慢的执行速度。

设置后,参数无法更改。如果您需要修改参数,请创建新的摘要生成器对象。

下表展示了不同类型的摘要及其对应的长度。这些长度表示可能的最大值,因为有时结果可能会更短。

类型 含义 长度
"tldr" 摘要应简短明了,提供输入的快速概览,适合忙碌的读者。
1 个句子
媒介 3 个句子
5 个句子
"teaser" 摘要应侧重于输入中最有趣或最引人入胜的部分,旨在吸引读者阅读更多内容。
1 个句子
媒介 3 个句子
5 个句子
"key-points" 摘要应从输入中提取最重要的要点, 并以项目符号列表的形式呈现。
3 个列表项
媒介 5 个列表项
7 个列表项
"headline" 摘要应以文章标题的格式,用一个 个句子有效地包含输入的主要内容。
12 个字词
媒介 17 个字词
22 个字词

例如,您可以初始化摘要生成器,以 Markdown 格式输出中等长度的要点。

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
};

const availability = await Summarizer.availability();
if (availability === 'unavailable') {
  // The Summarizer API isn't usable.
  return;
}

// Check for user activation before creating the summarizer
if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

分配预期语言

Summarizer API 支持多种语言。创建会话时,请设置预期的输入、输出和上下文语言。这样一来,如果浏览器无法支持特定的语言组合,就可以拒绝请求。

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja', 'es'],
  outputLanguage: 'es',
  expectedContextLanguages: ['en'],
  sharedContext: 'These are requests to summarize articles from a multilanguage newspaper. The users expect a response in Spanish.',
});

您可以通过以下两种方式运行摘要生成器:流式传输和批量(基于请求的输出)。

批量摘要

借助批量摘要,模型会将输入作为一个整体进行处理,然后生成输出。

如需获取批量摘要,请调用 summarize() 函数。第一个实参是您要总结的文本。第二个可选实参是包含 context 字段的对象。借助此字段,您可以添加可能有助于改进摘要的背景详细信息。

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

流式摘要

流式摘要可实时提供结果。 随着输入内容的添加和调整,输出会不断更新。如需获取流式摘要,请调用 summarizeStreaming() 而不是 summarize()

const longText = document.querySelector('article').innerHTML;
const stream = summarizer.summarizeStreaming(longText, {
  context: 'This article is intended for junior developers.',
});
for await (const chunk of stream) {
  console.log(chunk);
}

演示

您可以在 Summarizer API Playground中试用 Summarizer API。

权限政策、iframe 和 Web Worker

默认情况下,Summarizer API 仅适用于顶级窗口及其同源 iframe。可以使用权限政策 allow="" 属性将 API 的访问权限委托给跨源 iframe :

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Summarizer API by
  setting the `allow="summarizer"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="summarizer"></iframe>

Summarizer API 目前无法在 Web Worker 中使用。这是因为,为了检查权限政策状态,需要为每个 Worker 建立负责任的文档,而这非常复杂。

分享反馈

我们希望了解您使用 Summarizer API 构建的内容。欢迎在 XYouTubeLinkedIn 上与我们分享您的 网站和 Web 应用 。

如需针对 Chrome 的实现提供反馈,请提交 bug 报告功能请求