Dipublikasikan: 20 Mei 2025, Terakhir diperbarui: 21 Oktober 2026
| Penjelasan | Web | Ekstensi | Status Chrome | Intent |
|---|---|---|---|---|
| GitHub | View | Intent to Ship | ||
| GitHub | View | Niat untuk Bereksperimen |
Dengan Prompt API, Anda dapat mengirim permintaan bahasa alami ke model dasar di Chrome.
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: Buat feed yang mengklasifikasikan artikel secara dinamis dengan kategori dan memungkinkan pengguna memfilter konten tersebut.
- Filter konten kustom. Menganalisis artikel berita dan otomatis memburamkan atau menyembunyikan konten berdasarkan topik yang ditentukan pengguna.
- Pembuatan acara kalender. Kembangkan Ekstensi Chrome yang otomatis mengekstrak detail acara dari halaman web, sehingga pengguna dapat membuat entri kalender hanya dalam beberapa langkah.
- Ekstraksi kontak yang lancar. Bangun ekstensi yang mengekstrak informasi kontak dari situs, sehingga memudahkan pengguna untuk menghubungi bisnis atau menambahkan detail ke daftar kontak mereka.
Ini hanyalah beberapa kemungkinan, dan kami sangat menantikan karya Anda.
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.
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 perangkat Chromebook Plus. Chrome untuk Android, iOS, dan ChromeOS di perangkat non-Chromebook Plus belum didukung oleh API yang menggunakan model dasar.
- Penyimpanan: Minimal 22 GB ruang kosong pada 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 tanpa batas atau koneksi tanpa kuota.
Ukuran pasti Gemini Nano dapat bervariasi seiring 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 sudah ada di Chrome, modelnya didownload secara terpisah saat origin pertama kali menggunakan API ini.
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
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, dengarkan
progres download dan beri tahu pengguna,
karena download mungkin memerlukan waktu.
Membuat sesi
Setelah Prompt API dapat berjalan, Anda membuat sesi dengan fungsi create().
const session = await LanguageModel.create();
Objek opsi opsional fungsi create() 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,
});
Parameter sampling
Dengan mengontrol pengambilan sampel, Anda dapat menyesuaikan seberapa dapat diprediksi (deterministik) atau kreatif (bervariasi) respons model. Ketersediaan parameter pengambilan sampel berbeda antara platform web dan Ekstensi Chrome:
- Web: Gunakan opsi
samplingMode, yang menggunakan nilai enum deskriptif, bukan angka mentah untuk menyesuaikan prediktabilitas output. - Ekstensi Chrome: Parameter numerik lama (
topK,temperature) dan metodeLanguageModel.params()didukung.
Mode pengambilan sampel web
Teruskan opsi samplingMode ke LanguageModel.create() (atau
LanguageModel.availability()).
Nilai enum samplingMode yang didukung adalah:
"most-predictable": Determinisme dan prediktabilitas tertinggi."predictable": Output yang lebih dapat diprediksi dengan variasi minimal."slightly-predictable": Output yang sedikit dapat diprediksi."balanced": Keseimbangan antara prediktabilitas dan kreativitas (perilaku default standar)."slightly-creative": Output yang sedikit bervariasi dan kreatif."creative": Output yang kreatif dan bervariasi."most-creative": Variabilitas dan kreativitas maksimum.
// 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"
Parameter sampling untuk Ekstensi Chrome
Saat menggunakan Prompt API di Ekstensi Chrome, setiap sesi masih dapat
disesuaikan dengan topK dan temperature menggunakan objek opsi.
Fungsi LanguageModel.params() statis memberi tahu Anda batas parameter default dan maksimum model bahasa:
defaultTopK: Nilai top-K default.maxTopK: Nilai top-K maksimum.defaultTemperature: Suhu default.maxTemperature: Suhu maksimum.
// 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);
Menambahkan konteks dengan perintah awal
Dengan perintah awal, Anda dapat memberikan konteks kepada model bahasa tentang interaksi sebelumnya, misalnya, untuk memungkinkan pengguna melanjutkan sesi yang disimpan 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, daripada meminta respons baru, Anda mungkin ingin
mengisi otomatis bagian dari pesan respons peran "assistant". Hal ini dapat membantu
mengarahkan 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 yang diharapkan. Prompt API menerima"en","ja","es","de", dan"fr". 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:
- Izinkan pengguna mentranskripsikan pesan audio yang dikirim di aplikasi chat.
- Menjelaskan gambar yang diupload ke situs Anda untuk digunakan dalam teks 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 di posisi video saat ini)HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
Cuplikan ini menunjukkan sesi multimodal yang pertama-tama memproses dua visual (satu
gambar Blob dan satu HTMLCanvasElement) dan meminta 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 memberikan perintah dengan input multimodal. Mengirim perintah yang telah ditentukan sebelumnya untuk mengisi sesi dapat berguna, sehingga model dapat memulai pemrosesan lebih awal.
Meskipun initialPrompts berguna saat pembuatan 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 akan 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 tertentu membahas 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. Tindakan ini menggunakan sebagian
jendela konteks. Anda dapat mengukur seberapa banyak jendela konteks
yang akan digunakan dengan meneruskan opsi responseConstraint ke
session.measureContextUsage().
Anda dapat menghindari perilaku ini dengan opsi omitResponseConstraintInput. Jika
Anda 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 });
Memberikan perintah ke model
Anda dapat memberikan perintah kepada model dengan fungsi prompt() atau promptStreaming().
Output berbasis permintaan
Jika Anda mengharapkan hasil yang 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 Anda mengharapkan respons yang lebih panjang, Anda harus menggunakan fungsi promptStreaming()
yang memungkinkan Anda menampilkan hasil parsial saat hasil tersebut masuk dari model. Fungsi
promptStreaming() akan 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);
}
}
Berhenti membuat perintah
prompt() dan promptStreaming() menerima parameter kedua opsional dengan
kolom signal, yang memungkinkan Anda berhenti menjalankan perintah.
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 diperhitungkan untuk interaksi mendatang hingga jendela konteks sesi penuh.
Setiap sesi memiliki jumlah maksimum token 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 ini, bagian awal percakapan dengan model bahasa akan dihapus, satu pasangan perintah dan respons pada satu waktu, hingga tersedia cukup token untuk memproses perintah baru. Pengecualiannya adalah perintah sistem, yang tidak pernah dihapus.
Overflow 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 ada dalam inputcontextWindow: jumlah token yang tersedia
Pelajari lebih lanjut pengelolaan sesi.
Meng-clone sesi
Untuk menghemat resource, Anda dapat menyalin sesi yang ada dengan fungsi clone(). Tindakan ini akan membuat percabangan percakapan, dengan konteks dan perintah awal yang 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 Anda berniat untuk sering memberikan perintah kepada
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 dikembangkan. Selagi kami membangun 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 teratas dan iframe dengan asal yang sama. Akses ke API dapat didelegasikan ke iframe lintas origin
menggunakan atribut allow="" Kebijakan Izin:
<!--
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 pembuatan dokumen yang bertanggung jawab untuk setiap worker guna memeriksa status kebijakan izin.
Berpartisipasi dan memberikan masukan
Masukan Anda dapat langsung memengaruhi cara kami membangun dan menerapkan versi mendatang dari API ini dan semua API AI bawaan.
- Untuk memberikan masukan tentang penerapan Chrome, ajukan laporan bug atau permintaan fitur.
- Sampaikan masukan Anda tentang bentuk API dengan mengomentari Masalah yang ada atau dengan membuka Masalah baru di repositori GitHub Prompt API.
- Bergabunglah dengan program pratinjau awal.