Ngày xuất bản: 20 tháng 5 năm 2025, Lần cập nhật gần đây nhất: 21 tháng 10 năm 2026
| Video giải thích | Web | Phần mở rộng | Chrome Status | Mục đích |
|---|---|---|---|---|
| GitHub | Xem | Intent to Ship | ||
| GitHub | Xem | Intent to Experiment |
Với Prompt API, bạn có thể gửi yêu cầu bằng ngôn ngữ tự nhiên đến mô hình nền tảng trong Chrome.
Có nhiều cách để sử dụng Prompt API. Ví dụ: bạn có thể xây dựng:
- Tìm kiếm dựa trên AI: Trả lời câu hỏi dựa trên nội dung của một trang web.
- Nguồn cấp tin tức được cá nhân hoá: Tạo một nguồn cấp dữ liệu phân loại bài viết một cách linh động theo danh mục và cho phép người dùng lọc nội dung đó.
- Bộ lọc nội dung tuỳ chỉnh. Phân tích tin bài và tự động làm mờ hoặc ẩn nội dung dựa trên các chủ đề do người dùng xác định.
- Tạo sự kiện trên lịch. Phát triển một tiện ích Chrome có thể tự động trích xuất thông tin chi tiết về sự kiện từ các trang web, nhờ đó người dùng có thể tạo mục trong lịch chỉ sau vài bước.
- Trích xuất thông tin liên hệ một cách liền mạch. Xây dựng một tiện ích trích xuất thông tin liên hệ từ các trang web, giúp người dùng dễ dàng liên hệ với doanh nghiệp hoặc thêm thông tin chi tiết vào danh bạ của họ.
Đây chỉ là một vài gợi ý và chúng tôi rất mong được thấy những tác phẩm sáng tạo của bạn.
Xem các yêu cầu về phần cứng
Sau đây là các yêu cầu đối với nhà phát triển và người dùng sử dụng các tính năng dùng những API này trong Chrome. Các trình duyệt khác có thể có yêu cầu hoạt động khác.
API Trình phát hiện ngôn ngữ và API Trình dịch hoạt động trong Chrome trên máy tính. Các API này không hoạt động trên thiết bị di động.
Prompt API, Summarizer API, Writer API, Rewriter API và Proofreader API hoạt động trong Chrome khi đáp ứng các điều kiện sau:
- Hệ điều hành: Windows 10 hoặc 11; macOS 13 trở lên (Ventura trở lên); Linux; hoặc ChromeOS (từ Nền tảng 16389.0.0 trở lên) trên thiết bị Chromebook Plus. Chrome dành cho Android, iOS và ChromeOS trên các thiết bị không phải Chromebook Plus chưa được hỗ trợ bởi các API sử dụng mô hình nền tảng.
- Bộ nhớ: Ít nhất 22 GB dung lượng trống trên ổ đĩa chứa hồ sơ Chrome của bạn.
- GPU hoặc CPU: Các mô hình tích hợp sẵn có thể chạy bằng GPU hoặc CPU.
- GPU: VRAM lớn hơn 4 GB.
- CPU: RAM 16 GB trở lên và CPU 4 nhân trở lên.
- Lưu ý: Prompt API có đầu vào âm thanh cần có GPU.
- Mạng: Dữ liệu không giới hạn hoặc kết nối không đo lượng dữ liệu.
Kích thước chính xác của Gemini Nano có thể thay đổi khi trình duyệt cập nhật mô hình. Để xác định kích thước hiện tại, hãy truy cập vào chrome://on-device-internals.
Sử dụng Prompt API
Prompt API sử dụng mô hình Gemini Nano trong Chrome. Mặc dù API được tích hợp vào Chrome, nhưng mô hình này được tải xuống riêng biệt vào lần đầu tiên một nguồn gốc sử dụng API.
Để xác định xem mô hình đã sẵn sàng sử dụng hay chưa, hãy gọi LanguageModel.availability().
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
Để kích hoạt quá trình tải xuống và tạo thực thể cho mô hình ngôn ngữ, hãy kiểm tra hoạt động của người dùng. Sau đó, hãy gọi hàm create().
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Nếu phản hồi cho availability() là downloading, hãy theo dõi tiến trình tải xuống và thông báo cho người dùng vì quá trình tải xuống có thể mất thời gian.
Tạo phiên
Sau khi Prompt API có thể chạy, bạn sẽ tạo một phiên bằng hàm create().
const session = await LanguageModel.create();
Đối tượng tuỳ chọn không bắt buộc của hàm create() nhận một trường signal, cho phép bạn truyền một AbortSignal để huỷ phiên.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Tham số lấy mẫu
Việc kiểm soát việc lấy mẫu giúp bạn điều chỉnh mức độ dễ đoán (tất định) hoặc sáng tạo (đa dạng) của câu trả lời của mô hình. Phạm vi cung cấp các tham số lấy mẫu khác nhau giữa nền tảng web và tiện ích Chrome:
- Web: Sử dụng tuỳ chọn
samplingMode, tuỳ chọn này sử dụng các giá trị enum mô tả thay vì các số thô để điều chỉnh khả năng dự đoán đầu ra. - Tiện ích của Chrome: Các tham số số cũ (
topK,temperature) và phương thứcLanguageModel.params()được hỗ trợ.
Chế độ lấy mẫu trên web
Truyền tuỳ chọn samplingMode vào LanguageModel.create() (hoặc LanguageModel.availability()).
Sau đây là các giá trị enum samplingMode được hỗ trợ:
"most-predictable": Tính tất định và khả năng dự đoán cao nhất."predictable": Kết quả dễ đoán hơn và ít biến thiên hơn."slightly-predictable": Kết quả đầu ra có thể dự đoán được một chút."balanced": Cân bằng giữa khả năng dự đoán và khả năng sáng tạo (hành vi mặc định thông thường)."slightly-creative": Kết quả có đôi chút đa dạng và sáng tạo."creative": Kết quả sáng tạo và đa dạng."most-creative": Khả năng biến đổi và sáng tạo tối đa.
// Available on the web with the Sampling Parameters Origin Trial enabled
const session = await LanguageModel.create({
samplingMode: 'creative',
});
// The configured sampling mode is exposed on the session instance
console.log(session.samplingMode);
// "creative"
Tham số lấy mẫu cho tiện ích Chrome
Khi sử dụng Prompt API trong tiện ích Chrome, bạn vẫn có thể tuỳ chỉnh từng phiên bằng topK và temperature bằng đối tượng tuỳ chọn.
Hàm LanguageModel.params() tĩnh cho bạn biết giới hạn tham số mặc định và tối đa của mô hình ngôn ngữ:
defaultTopK: Giá trị top-K mặc định.maxTopK: Giá trị top-K tối đa.defaultTemperature: Nhiệt độ mặc định.maxTemperature: Nhiệt độ tối đa.
// Only available in Chrome Extensions
const params = await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
// Initializing a new session in extensions must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.min(params.defaultTemperature * 1.2, params.maxTemperature),
topK: params.defaultTopK,
});
console.log(slightlyHighTemperatureSession.temperature);
console.log(slightlyHighTemperatureSession.topK);
Thêm bối cảnh bằng câu lệnh ban đầu
Với câu lệnh ban đầu, bạn có thể cung cấp cho mô hình ngôn ngữ bối cảnh về các lượt tương tác trước đó, chẳng hạn như để cho phép người dùng tiếp tục một phiên đã lưu trữ sau khi khởi động lại trình duyệt.
const session = await LanguageModel.create({
initialPrompts: [
{ role: 'system', content: 'You are a helpful and friendly assistant.' },
{ role: 'user', content: 'What is the capital of Italy?' },
{ role: 'assistant', content: 'The capital of Italy is Rome.' },
{ role: 'user', content: 'What language is spoken there?' },
{
role: 'assistant',
content: 'The official language of Italy is Italian. [...]',
},
],
});
Giới hạn câu trả lời bằng một tiền tố
Bạn có thể thêm vai trò "assistant", ngoài các vai trò trước đó, để trình bày chi tiết
về các phản hồi trước đó của mô hình. Ví dụ:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
Trong một số trường hợp, thay vì yêu cầu một phản hồi mới, bạn có thể muốn điền sẵn một phần thông báo phản hồi của vai trò "assistant". Điều này có thể giúp hướng dẫn mô hình ngôn ngữ sử dụng một định dạng phản hồi cụ thể. Để thực hiện việc này, hãy thêm prefix: true vào tin nhắn có vai trò "assistant" ở cuối. Ví dụ:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Thêm dữ liệu đầu vào và đầu ra dự kiến
Prompt API có các chức năng đa phương thức và hỗ trợ nhiều ngôn ngữ. Đặt phương thức và ngôn ngữ expectedInputs và expectedOutputs khi tạo phiên.
type: Cần có phương thức.- Đối với
expectedInputs, giá trị này có thể làtext,imagehoặcaudio. - Đối với
expectedOutputs, Prompt API chỉ cho phéptext.
- Đối với
languages: Mảng để đặt ngôn ngữ hoặc các ngôn ngữ dự kiến. Prompt API chấp nhận"en","ja","es","de"và"fr". Chúng tôi đang phát triển tính năng hỗ trợ cho các ngôn ngữ khác.- Đối với
expectedInputs, hãy đặt ngôn ngữ câu lệnh hệ thống và một hoặc nhiều ngôn ngữ câu lệnh dự kiến của người dùng. - Đặt một hoặc nhiều ngôn ngữ
expectedOutputs.
- Đối với
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
Bạn có thể nhận được "NotSupportedError" DOMException nếu mô hình gặp phải dữ liệu đầu vào hoặc đầu ra không được hỗ trợ.
Khả năng đa phương thức
Với những tính năng này, bạn có thể:
- Cho phép người dùng chép lời tin nhắn thoại được gửi trong ứng dụng trò chuyện.
- Mô tả một hình ảnh được tải lên trang web của bạn để dùng làm chú thích hoặc văn bản thay thế.
Hãy xem bản minh hoạ Mediarecorder Audio Prompt để biết cách sử dụng Prompt API với dữ liệu đầu vào dạng âm thanh và bản minh hoạ Canvas Image Prompt để biết cách sử dụng Prompt API với dữ liệu đầu vào dạng hình ảnh.
Prompt API hỗ trợ các loại dữ liệu đầu vào sau:
- Âm thanh:
- Hình ảnh:
HTMLImageElementSVGImageElementHTMLVideoElement(sử dụng khung hình video tại vị trí video hiện tại)HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
Đoạn mã này cho thấy một phiên đa thức trước tiên xử lý hai hình ảnh (một hình ảnh Blob và một hình ảnh HTMLCanvasElement) và yêu cầu AI so sánh hai hình ảnh đó, sau đó cho phép người dùng phản hồi bằng bản ghi âm (dưới dạng AudioBuffer).
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en"] },
{ type: "audio" },
{ type: "image" },
],
expectedOutputs: [{ type: "text", languages: ["en"] }],
});
const referenceImage = await (await fetch("reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");
const response1 = await session.prompt([
{
role: "user",
content: [
{
type: "text",
value:
"Give a helpful artistic critique of how well the second image matches the first:",
},
{ type: "image", value: referenceImage },
{ type: "image", value: userDrawnImage },
],
},
]);
console.log(response1);
const audioBuffer = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBuffer },
],
},
]);
console.log(response2);
Thêm tin nhắn
Quá trình suy luận có thể mất một chút thời gian, đặc biệt là khi đặt câu lệnh bằng dữ liệu đầu vào đa phương thức. Bạn nên gửi trước các câu lệnh đã xác định để điền sẵn vào phiên, nhờ đó mô hình có thể bắt đầu xử lý sớm.
Mặc dù initialPrompts rất hữu ích khi tạo phiên, nhưng bạn có thể sử dụng phương thức append() cùng với phương thức prompt() hoặc promptStreaming() để đưa ra thêm câu lệnh theo bối cảnh sau khi tạo phiên.
Ví dụ:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
Lời hứa do append() trả về sẽ được thực hiện sau khi câu lệnh được xác thực,
xử lý và thêm vào phiên. Lời hứa sẽ bị từ chối nếu không thể thêm câu lệnh.
Truyền giản đồ JSON
Thêm trường responseConstraint vào phương thức prompt() hoặc promptStreaming() để truyền một Giản đồ JSON làm giá trị. Sau đó, bạn có thể sử dụng
kết quả có cấu trúc với
Prompt API.
Trong ví dụ sau, Giản đồ JSON đảm bảo mô hình phản hồi bằng true hoặc false để phân loại xem một thông báo nhất định có liên quan đến đồ gốm hay không.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
Quá trình triển khai của bạn có thể bao gồm Giản đồ JSON hoặc biểu thức chính quy trong thông báo được gửi đến mô hình. Việc này sẽ sử dụng một phần
cửa sổ ngữ cảnh. Bạn có thể đo lường mức sử dụng cửa sổ ngữ cảnh bằng cách truyền tuỳ chọn responseConstraint đến session.measureContextUsage().
Bạn có thể tránh hành vi này bằng tuỳ chọn omitResponseConstraintInput. Nếu làm vậy, bạn nên đưa một số hướng dẫn vào câu lệnh:
const result = await session.prompt(`
Summarize this feedback into a rating between 0-5. Only output a JSON
object { rating }, with a single property whose value is a number:
The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
Đưa ra câu lệnh cho mô hình
Bạn có thể nhắc mô hình bằng hàm prompt() hoặc promptStreaming().
Kết quả dựa trên yêu cầu
Nếu muốn nhận được kết quả ngắn, bạn có thể sử dụng hàm prompt() để trả về câu trả lời ngay khi có.
// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and wait for the whole result to come back.
const result = await session.prompt('Write me a poem!');
console.log(result);
}
Kết quả được truyền trực tuyến
Nếu muốn nhận được câu trả lời dài hơn, bạn nên sử dụng hàm promptStreaming() để hiển thị kết quả một phần khi kết quả đó được trả về từ mô hình. Hàm promptStreaming() trả về ReadableStream.
const available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and stream the result:
const stream = session.promptStreaming('Write me an extra-long poem!');
for await (const chunk of stream) {
console.log(chunk);
}
}
Dừng đặt câu lệnh
Cả prompt() và promptStreaming() đều chấp nhận tham số thứ hai không bắt buộc có trường signal, cho phép bạn dừng chạy câu lệnh.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
Quản lý phiên
Mỗi phiên sẽ theo dõi bối cảnh của cuộc trò chuyện. Các lượt tương tác trước đó sẽ được xem xét cho các lượt tương tác trong tương lai cho đến khi cửa sổ ngữ cảnh của phiên đầy.
Mỗi phiên có một số lượng mã thông báo tối đa mà phiên đó có thể xử lý. Kiểm tra tiến trình của bạn đối với hạn mức này bằng cách sau:
console.log(`${session.contextUsage}/${session.contextWindow}`);
Bạn có thể gửi một câu lệnh khiến cửa sổ ngữ cảnh bị tràn. Trong những trường hợp như vậy, các phần đầu của cuộc trò chuyện với mô hình ngôn ngữ sẽ bị xoá, mỗi lần một cặp câu lệnh và câu trả lời, cho đến khi có đủ mã thông báo để xử lý câu lệnh mới. Ngoại lệ là câu lệnh hệ thống, câu lệnh này không bao giờ bị xoá.
Bạn có thể phát hiện tình trạng tràn như vậy bằng cách theo dõi sự kiện contextoverflow trong phiên:
session.addEventListener("contextoverflow", () => {
console.log("We've gone past the context window, and some inputs will be dropped!");
});
Nếu không thể xoá đủ số lượng mã thông báo khỏi nhật ký trò chuyện để xử lý câu lệnh mới,
thì lệnh gọi prompt() hoặc promptStreaming() sẽ không thành công và có ngoại lệ QuotaExceededError
và không có gì bị xoá. QuotaExceededError có các thuộc tính sau:
requested: số lượng mã thông báo trong dữ liệu đầu vàocontextWindow: số lượng mã thông báo có sẵn
Tìm hiểu thêm về cách quản lý phiên.
Sao chép một phiên
Để duy trì tài nguyên, bạn có thể sao chép một phiên hiện có bằng hàm clone(). Thao tác này sẽ tạo một nhánh của cuộc trò chuyện, trong đó bối cảnh và câu lệnh ban đầu được giữ nguyên.
Hàm clone() nhận một đối tượng tuỳ chọn không bắt buộc có trường signal, cho phép bạn truyền AbortSignal để huỷ phiên được sao chép.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Chấm dứt một phiên
Gọi destroy() để giải phóng tài nguyên nếu bạn không cần phiên nữa. Khi một phiên bị huỷ, phiên đó sẽ không thể dùng được nữa và mọi quá trình thực thi đang diễn ra sẽ bị huỷ. Bạn nên duy trì phiên nếu dự định nhắc mô hình thường xuyên, vì việc tạo phiên có thể mất chút thời gian.
await session.prompt(
"You are a friendly, helpful assistant specialized in clothing choices."
);
session.destroy();
// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
"What should I wear today? It is sunny, and I am choosing between a t-shirt
and a polo."
);
Bản minh hoạ
Chúng tôi đã xây dựng nhiều bản minh hoạ để khám phá nhiều trường hợp sử dụng cho Prompt API. Sau đây là các bản minh hoạ ứng dụng web:
- Môi trường thử nghiệm Prompt API
- Lời nhắc âm thanh của Mediarecorder
- Câu lệnh để tạo hình ảnh trên Canvas
Để thử nghiệm Prompt API trong tiện ích Chrome, hãy cài đặt tiện ích minh hoạ. Mã nguồn của tiện ích có trên GitHub.
Chiến lược hiệu suất
Prompt API cho web vẫn đang được phát triển. Trong khi chúng tôi xây dựng API này, hãy tham khảo các phương pháp hay nhất của chúng tôi về quản lý phiên để đạt được hiệu suất tối ưu.
Chính sách về quyền, iframe và Web Worker
Theo mặc định, Prompt API chỉ dành cho các cửa sổ cấp cao nhất và iframe cùng nguồn gốc của các cửa sổ đó. Bạn có thể uỷ quyền truy cập vào API cho các iframe khác nguồn gốc bằng thuộc tính allow="" của Chính sách quyền:
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Prompt API by
setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
Prompt API hiện chưa có trong Web Worker do tính phức tạp của việc thiết lập một tài liệu có trách nhiệm cho mỗi worker để kiểm tra trạng thái tuân thủ chính sách về quyền.
Tham gia và chia sẻ ý kiến phản hồi
Ý kiến đóng góp của bạn có thể ảnh hưởng trực tiếp đến cách chúng tôi xây dựng và triển khai các phiên bản sau này của API này cũng như tất cả API AI tích hợp sẵn.
- Để gửi ý kiến phản hồi về việc triển khai Chrome, hãy gửi báo cáo lỗi hoặc yêu cầu về tính năng.
- Hãy chia sẻ ý kiến phản hồi của bạn về hình thức của API bằng cách bình luận về một vấn đề hiện có hoặc mở một vấn đề mới trong kho lưu trữ GitHub của Prompt API.
- Tham gia chương trình xem trước.