Dipublikasikan: 20 Mei 2025
Penjelasan | Web | Ekstensi | Status Chrome | Intent |
---|---|---|---|---|
GitHub | View | Niat untuk Bereksperimen |
Dengan Prompt API, Anda dapat mengirim permintaan bahasa alami ke Gemini Nano di browser.
Ada banyak cara untuk menggunakan Prompt API. Di aplikasi web atau situs, Anda dapat membuat:
- Penelusuran berteknologi AI: Menjawab pertanyaan berdasarkan konten halaman web.
- Feed berita yang dipersonalisasi: Buat feed yang secara dinamis mengklasifikasikan artikel dengan kategori dan memungkinkan pengguna memfilter konten tersebut.
Ini hanyalah beberapa kemungkinan, dan kami tidak sabar ingin segera melihat hasil kreasi 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 API dan Translator API berfungsi di Chrome di desktop. API ini tidak berfungsi di perangkat seluler. Prompt API, Summarizer API, Writer API, dan Rewriter API berfungsi di Chrome jika persyaratan berikut terpenuhi:
- Sistem operasi: Windows 10 atau 11; macOS 13+ (Ventura dan yang lebih baru); atau Linux. Chrome untuk Android, iOS, dan ChromeOS belum didukung oleh API yang menggunakan Gemini Nano.
- Penyimpanan: Minimal 22 GB di volume yang berisi profil Chrome Anda.
- GPU: Lebih dari 4 GB VRAM.
- Jaringan: Data tanpa batas atau koneksi tanpa kuota.
Ukuran persis Gemini Nano mungkin sedikit berbeda. Untuk mengetahui ukuran saat ini, buka
chrome://on-device-internals
dan buka Status model.
Buka Jalur file yang tercantum untuk menentukan ukuran model.
Menggunakan Prompt API
Sebelum menggunakan API ini, Anda harus menyetujui Kebijakan Penggunaan Terlarang untuk AI Generatif Google.
Ada dua fungsi yang tersedia untuk Anda di namespace LanguageModel
:
availability()
untuk memeriksa kemampuan model dan ketersediaannya.create()
untuk memulai sesi model bahasa.
Download model
Prompt API menggunakan model Gemini Nano di Chrome. Meskipun API ini dibuat ke dalam Chrome, model didownload secara terpisah saat pertama kali origin menggunakan API.
Untuk menentukan apakah model siap digunakan, panggil fungsi asinkron
LanguageModel.availability()
. Tindakan ini akan menampilkan salah satu respons berikut:
"unavailable"
berarti bahwa penerapan tidak mendukung opsi yang diminta, atau tidak mendukung perintah model bahasa sama sekali."downloadable"
berarti bahwa implementasi mendukung opsi yang diminta, tetapi harus mendownload sesuatu (misalnya, model bahasa itu sendiri, atau penyesuaian) sebelum dapat membuat sesi menggunakan opsi tersebut."downloading"
berarti bahwa implementasi mendukung opsi yang diminta, tetapi harus menyelesaikan operasi download yang sedang berlangsung sebelum dapat membuat sesi menggunakan opsi tersebut."available"
berarti implementasi mendukung opsi yang diminta tanpa memerlukan download baru.
Untuk memicu download model dan membuat sesi model bahasa, panggil fungsi
asinkron LanguageModel.create()
. Jika respons terhadap
availability()
adalah 'downloadable'
, sebaiknya dengarkan progres
download. Dengan cara ini, Anda dapat memberi tahu pengguna jika proses download memerlukan waktu.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Kemampuan model
Fungsi params()
memberi tahu Anda tentang parameter model bahasa. Objek memiliki kolom berikut:
defaultTopK
: Nilai top-K default (default:3
).maxTopK
: Nilai top-K maksimum (8
).defaultTemperature
: Temperatur default (1.0
). Nilai temperatur harus antara0.0
dan2.0
.maxTemperature
: Suhu maksimum.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
Membuat sesi
Setelah Prompt API dapat berjalan, Anda membuat sesi dengan fungsi create()
.
Anda dapat memberikan perintah ke model dengan fungsi prompt()
atau promptStreaming()
.
Menyesuaikan sesi Anda
Setiap sesi dapat disesuaikan dengan topK
dan temperature
menggunakan objek opsi
opsional. Nilai default untuk parameter ini ditampilkan dari
LanguageModel.params()
.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.defaultTopK,
});
Objek opsi opsional fungsi create()
juga mengambil kolom signal
,
yang memungkinkan Anda meneruskan AbortSignal
untuk menghentikan sesi.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Perintah awal
Dengan perintah awal, Anda dapat memberikan konteks tentang interaksi sebelumnya kepada model bahasa, 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 memberikan awalan
Anda dapat menambahkan peran "assistant"
baru, 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, alih-alih meminta respons baru, Anda mungkin ingin
mengisi sebagian 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 pesan tanpa meminta
Inferensi mungkin memerlukan waktu beberapa saat, terutama saat memberikan perintah dengan input multimodal. Anda dapat mengirimkan perintah yang telah ditentukan sebelumnya untuk mengisi sesi, 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 ditolak jika perintah tidak dapat ditambahkan.
Batas sesi
Sesi model bahasa tertentu memiliki jumlah maksimum token yang dapat diprosesnya. Anda dapat memeriksa penggunaan dan progres menuju batas tersebut menggunakan properti berikut pada objek sesi:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Persistensi sesi
Setiap sesi melacak konteks percakapan. Interaksi sebelumnya diperhitungkan untuk interaksi mendatang hingga jendela konteks sesi penuh.
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a friendly, helpful assistant specialized in clothing choices.',
},
],
});
const result1 = await session.prompt(
'What should I wear today? It is sunny. I am unsure between a t-shirt and a polo.',
);
console.log(result1);
const result2 = await session.prompt(
'That sounds great, but oh no, it is actually going to rain! New advice?',
);
console.log(result2);
Menyalin sesi
Untuk mempertahankan resource, Anda dapat meng-clone sesi yang ada dengan fungsi clone()
. Konteks percakapan direset, tetapi perintah awal tetap
utuh. Fungsi clone()
mengambil objek opsi opsional dengan kolom signal
, yang memungkinkan Anda meneruskan AbortSignal
untuk menghancurkan sesi yang dikloning.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Memberi perintah pada model
Anda dapat memberikan perintah ke model dengan fungsi prompt()
atau promptStreaming()
.
Output yang tidak di-streaming
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 { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
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()
menampilkan ReadableStream
.
const { defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
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 menjalankan 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,
});
Menghentikan sesi
Panggil destroy()
untuk membebaskan resource jika Anda tidak lagi memerlukan sesi. Jika
sesi dihancurkan, sesi tidak dapat digunakan lagi, dan eksekusi yang sedang berlangsung akan
dibatalkan. Anda mungkin ingin mempertahankan sesi jika Anda sering kali ingin meminta model karena pembuatan sesi dapat memakan waktu.
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 unsure between a
t-shirt and a polo."
);
Kemampuan multimodal
Prompt API mendukung input audio dan gambar dari Chrome Canary 138, untuk eksperimen lokal. API menampilkan output teks.
Dengan kemampuan ini, Anda dapat:
- Izinkan pengguna mentranskripsikan pesan audio yang dikirim dalam aplikasi chat.
- Jelaskan gambar yang diupload ke situs Anda untuk digunakan dalam teks atau teks alternatif.
const session = await LanguageModel.create({
// { type: "text" } is not necessary to include explicitly, unless
// you also want to include expected input languages for text.
expectedInputs: [{ type: 'audio' }, { type: 'image' }],
});
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 audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: 'user',
content: [
{ type: 'text', value: 'My response to your critique:' },
{ type: 'audio', value: audioBlob },
],
},
]);
Demo multimodal
Lihat demo Mediarecorder Audio Prompt untuk menggunakan Prompt API dengan input audio dan demo Canvas Image Prompt untuk menggunakan Prompt API dengan input gambar.
Strategi performa
Prompt API untuk web masih dalam pengembangan. Saat kami membangun API ini, lihat praktik terbaik kami tentang pengelolaan sesi untuk mendapatkan performa yang optimal.
Masukan
Masukan Anda membantu menginformasikan masa depan API ini dan peningkatan kualitas Gemini Nano. Hal ini bahkan dapat menghasilkan API tugas khusus (seperti API untuk transkripsi audio atau deskripsi gambar), sehingga kami dapat memenuhi kebutuhan Anda dan kebutuhan pengguna Anda.
Berpartisipasi dan memberikan masukan
Input Anda dapat secara langsung memengaruhi cara kami membangun dan menerapkan versi mendatang dari API ini dan semua API AI bawaan.
- Bergabung dengan program pratinjau awal.
- Untuk memberikan masukan tentang penerapan 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.
- Berpartisipasilah dalam upaya standarisasi dengan bergabung ke Web Incubator Community Group.