Chrome đã ổn định Prompt API: chạy AI trong trình duyệt, không cần khóa API
Từ Chrome 148 trên web và Chrome 138 trên tiện ích mở rộng, trang web có thể gọi mô hình Gemini Nano chạy ngay trên máy người dùng. Bài này tóm tắt mẫu kiểm tra, tạo phiên và phát trực tiếp, cùng những giới hạn cần kiểm tra trước khi đưa tính năng lên sản phẩm thật.
Mở đầu
Chrome đã đưa Prompt API vào trạng thái ổn định. Prompt API là giao diện lập trình cho phép trang web gọi mô hình ngôn ngữ ngay trong trình duyệt. Nhờ vậy, trang web có thể tóm tắt, phân loại hay viết lại văn bản mà không cần khóa API và không cần gửi dữ liệu lên máy chủ.
Mô hình đứng sau tính năng này là Gemini Nano. Chrome tải mô hình này một lần rồi dùng chung cho nhiều trang. Người dùng không trả tiền theo từng token, vì không có hóa đơn từ nhà cung cấp mô hình.
Điểm hấp dẫn nhất cũng là điểm dễ gây hiểu lầm nhất. Tính năng chỉ chạy khi máy người dùng đủ điều kiện và mô hình đã có sẵn. Nếu thiếu bước kiểm tra, nút AI trên trang sẽ thành nút chết với một phần người dùng.
Chrome 138, Chrome 148 và cái tên LanguageModel
Bản đồ ổn định theo tài liệu chính thức của Chrome như sau:
| Giao diện | Tiện ích mở rộng | Trang web |
|---|---|---|
| Prompt API (LanguageModel) | Ổn định từ Chrome 138 | Ổn định từ Chrome 148 |
| Summarizer, Translator, Language Detector | Ổn định từ Chrome 138 | Ổn định từ Chrome 138 |
| Writer, Rewriter, Proofreader | Đang phát triển | Đang phát triển |
Cái tên hiện tại của giao diện là LanguageModel. Các ví dụ cũ dùng window.ai thuộc bản xem trước năm 2024 và sẽ báo lỗi. Với tiện ích mở rộng, cần gỡ quyền thử nghiệm nguồn gốc đã hết hạn khỏi tệp khai báo. Tài liệu chính thức nhắc riêng điểm này, vì quyền cũ còn sót lại rất dễ bị bỏ qua.
Mẫu dùng đúng: kiểm tra trước, rồi mới tạo phiên
Nhịp dùng đúng gồm ba bước: kiểm tra, tạo phiên, rồi phát trực tiếp kết quả. Đoạn mã dưới đây chạy được ngay trong bảng điều khiển của trang HTTPS trên Chrome 148 trở lên. Nó cũng chạy trong service worker của tiện ích mở rộng trên Chrome 138 trở lên.
// prompt-api-pattern.js — Chrome 148+ trên web, Chrome 138+ trên tiện ích mở rộng
async function askOnDevice(question, onToken = console.log) {
const options = {
expectedInputs: [{ type: 'text', languages: ['en'] }],
expectedOutputs: [{ type: 'text', languages: ['en'] }]
};
if (!('LanguageModel' in self)) return { source: 'fallback' };
const status = await LanguageModel.availability(options);
if (status === 'unavailable') return { source: 'fallback' };
const session = await LanguageModel.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress',
e => console.log(`Model: ${Math.round(e.loaded * 100)}%`));
}
});
let text = '';
const stream = session.promptStreaming(question);
for await (const chunk of stream) { text += chunk; onToken(chunk); }
session.destroy();
return { source: 'on-device', text };
}
Hàm này trả về nguồn đã dùng, dù là trên máy hay đường lui. Nhờ vậy, mã gọi hàm luôn biết tính năng chạy ở đâu. Đây là chi tiết nhỏ nhưng quyết định khả năng gỡ lỗi sau này.
Ba lỗi dễ gặp nhất
Lỗi thứ nhất là kiểm tra khả dụng bằng một bộ tùy chọn khác với bộ tùy chọn khi tạo phiên. Một số mô hình không hỗ trợ mọi loại đầu vào hay mọi ngôn ngữ. Vì vậy, availability chỉ có nghĩa khi dùng đúng bộ tùy chọn sẽ dùng thật. Hãy truyền cùng một đối tượng options cho cả hai lần gọi.
Lỗi thứ hai nằm ở cách đọc luồng phát trực tiếp. Mỗi đoạn chunk hiện nay chỉ là phần mới, không phải toàn bộ văn bản tích lũy. Cách viết đúng là cộng dồn, tức là text += chunk. Cách viết cũ gán trực tiếp, tức là text = chunk, sẽ làm mất mọi đoạn trước đó. Các hướng dẫn viết trước tháng 4 năm 2025 vẫn còn dùng cách cũ, nên cần kiểm tra dòng này đầu tiên khi sao chép mã cũ.
Lỗi thứ ba là tạo phiên mà không xử lý việc tải mô hình. Lần gọi đầu tiên có thể bắt đầu tải mô hình, và việc tải cần người dùng tương tác trước. Giao diện nên hiển thị tiến trình tải thay vì đứng yên. Khi availability trả về downloadable, create sẽ bắt đầu tải. Khi máy không đủ điều kiện, tính năng phải chuyển sang đường lui, chứ không được báo lỗi khó hiểu.
Những giới hạn cần nói rõ trước khi giao hàng
Ngôn ngữ hỗ trợ hiện chỉ gồm tiếng Anh, tiếng Nhật, tiếng Tây Ban Nha, tiếng Đức và tiếng Pháp. Đầu vào có thể là văn bản, hình ảnh hay âm thanh. Đầu ra vẫn chỉ là văn bản, và không có ràng buộc lược đồ cho đầu ra. Mã ứng dụng phải tự kiểm tra định dạng kết quả trước khi dùng.
Yêu cầu phần cứng cũng cần nói thẳng. Tài liệu chính thức yêu cầu ít nhất 22 GB trống trên ổ chứa hồ sơ Chrome. Máy cần GPU có hơn 4 GB bộ nhớ video, hoặc CPU có ít nhất 16 GB RAM và 4 nhân. Tính năng chưa hỗ trợ trên điện thoại Android và iOS. Trên ChromeOS, nó chỉ chạy trên thiết bị Chromebook Plus.
Cách chỉnh độ ngẫu nhiên cũng khác nhau giữa web và tiện ích mở rộng. Trên web, theo mặc định, Prompt API không cho chỉnh temperature hay topK. Muốn chỉnh, cần tham gia thử nghiệm nguồn gốc với tùy chọn samplingMode. Trên tiện ích mở rộng, hai tham số cũ là topK và temperature vẫn dùng được. Đừng giả định mã chạy trên tiện ích mở rộng sẽ chạy y hệt trên web.
Một phiên dùng xong nên được hủy bằng session.destroy. Phiên mở lâu sẽ giữ bộ nhớ. Đây là lỗi nhỏ, nhưng nó tích lũy theo số lần người dùng bấm nút.
Kiểm tra trong ba bước trước khi phát hành
Bước một là mở chrome://on-device-internals để xác nhận mô hình đã có và xem kích thước hiện tại. Bước hai là bật chế độ máy bay sau khi mô hình đã tải xong. Tính năng phải chạy được khi ngoại tuyến, vì đó chính là lời hứa của nó. Bước ba là đo thời gian tới token đầu tiên trên máy yếu, không phải trên máy mạnh của người phát triển. Độ trễ trên máy yếu mới là trải nghiệm thật của người dùng.
Khi nào nên dùng, khi nào nên giữ máy chủ
Mô hình trong trình duyệt là mô hình đa năng, không phải mô hình tinh chỉnh riêng cho sản phẩm. Nó tóm tắt tốt một vé hỗ trợ và soạn tốt một bản nháp trả lời. Nó không biết danh mục sản phẩm của riêng bạn. Tính năng cần dữ liệu riêng vẫn cần máy chủ.
Mẫu lành mạnh là chia việc rõ ràng. Trình duyệt xử lý việc văn bản riêng tư và cần phản hồi nhanh. Máy chủ xử lý việc cần kiến thức riêng của sản phẩm. Khi đường lui bật lên, dữ liệu sẽ đi theo hai đường khác nhau. Thông báo quyền riêng tư phải mô tả cả hai đường, chứ không chỉ đường chạy trên máy.
Quyết định cuối cùng có thể gói trong một quy tắc đơn giản. Nếu tính năng cần dữ liệu riêng của sản phẩm, hãy giữ máy chủ. Nếu tính năng xử lý văn bản riêng tư và cần phản hồi nhanh, hãy thử Prompt API với đường lui đầy đủ.
Nguồn tham khảo
- Chrome for Developers, tài liệu chính thức về Prompt API: https://developer.chrome.com/docs/ai/prompt-api
- Chrome for Developers, tổng quan về AI tích hợp sẵn: https://developer.chrome.com/docs/ai/get-started
- Kenyalba, hướng dẫn về Prompt API ổn định trên DEV Community: https://dev.to/kenyalba/chromes-prompt-api-is-stable-on-device-ai-for-your-website-no-api-key-and-no-per-token-bill-555e