Prompt API

Dipublikasikan: 20 Mei 2025, Terakhir diperbarui: 21 September 2025

Penjelasan Web Ekstensi Status Chrome Intent
GitHub Uji coba origin Di Uji coba origin Chrome 138 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. Misalnya, 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.
  • 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. Buat 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 tidak sabar ingin 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 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 Gemini Nano.
  • Penyimpanan: Minimal 22 GB ruang kosong di volume yang berisi profil Chrome Anda.
  • GPU: Lebih dari 4 GB VRAM.
  • Jaringan: Data tanpa batas atau koneksi tanpa kuota.

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 dibuat ke dalam Chrome, model didownload secara terpisah saat pertama kali origin menggunakan API. Sebelum Anda menggunakan API ini, baca dan setujui Kebijakan Penggunaan Terlarang untuk AI Generatif Google.

Untuk menentukan apakah model siap digunakan, panggil LanguageModel.availability().

const availability = await LanguageModel.availability();

Sebelum model dapat didownload, harus ada interaksi pengguna, seperti klik, ketuk, atau penekanan tombol.

Jika responsnya adalah downloadable atau downloading, model dan API tersedia, tetapi harus didownload sebelum Anda dapat menggunakan fitur tersebut. Pengguna harus berinteraksi dengan halaman (seperti klik, ketuk, atau penekanan tombol) agar download diizinkan.

Untuk mendownload dan membuat instance model, 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.

Parameter model

Fungsi params() memberi tahu Anda tentang parameter model bahasa. Objek memiliki kolom berikut:

  • defaultTopK: Nilai top-K default.
  • maxTopK: Nilai top-K maksimum.
  • defaultTemperature: Suhu default.
  • maxTemperature: Suhu maksimum.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

Membuat sesi

Setelah Prompt API dapat berjalan, Anda membuat sesi dengan fungsi create().

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,
});

Menambahkan konteks dengan 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 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, 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 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 berupa text, image, atau audio.
    • Untuk expectedOutputs, Prompt API hanya mengizinkan text.
  • languages: Array untuk menetapkan bahasa yang diharapkan. Prompt API menerima "en", "ja", dan "es". Dukungan untuk bahasa lainnya sedang dikembangkan.
    • Untuk expectedInputs, tetapkan bahasa perintah sistem dan satu atau beberapa bahasa perintah pengguna yang diharapkan.
    • Tetapkan satu atau beberapa bahasa expectedOutputs.
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 dalam aplikasi chat.
  • Jelaskan 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.

Menambahkan pesan

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.

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 JSON Schema atau ekspresi reguler sebagai bagian dari pesan yang dikirim ke model. Tindakan ini menggunakan sebagian kuota input. Anda dapat mengukur seberapa banyak kuota input yang akan digunakan dengan meneruskan opsi responseConstraint ke session.measureInputUsage().

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 });

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);
  }
}

Berhenti memberikan perintah

prompt() dan promptStreaming() menerima parameter kedua opsional dengan kolom signal, yang memungkinkan Anda menghentikan 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 dalam mencapai batas ini dengan cara berikut:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Pelajari lebih lanjut pengelolaan sesi.

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,
});

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 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. Selama kami membangun API ini, lihat praktik terbaik kami tentang pengelolaan sesi untuk mendapatkan performa yang optimal.

Permission Policy, iframe, dan Web Worker

Secara default, Prompt API hanya tersedia untuk jendela tingkat teratas dan iframe yang memiliki origin 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 belum tersedia di Web Workers untuk saat ini, karena kompleksitas 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 membangun dan menerapkan versi mendatang dari API ini dan semua API AI bawaan.