发布时间:2024 年 11 月 11 日
想象一下,您可以让用户能够将冗长的文章、复杂的文档甚至生动的聊天对话提炼成简洁而富有洞见的摘要。
Summarizer API 可用于生成不同长度和格式的不同类型的摘要,例如句子、段落、项目符号列表等。我们认为此 API 在以下情况下非常有用:
- 总结某篇文章或聊天对话的要点。
- 为文章建议标题和标题。
- 为长篇幅文本创建简明扼要的信息性摘要。
- 根据图书评价为图书生成预告片。
可用性
- 加入 Summarizer API 源试用(从 Chrome 131 到 Chrome 136),在正式版中使用真实用户测试该 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()
函数。它会返回一个 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 的实现中,一个简短的要点摘要由 3 个项目符号组成,一个简短摘要由一句话组成;一个长要点摘要由 7 个要点组成,而一份长摘要则由一个段落组成。
以下示例演示了如何初始化摘要生成器。
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 社区群组,参与制定标准。