发布时间:2024 年 11 月 11 日;上次更新时间:2025 年 7 月 30 日
您可以让用户将长篇文章、复杂文档,甚至是生动的聊天对话提炼成简洁且富有洞察力的摘要。
Summarizer API 可用于生成不同类型、各种长度和各种格式的摘要,例如句子、段落、列表项等。我们认为此 API 在以下情况下非常有用:
- 总结文章或聊天对话的要点。
- 为文章提供标题建议。
- 为长篇文本创建简洁且信息量充足的摘要。
- 根据书评为图书生成预告片。
开始使用
Summarizer API 可从 Chrome 138 稳定版 开始使用。
运行功能检测,查看浏览器是否支持 Summarizer API。
if ('Summarizer' in self) {
// The Summarizer API is supported.
}
查看硬件要求
开发者和在 Chrome 中使用这些 API 运行功能的用户需要满足以下要求。其他浏览器可能有不同的运行要求。
Language Detector 和 Translator APIs 可在桌面版 Chrome 中运行。这些 API 无法在移动设备上运行。
在满足以下条件时,Prompt API、Summarizer API、Writer API、Rewriter API 和 Proofreader 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。
- 网络:无限数据或不按流量计费的连接。 默认情况下,Wi-Fi 和以太网连接往往不按流量计费 ,而移动网络连接通常按流量计费 。
随着浏览器更新模型,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(默认值)、tldr、teaser和headline。有关详情,请查看下表。format:摘要的格式,允许的值包括markdown(默认值)和plain-text。length:摘要的长度,允许的值包括short(默认值)、medium和long。这些长度的含义因请求的type而异。例如,在 Chrome 的实现中,简短的要点摘要包含三个列表项,而简短的摘要则是一个句子。preference:一种机制,供开发者指明他们是优先考虑快速执行还是全面功能。auto:浏览器会平衡执行速度和摘要生成功能,并可能会根据环境、系统限制或上下文动态调整其内部处理。speed:浏览器应优先考虑低延迟和快速执行。 这种方法优先考虑性能,这可能会限制摘要生成功能,从而可能导致提取的细微差别较少或对源文本的合成较简单。capability:浏览器应优先考虑摘要的全面性和连贯性,以及在摘要类型和其他可配置选项方面提供更大灵活性的模型。这种方法侧重于准确捕捉细微的上下文并生成高度精炼的摘要,这可能会导致更高的延迟时间和更慢的执行速度。
设置后,参数无法更改。如果您需要修改参数,请创建新的摘要生成器对象。
下表展示了不同类型的摘要及其对应的长度。这些长度表示可能的最大值,因为有时结果可能会更短。
| 类型 | 含义 | 长度 | ||||||
|---|---|---|---|---|---|---|---|---|
"tldr" |
摘要应简短明了,提供输入的快速概览,适合忙碌的读者。 |
|
||||||
"teaser" |
摘要应侧重于输入中最有趣或最引人入胜的部分,旨在吸引读者阅读更多内容。 |
|
||||||
"key-points" |
摘要应从输入中提取最重要的要点, 并以项目符号列表的形式呈现。 |
|
||||||
"headline" |
摘要应以文章标题的格式,用一个 个句子有效地包含输入的主要内容。 |
|
||||||
例如,您可以初始化摘要生成器,以 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 构建的内容。欢迎在 X、YouTube 和 LinkedIn 上与我们分享您的 网站和 Web 应用 。