在 Chrome 中使用内置 AI 功能进行摘要

发布时间:2024 年 11 月 11 日

假设您可以让用户将冗长的文章、复杂的文档,甚至热烈的聊天对话浓缩成简洁而富有洞见的摘要。

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

  • 总结文章或聊天对话的要点。
  • 为文章建议标题和标题。
  • 为长篇幅文本创建简明扼要的信息性摘要。
  • 根据图书评价为图书生成预告片。

可用性

注册源代码试用版

如需开始使用 Summarizer API,请按以下步骤操作:

  1. 确认您已阅读并同意遵守 Google 的《生成式 AI 使用限制政策》
  2. 前往 Summarizer API 源代码试用版
  3. 点击注册,然后填写表单。
    • 网站来源字段中,提供您的来源或扩展程序 ID chrome-extension://YOUR_EXTENSION_ID
  4. 如需提交,请点击注册
  5. 复制提供的令牌,并将其添加到您要启用试用版的来源或扩展程序文件中的每个网页。
  6. 开始使用 Summarizer API

详细了解如何开始使用来源试用

源代码试用期间的限制

在原始试用期间,Summarizer API 仅支持对英语文本进行总结,因为模型质量仅针对英语内容进行了全面测试。我们打算在测试其他语言的质量和安全性,并在 API 广泛推出后解除此限制。

添加了对 localhost 的支持

如需在源试用期间在 localhost 上访问 Summarizer API,您必须使用 Chrome Canary。然后,请按以下步骤操作:

  1. 在以下任一平台上打开 Chrome Canary:Windows、Mac 或 Linux。
  2. 前往chrome://flags/#summarization-api-for-gemini-nano
  3. 选择已启用
  4. 点击重新启动或重启 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;drteaserheadline
  • format:摘要的格式,允许的值为 markdown(默认值)和 plain-text
  • length:摘要的长度,允许的值为 shortmedium(默认值)和 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 技术架构组征求了反馈,并询问了 MozillaWebKit 的标准立场。

参与并分享反馈

立即加入源试用,开始测试 Summarizer API,并分享您的反馈。您的反馈将直接影响我们构建和实现此 API 及所有内置 AI API 的未来版本的方式。