Summarizer API cho phép nhà phát triển web cung cấp tính năng tóm tắt văn bản cục bộ, dựa trên AI ngay trong trình duyệt bằng Gemini Nano trong Chrome hoặc Phi trong Edge. API này hỗ trợ nhiều định dạng, bao gồm cả các điểm chính, tiêu đề và tóm tắt, đồng thời hoạt động hoàn toàn trên thiết bị để đảm bảo quyền riêng tư của người dùng.
Bắt đầu
Summarizer API được cung cấp từ Chrome và Edge 138. Bạn cần tải mô hình Gemini Nano hoặc Phi xuống một lần (tương ứng).
Yêu cầu về phần cứng và phần mềm
- Hệ điều hành: Windows 10/11, macOS 13 trở lên, Linux hoặc ChromeOS (Chromebook Plus).
- Bộ nhớ: 22 GB dung lượng trống cho ổ đĩa hồ sơ.
- RAM/CPU: RAM tối thiểu 16 GB và CPU tối thiểu 4 lõi.
- VRAM: 4 GB trở lên (nếu sử dụng GPU).
Tải mô hình xuống và phạm vi cung cấp
Kiểm tra xem mô hình đã sẵn sàng, cần tải xuống hay không dùng được.
Bắt buộc truyền các tuỳ chọn: Bạn phải truyền đối tượng tuỳ chọn cấu hình giống hệt nhau cho cả Summarizer.availability(options) và Summarizer.create(options). KHÔNG sử dụng nền tảng API window.ai.summarizer không dùng nữa.
Giám sát tiến trình bắt buộc: Bạn PHẢI triển khai một trình giám sát cho tiến trình tải mô hình xuống bằng cách cung cấp lệnh gọi lại monitor(m) cho Summarizer.create() và thêm trình nghe cho sự kiện downloadprogress.
Yêu cầu về cử chỉ của người dùng: Khi availability là 'downloadable' hoặc 'downloading', việc kích hoạt lượt tải xuống thực tế thông qua Summarizer.create() đòi hỏi phải có cử chỉ của người dùng (chẳng hạn như lượt nhấp của người dùng). Bạn phải đặt lệnh gọi tạo bên trong trình nghe sự kiện thay vì gọi lệnh đó vô điều kiện khi tải trang để ngăn 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)}%`);
});
},
});
});
}
Các hàm và cấu hình API
Khi tạo trình tóm tắt thông qua Summarizer.create(options), bạn có thể tuỳ chỉnh kết quả:
| Tham số | Tùy chọn | Mô tả |
|---|---|---|
type |
key-points, tldr, teaser, headline |
Xác định chiến lược tóm tắt. |
format |
markdown, plain-text |
Kiểu cú pháp đầu ra. |
length |
short, medium, long |
Độ dài mục tiêu (ví dụ: 1 câu so với 5 câu). |
preference |
auto, speed, capability |
Cân bằng giữa độ trễ và chất lượng. |
Cấu hình mẫu
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);
}
Hỗ trợ ngôn ngữ
Bạn có thể chỉ định ngôn ngữ dự kiến để đảm bảo trình duyệt có thể xử lý yêu cầu tóm tắt cụ thể.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
Phương pháp tóm tắt
1. Tóm tắt hàng loạt
Xử lý toàn bộ văn bản cùng một lúc và trả về kết quả.
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. Tóm tắt luồng
Trả về kết quả theo thời gian thực khi mô hình tạo ra kết quả, mang lại giao diện người dùng thích ứng hơn.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
Tính bảo mật và quyền truy cập
- Quyền riêng tư đối với dữ liệu: Không có dữ liệu nào được gửi đến Google; quá trình xử lý diễn ra trên thiết bị cục bộ.
Khác nguồn gốc: Bạn có thể cấp quyền truy cập cho iframe bằng Chính sách quyền.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Worker: Hiện chưa được hỗ trợ.
Chiến lược dự phòng
Trước khi khởi chạy hoặc truy vấn khả năng hỗ trợ, hãy kiểm tra xem trình duyệt có hỗ trợ API Summarizer hay không:
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
Nếu API Summarizer không được hỗ trợ hoặc kết quả kiểm tra khả năng hỗ trợ trả về 'unavailable', thì bạn phải chuyển về trạng thái dự phòng một cách linh hoạt.
Lựa chọn được đề xuất:
- Dự phòng API từ xa: Chuyển hướng yêu cầu tóm tắt đến một điểm cuối máy chủ hoặc API từ xa (chẳng hạn như Vertex AI Gemini API) để người dùng vẫn nhận được bản tóm tắt.
- Xuống cấp nhẹ: Tắt các thành phần điều khiển tóm tắt trong giao diện người dùng hoặc ẩn nút trong khi hiển thị thông báo thân thiện (ví dụ:
"Local summarization is currently unsupported in this browser"). Không cho phép hoạt động tương tác kích hoạt các ngoại lệ thời gian chạy chung chưa được xử lý. - Polyfill dự phòng: Bạn có thể sử dụng polyfill do cộng đồng duy trì như
built-in-ai-task-apis-polyfillshoặcprompt-api-polyfillđể mô phỏng nền tảng API bằng các dịch vụ từ xa có mô hình trên đám mây hoặc suy luận trên thiết bị bằng mô hình cục bộ.
Ảnh hưởng đến quyền riêng tư và chi phí: Các polyfill này có thể gửi yêu cầu proxy đến máy chủ từ xa (chẳng hạn như Gemini API qua đám mây). Điều này hoàn toàn vô hiệu hoá các biện pháp đảm bảo quyền riêng tư trên thiết bị của API AI tích hợp sẵn gốc và sẽ làm phát sinh chi phí sử dụng API phía máy chủ.