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',您必须优雅地回退。
推荐选项:
- 远程 API 回退:将提炼请求定向到服务器端点或远程 API(例如 Vertex AI Gemini API),以便用户仍能获得摘要。
- 优雅降级:在界面中以视觉方式停用总结控件,或隐藏按钮并显示友好消息(例如
"Local summarization is currently unsupported in this browser")。请勿允许互动触发未处理的通用运行时异常。 - Polyfill 后备方案:您可以使用社区维护的 polyfill(例如
built-in-ai-task-apis-polyfills或prompt-api-polyfill),通过云端模型远程服务或本地模型设备端推理来模拟 API 接口。
隐私和费用影响:这些 polyfill 可能会将请求代理到远程服务器(例如云端的 Gemini API)。这会完全破坏原生内置 AI API 的设备端隐私保证,并会产生服务器端 API 使用费用。