Summarizer

Web 功能: Summarizer

Summarizer API 允许 Web 开发者使用 Chrome 中的 Gemini Nano 或 Edge 中的 Phi,直接在浏览器中提供由 AI 赋能的本地文本提炼功能。此 API 支持各种格式,包括要点、标题和 TL;DR,同时完全在设备端运行,以确保用户隐私。


使用入门

Summarizer API 从 Chrome 和 Edge 138 开始提供。它需要一次性下载 Gemini Nano 或 Phi 模型。

硬件和软件要求

  • 操作系统:Windows 10/11、macOS 13 及更高版本、Linux 或 ChromeOS (Chromebook Plus)。
  • 存储空间:22GB 配置文件卷可用空间。
  • RAM/CPU:16GB 以上 RAM 和 4 个以上 CPU 核心。
  • VRAM:4GB 以上(如果使用 GPU)。

模型下载和可用性

检查模型是否已就绪、需要下载或不可用。

必须传递选项:您必须向 Summarizer.availability(options) 和 Summarizer.create(options) 传递相同的配置选项对象。请勿使用已废弃的 window.ai.summarizer API surface。

强制性进度监控:您必须实现模型下载进度监控,方法是向 Summarizer.create() 提供 monitor(m) 回调,并为 downloadprogress 事件添加监听器。

用户手势要求:当 availability 为 'downloadable' 或 'downloading' 时,通过 Summarizer.create() 触发实际下载需要用户手势(例如用户点击)。您必须将创建调用放在事件监听器中,而不是在网页加载时无条件调用,以防止NotAllowedError。

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

API 功能和配置

通过 Summarizer.create(options) 创建摘要生成器时,您可以自定义输出:

参数 选项 说明
type key-points、tldr、teaser、headline 定义摘要策略。
format markdown、plain-text 输出语法样式。
length short、medium、long 目标长度(例如 1 句话还是 5 句话)。
preference auto、speed、capability 在延迟时间和质量之间取得平衡。

配置示例

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

语言支持

您可以指定预期语言,以确保浏览器可以处理特定的摘要请求。

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

摘要方法

1. 批量摘要

一次性处理整个文本并返回结果。

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

2. 直播摘要

在模型生成结果时实时返回结果,从而提供响应速度更快的界面。

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

安全与权限

  • 数据隐私权:不会向 Google 发送任何数据;处理在本地设备上进行。
  • 跨域:可以使用权限政策向 iframe 授予访问权限。

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • Web Worker:目前不受支持。

后备策略

在初始化或查询可用性之前,请检查浏览器是否支持 Summarizer API:

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

如果 Summarizer API 不受支持,或者可用性检查返回 'unavailable',您必须优雅地回退。

推荐选项:

  1. 远程 API 回退:将提炼请求定向到服务器端点或远程 API(例如 Vertex AI Gemini API),以便用户仍能获得摘要。
  2. 优雅降级:在界面中以视觉方式停用总结控件,或隐藏按钮并显示友好消息(例如 "Local summarization is currently unsupported in this browser")。请勿允许互动触发未处理的通用运行时异常。
  3. Polyfill 后备方案:您可以使用社区维护的 polyfill(例如 built-in-ai-task-apis-polyfills 或 prompt-api-polyfill),通过云端模型远程服务或本地模型设备端推理来模拟 API 接口。

隐私和费用影响:这些 polyfill 可能会将请求代理到远程服务器(例如云端的 Gemini API)。这会完全破坏原生内置 AI API 的设备端隐私保证,并会产生服务器端 API 使用费用。