Dipublikasikan: 20 Mei 2025, Terakhir diperbarui: 21 September 2025
| Penjelasan | Web | Ekstensi | Status Chrome | Intent |
|---|---|---|---|---|
| GitHub | View | Intent to Ship | ||
| GitHub | View | Intent to Experiment |
Dengan Prompt API, Anda dapat mengirim permintaan bahasa alami ke Gemini Nano di browser.
Ada banyak cara untuk menggunakan Prompt API. Misalnya, Anda dapat membuat:
- Penelusuran yang didukung AI: Menjawab pertanyaan berdasarkan konten halaman web.
- Feed berita yang dipersonalisasi: Membuat feed yang mengklasifikasikan artikel secara dinamis dengan kategori dan memungkinkan pengguna memfilter konten tersebut.
- Filter konten kustom. Menganalisis artikel berita dan secara otomatis mengaburkan atau menyembunyikan konten berdasarkan topik yang ditentukan pengguna.
- Pembuatan acara kalender. Mengembangkan Ekstensi Chrome yang secara otomatis mengekstrak detail acara dari halaman web, sehingga pengguna dapat membuat entri kalender hanya dalam beberapa langkah.
- Ekstraksi kontak yang lancar. Membuat ekstensi yang mengekstrak informasi kontak dari situs, sehingga memudahkan pengguna menghubungi bisnis atau menambahkan detail ke daftar kontak mereka.
Ini hanyalah beberapa kemungkinan, dan kami sangat antusias untuk melihat apa yang Anda buat.
Meninjau persyaratan hardware
Persyaratan berikut berlaku untuk developer dan pengguna yang mengoperasikan fitur menggunakan API ini di Chrome. Browser lain mungkin memiliki persyaratan pengoperasian yang berbeda.
Language Detector dan Translator API berfungsi di Chrome di desktop. API ini tidak berfungsi di perangkat seluler.
The Prompt API, Summarizer API, Writer API, Rewriter API, dan Proofreader API berfungsi di Chrome jika kondisi berikut terpenuhi:
- Sistem operasi: Windows 10 atau 11; macOS 13+ (Ventura dan yang lebih baru); Linux; atau ChromeOS (dari Platform 16389.0.0 dan yang lebih baru) di Chromebook Plus perangkat. Chrome untuk Android, iOS, dan ChromeOS di perangkat non-Chromebook Plus belum didukung oleh API yang menggunakan Gemini Nano.
- Penyimpanan: Minimal 22 GB ruang kosong di volume yang berisi profil Chrome Anda.
- GPU atau CPU: Model bawaan dapat berjalan dengan GPU atau CPU.
- GPU: Lebih dari 4 GB VRAM.
- CPU: RAM 16 GB atau lebih dan 4 core CPU atau lebih.
- Catatan: Prompt API dengan input audio memerlukan GPU.
- Jaringan: Data tidak terbatas atau koneksi tidak berkuota. Koneksi Wi-Fi dan ethernet cenderung tidak berkuota secara default, sedangkan koneksi seluler sering kali berkuota.
Ukuran pasti Gemini Nano dapat bervariasi saat browser mengupdate model. Untuk menentukan ukuran saat ini, buka chrome://on-device-internals.
Menggunakan Prompt API
Prompt API menggunakan model Gemini Nano di Chrome. Meskipun API ini terintegrasi ke dalam Chrome, model akan didownload secara terpisah saat origin menggunakan API untuk pertama kalinya. Sebelum menggunakan API ini, Anda harus menyetujui Kebijakan Penggunaan Terlarang untuk AI Generatif Google.
Untuk menentukan apakah model siap digunakan, panggil
LanguageModel.availability().
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
Untuk memicu download dan membuat instance model bahasa, periksa untuk
aktivasi pengguna. Kemudian, panggil fungsi
create().
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Jika respons terhadap availability() adalah downloading, proses progres download dan beri tahu pengguna, karena download mungkin memerlukan waktu.
Parameter model
Fungsi params() memberi tahu Anda tentang parameter model bahasa. Objek ini memiliki kolom berikut:
defaultTopK: Nilai top-K default.maxTopK: Nilai top-K maksimum.defaultTemperature: Suhu default .maxTemperature: Suhu maksimum.
// Only available when using the Prompt API for Chrome Extensions.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
Membuat sesi
Setelah Prompt API dapat berjalan, Anda akan membuat sesi dengan fungsi create().
const session = await LanguageModel.create();
Membuat sesi dengan Prompt API untuk Ekstensi Chrome
Saat Anda menggunakan Prompt API untuk Ekstensi Chrome, setiap sesi dapat disesuaikan dengan topK dan temperature menggunakan objek opsi opsional. Nilai default untuk parameter ini ditampilkan dari LanguageModel.params().
// Only available when using the Prompt API for Chrome Extensions.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
// Only available when using the Prompt API for Chrome Extensions.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.defaultTopK,
});
Objek opsi opsional fungsi create() juga menggunakan kolom signal, yang memungkinkan Anda meneruskan AbortSignal untuk menghancurkan sesi.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Menambahkan konteks dengan perintah awal
Dengan perintah awal, Anda dapat memberikan konteks model bahasa tentang interaksi sebelumnya, misalnya, untuk memungkinkan pengguna melanjutkan sesi tersimpan setelah browser dimulai ulang.
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. [...]',
},
],
});
Membatasi respons dengan awalan
Anda dapat menambahkan peran "assistant", selain peran sebelumnya, untuk menguraikan
respons model sebelumnya. Contoh:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
Dalam beberapa kasus, Anda có thể muốn
điền trước một phần của thông báo phản hồi vai trò "assistant" thay vì yêu cầu phản hồi mới. Hal ini dapat membantu memandu model bahasa untuk menggunakan format respons tertentu. Untuk melakukannya, tambahkan
prefix: true ke pesan peran "assistant"- di akhir. Contoh:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Menambahkan input dan output yang diharapkan
Prompt API memiliki kemampuan multimodal dan
mendukung beberapa bahasa. Tetapkan modalitas dan bahasa expectedInputs dan expectedOutputs saat membuat sesi.
type: Modalitas yang diharapkan.- Untuk
expectedInputs, ini dapat berupatext,image, atauaudio. - Untuk
expectedOutputs, Prompt API hanya mengizinkantext.
- Untuk
languages: Array untuk menetapkan bahasa atau bahasa yang diharapkan. Prompt API menerima"en","ja", dan"es". Dukungan untuk bahasa lainnya sedang dalam pengembangan.- Untuk
expectedInputs, tetapkan bahasa perintah sistem dan satu atau beberapa bahasa perintah pengguna yang diharapkan. - Tetapkan satu atau beberapa bahasa
expectedOutputs.
- Untuk
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
Anda mungkin menerima "NotSupportedError" DOMException jika model menemukan
input atau output yang tidak didukung.
Kemampuan multimodal
Dengan kemampuan ini, Anda dapat:
- Mengizinkan pengguna mentranskripsikan pesan audio yang dikirim dalam aplikasi chat.
- Mendeskripsikan gambar yang diupload ke situs Anda untuk digunakan dalam teks keterangan atau teks alternatif.
Lihat demo Mediarecorder Audio Prompt untuk menggunakan Prompt API dengan input audio dan demo Canvas Image Prompt untuk menggunakan Prompt API dengan input gambar.
Prompt API mendukung jenis input berikut:
- Audio:
- Visual:
HTMLImageElementSVGImageElementHTMLVideoElement(menggunakan frame video pada posisi video saat ini)HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
Cuplikan ini menunjukkan sesi multimodal yang pertama-tama memproses dua visual (satu gambar Blob dan satu HTMLCanvasElement) dan membuat AI membandingkannya, dan yang kedua memungkinkan pengguna merespons dengan rekaman audio (sebagai 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);
Menambahkan pesan
Inferensi mungkin memerlukan waktu beberapa saat, terutama saat meminta dengan input multimodal. Sebaiknya kirim perintah yang telah ditentukan sebelumnya untuk mengisi sesi, sehingga model dapat memulai pemrosesan lebih awal.
Meskipun initialPrompts berguna saat membuat sesi, metode append() dapat digunakan selain metode prompt() atau promptStreaming() untuk memberikan perintah kontekstual tambahan setelah sesi dibuat.
Contoh:
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);
};
Promise yang ditampilkan oleh append() akan terpenuhi setelah perintah divalidasi, diproses, dan ditambahkan ke sesi. Promise ditolak jika perintah tidak dapat ditambahkan.
Meneruskan Skema JSON
Tambahkan kolom responseConstraint ke metode prompt() atau promptStreaming() untuk meneruskan Skema JSON sebagai nilai. Kemudian, Anda dapat menggunakan
output terstruktur dengan
Prompt API.
Dalam contoh berikut, Skema JSON memastikan model merespons dengan true atau false untuk mengklasifikasikan apakah pesan yang diberikan berkaitan dengan tembikar.
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
Implementasi Anda dapat menyertakan Skema JSON atau ekspresi reguler sebagai bagian dari pesan yang dikirim ke model. Hal ini menggunakan sebagian jendela
konteks. Anda dapat mengukur seberapa besar jendela konteks yang akan digunakan dengan meneruskan opsi responseConstraint ke session.measureContextUsage().
Anda dapat menghindari perilaku ini dengan opsi omitResponseConstraintInput. Jika melakukannya, sebaiknya sertakan beberapa panduan dalam perintah:
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 });
Meminta model
Anda dapat meminta model dengan fungsi prompt() atau promptStreaming().
Output berbasis permintaan
Jika mengharapkan hasil singkat, Anda dapat menggunakan fungsi prompt() yang menampilkan respons setelah tersedia.
// 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);
}
Output yang di-streaming
Jika mengharapkan respons yang lebih panjang, Anda harus menggunakan fungsi promptStreaming() yang memungkinkan Anda menampilkan hasil sebagian saat diterima dari model. Fungsi promptStreaming() menampilkan 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);
}
}
Menghentikan perintah
prompt() dan promptStreaming() menerima parameter kedua opsional dengan kolom signal, yang memungkinkan Anda menghentikan perintah yang sedang berjalan.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
Pengelolaan sesi
Setiap sesi melacak konteks percakapan. Interaksi sebelumnya dipertimbangkan untuk interaksi mendatang hingga jendela konteks sesi penuh.
Setiap sesi memiliki jumlah token maksimum yang dapat diproses. Periksa progres Anda terhadap batas ini dengan hal berikut:
console.log(`${session.contextUsage}/${session.contextWindow}`);
Anda dapat mengirim perintah yang menyebabkan jendela konteks meluap. Dalam kasus seperti itu, bagian awal percakapan dengan model bahasa akan dihapus, satu pasang perintah dan respons pada satu waktu, hingga token yang cukup tersedia untuk memproses perintah baru. Pengecualiannya adalah perintah sistem, yang tidak pernah dihapus.
Luapan tersebut dapat dideteksi dengan memproses peristiwa contextoverflow pada sesi:
session.addEventListener("contextoverflow", () => {
console.log("We've gone past the context window, and some inputs will be dropped!");
});
Jika tidak memungkinkan untuk menghapus token yang cukup dari histori percakapan untuk memproses perintah baru, panggilan prompt() atau promptStreaming() akan gagal dengan pengecualian QuotaExceededError dan tidak ada yang akan dihapus. QuotaExceededError memiliki properti berikut:
requested: jumlah token yang terdiri dari inputcontextWindow: jumlah token yang tersedia
Pelajari pengelolaan sesi lebih lanjut.
Membuat clone sesi
Untuk mempertahankan resource, Anda dapat menyalin sesi yang ada dengan fungsi clone(). Tindakan ini akan membuat fork percakapan, dengan konteks dan perintah awal dipertahankan.
Fungsi clone() menggunakan objek opsi opsional dengan kolom signal, yang memungkinkan Anda meneruskan AbortSignal untuk menghancurkan sesi yang di-clone.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Menghentikan sesi
Panggil destroy() untuk mengosongkan resource jika Anda tidak lagi memerlukan sesi. Saat sesi dihancurkan, sesi tersebut tidak dapat digunakan lagi, dan eksekusi yang sedang berlangsung akan dibatalkan. Anda mungkin ingin mempertahankan sesi jika sering meminta model, karena pembuatan sesi dapat memerlukan waktu beberapa saat.
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."
);
Demo
Kami telah membuat beberapa demo untuk mempelajari berbagai kasus penggunaan Prompt API. Demo berikut adalah aplikasi web:
Untuk menguji Prompt API di Ekstensi Chrome, instal ekstensi demo. Kode sumber ekstensi tersedia di GitHub.
Strategi performa
Prompt API untuk web masih dalam pengembangan. Saat kami membuat API ini, lihat praktik terbaik kami tentang pengelolaan sesi untuk performa yang optimal.
Kebijakan Izin, iframe, dan Web Worker
Secara default, Prompt API hanya tersedia untuk jendela tingkat atas dan iframe asal yang sama. Akses ke API dapat didelegasikan ke iframe lintas origin
menggunakan atribut Kebijakan Izin allow="":
<!--
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 saat ini tidak tersedia di Web Worker, karena kompleksitas dalam menetapkan dokumen yang bertanggung jawab untuk setiap pekerja guna memeriksa status kebijakan izin.
Berpartisipasi dan memberikan masukan
Input Anda dapat secara langsung memengaruhi cara kami membuat dan menerapkan versi mendatang dari API ini dan semua API AI bawaan.
- Untuk memberikan masukan tentang implementasi Chrome, ajukan laporan bug atau permintaan fitur.
- Bagikan masukan Anda tentang bentuk API dengan memberikan komentar pada Masalah yang ada atau dengan membuka masalah baru di repositori GitHub Prompt API.
- Bergabunglah dengan program pratinjau awal.