发布时间:2024 年 11 月 11 日
假设您可以让用户将冗长的文章、复杂的文档,甚至热烈的聊天对话浓缩成简洁而富有洞见的摘要。
Summarizer API 可用于生成不同长度和格式的不同类型摘要,例如句子、段落、项目符号列表等。我们认为此 API 在以下情况下非常有用:
- 总结文章或聊天对话的要点。
- 为文章建议标题和标题。
- 为长篇幅文本创建简明扼要的信息性摘要。
- 根据图书评价为图书生成预告片。
可用性
- 加入 Summarizer API 源试用,该试用从 Chrome 131 到 Chrome 136 进行。借助源试用,您可以在 Chrome 上向您的源的真实用户提供该功能。
- 请在 Chrome 状态中了解我们的实施方式。
- Summarizer API 提案是一系列编写 API 的一部分,欢迎大家讨论。
- 加入抢先体验计划,抢先了解新的内置 AI API,并参与我们的邮寄名单讨论。
注册源代码试用
如需开始使用 Summarizer API,请按以下步骤操作:
- 确认您已阅读并同意《Google 生成式 AI 使用限制政策》。
- 前往 Summarizer API 源代码试用版。
- 点击注册,然后填写表单。
- 在网站来源字段中,提供您的来源或扩展程序 ID
chrome-extension://YOUR_EXTENSION_ID
。
- 在网站来源字段中,提供您的来源或扩展程序 ID
- 如需提交,请点击注册。
- 复制提供的令牌,并将其添加到您要启用试用版的来源或扩展程序文件中的每个网页。
- 如果您要构建扩展程序,请按照扩展程序来源试用说明操作
- 开始使用 Summarizer API。
详细了解如何开始使用来源试用。
源代码试用期间的限制
在原始试用期间,Summarizer API 仅支持对英语文本进行总结,因为模型质量仅针对英语内容进行了全面测试。我们打算在测试其他语言的质量和安全性,并在 API 广泛推出后解除此限制。
添加了对 localhost 的支持
如需在源试用期间在 localhost
上访问 Summarizer API,您必须使用 Chrome Canary。然后,请按以下步骤操作:
- 前往
chrome://flags/#optimization-guide-on-device-model
。 - 选择 Enabled BypassPerfRequirement。这会跳过性能检查和 VRAM 要求,这可能会导致 Gemini Nano 无法在您的设备上下载。
- 前往
chrome://flags/#summarization-api-for-gemini-nano
。 - 选择已启用。
- 点击重新启动或重启 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()
函数。它会返回一个 AISummarizerCapabilities
对象,其中包含一个 available
字段,该字段可以采用以下三种可能的值:
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;dr
、teaser
和headline
。format
:摘要的格式,允许的值为markdown
(默认值)和plain-text
。length
:摘要的长度,允许的值为short
、medium
(默认值)和long
。这些长度的含义因请求的type
而异。例如,在 Chrome 的实现中,简短的要点摘要由三个项目符号组成,简短的摘要为一句话;长篇幅的要点摘要由七个项目符号组成,长篇幅的摘要为一段话。
以下示例演示了如何初始化摘要生成器。
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;
}
运行总结器
您可以通过以下两种方式运行摘要生成器:流式传输和非流式传输。
非流式摘要
使用非流式传输摘要时,模型会将输入作为一个整体进行处理,然后生成输出。
如需获取非流式摘要,请调用总结器的异步 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()
函数。然后,迭代流中可用的文本片段。
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 Playground 中试用 Summarizer API。
标准化工作
我们正在努力标准化 Summarizer API,以确保跨浏览器兼容性。
我们的 API 提案获得了社区支持,现已移至 W3C Web Incubator 社区群组进行进一步讨论。Chrome 团队向 W3C 技术架构组征求了反馈,并询问了 Mozilla 和 WebKit 的标准立场。
参与并分享反馈
立即加入源试用,开始测试 Summarizer API,并分享您的反馈。您的反馈将直接影响我们构建和实现此 API 及所有内置 AI API 的未来版本的方式。
- 如需针对 Chrome 的实现方式提供反馈,请提交bug 报告或功能请求。
- 在 GitHub 上讨论 Summarizer API 设计,方法是针对现有问题发表评论或创建新问题。
- 加入 Web Incubator 社区群组,参与制定标准。