Prompt API

Dipublikasikan: 11 November 2024

Penjelasan Web Ekstensi Status Chrome Intent
GitHub Eksperimental Di EPP Di balik tanda Uji coba Origin Tidak berlaku Tidak berlaku

Dengan Prompt API, Anda dapat mengirim permintaan bahasa alami ke Gemini Nano di browser.

Prompt API tersedia dalam uji coba origin untuk Ekstensi Chrome. Developer web dapat menggunakan API eksplorasi, yang ditujukan untuk membuat prototipe dan menemukan kasus penggunaan tambahan, dengan bergabung ke program pratinjau awal.

Ada banyak cara untuk menggunakan Prompt API di Ekstensi Chrome. Contoh:

  • Acara kalender instan. 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. Buat ekstensi yang mengekstrak informasi kontak dari situs, sehingga memudahkan pengguna untuk menghubungi bisnis atau menambahkan detail ke daftar kontak mereka.
  • Pemfilteran konten dinamis. Buat Ekstensi Chrome yang menganalisis artikel berita dan secara otomatis memburamkan atau menyembunyikan konten berdasarkan topik yang ditentukan pengguna.

Ini hanyalah beberapa kemungkinan, tetapi kami ingin segera melihat karya Anda.

Mulai

Untuk menggunakan Prompt API di Ekstensi Chrome, tambahkan izin "aiLanguageModelOriginTrial" ke manifest.json Ekstensi, beserta izin lain yang mungkin diperlukan ekstensi Anda.

{
  "manifest_version": 3,
  "name": "YOUR_EXTENSION_NAME",
  "key": "YOUR_EXTENSION_KEY",
  "permissions": ["aiLanguageModelOriginTrial"]
}

Tindakan ini akan memberikan izin sementara, yang hanya berlaku selama durasi uji coba origin. Jika API diluncurkan, Anda harus mengupdate dan mengupload ulang ekstensi, menghapus izin yang telah berakhir masa berlakunya dan menggantinya dengan izin akhir.

Selain itu, sebaiknya Anda mempertahankan ID Ekstensi yang konsisten dengan menambahkan properti key ke manifes

Bergabung dengan uji coba asal

Untuk menambahkan Prompt API ke Ekstensi Chrome:

  1. Bergabunglah dengan uji coba origin Prompt API, yang berjalan di Chrome 131 hingga 136.
  2. Gunakan URL ekstensi Anda chrome-extension://YOUR_EXTENSION_ID sebagai Asal Web. Contohnya, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

  3. Perbarui manifes untuk menambahkan token uji coba sebagai array.

    {
      "manifest_version": 3,
      "name": "YOUR_EXTENSION_NAME",
      "key": "YOUR_EXTENSION_KEY",
      "permissions": ["aiLanguageModelOriginTrial"],
      "trial_tokens": ["GENERATED_TOKEN"],
    }
    

Menggunakan Prompt API di Ekstensi

Setelah meminta izin untuk menggunakan Prompt API, Anda dapat mem-build ekstensi. Ada dua fungsi ekstensi yang tersedia untuk Anda di namespace chrome.aiOriginTrial.languageModel:

  • capabilities() untuk memeriksa kemampuan model dan apakah tersedia.
  • create() untuk memulai sesi model bahasa.

Download model

Prompt API menggunakan model Gemini Nano di Chrome. Meskipun API di-build ke dalam Chrome, model didownload secara terpisah saat pertama kali ekstensi menggunakan API.

Untuk menentukan apakah model siap digunakan, panggil fungsi chrome.aiOriginTrial.languageModel.capabilities() asinkron. API ini menampilkan objek AILanguageModelCapabilities dengan kolom available yang dapat mengambil tiga kemungkinan nilai:

  • 'no': Browser saat ini mendukung Prompt API, tetapi tidak dapat digunakan saat ini. Hal ini dapat terjadi karena beberapa alasan, seperti kapasitas disk yang tidak memadai untuk mendownload model.
  • 'readily': Browser saat ini mendukung Prompt API, dan dapat langsung digunakan.
  • 'after-download': Browser saat ini mendukung Prompt API, tetapi harus mendownload model terlebih dahulu.

Untuk memicu download model dan membuat sesi model bahasa, panggil fungsi chrome.aiOriginTrial.languageModel.create() asinkron. Jika respons untuk capabilities() adalah 'after-download', praktik terbaiknya adalah memproses progres download. Dengan cara ini, Anda dapat memberi tahu pengguna jika download memerlukan waktu.

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

Kemampuan model

Fungsi capabilities() juga memberi tahu Anda tentang kemampuan model bahasa. Selain available, objek AILanguageModelCapabilities yang dihasilkan juga memiliki kolom berikut:

  • defaultTopK: Nilai top-K default (default: 3).
  • maxTopK: Nilai top-K maksimum (8).
  • defaultTemperature: Suhu default (1.0). Nilai suhu harus antara 0.0 dan 2.0.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Membuat sesi

Setelah memastikan Prompt API dapat berjalan, Anda membuat sesi dengan fungsi create(), yang kemudian memungkinkan Anda meminta model dengan fungsi prompt() atau promptStreaming().

Menyesuaikan sesi

Setiap sesi dapat disesuaikan dengan topK dan temperature menggunakan objek opsi opsional. Nilai default untuk parameter ini ditampilkan dari chrome.aiOriginTrial.languageModel.capabilities().

const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
  temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
  topK: capabilities.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 chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
Perintah sistem

Dengan perintah sistem, Anda dapat memberikan beberapa konteks kepada model bahasa.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

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 chrome.aiOriginTrial.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. [...]' }
  ]
});

Batas sesi

Sesi model bahasa tertentu memiliki jumlah maksimum token yang dapat diproses. Anda dapat memeriksa penggunaan dan progres menuju batas tersebut menggunakan properti berikut di objek sesi:

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

Persistensi sesi

Setiap sesi melacak konteks percakapan. Interaksi sebelumnya diperhitungkan untuk interaksi mendatang hingga jendela konteks sesi penuh.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: '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);

Meng-clone sesi

Untuk mempertahankan resource, Anda dapat meng-clone sesi yang ada dengan fungsi clone(). Konteks percakapan direset, tetapi perintah awal atau perintah sistem akan tetap utuh. 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,
});

Meminta model

Anda dapat meminta model dengan fungsi prompt() atau promptStreaming().

Output non-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 {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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 streaming

Jika mengharapkan respons yang lebih lama, Anda harus menggunakan fungsi promptStreaming() yang memungkinkan Anda menampilkan hasil sebagian saat masuk dari model.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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);
  }
}

promptStreaming() menampilkan ReadableStream yang potongannya secara berurutan disusun satu sama lain. Misalnya, "Hello,", "Hello world,", "Hello world I am,", "Hello world I am an AI.". Ini bukan perilaku yang dimaksudkan. Kami ingin selaras dengan API streaming lainnya di platform, dengan bagian adalah bagian berurutan dari satu streaming panjang. Artinya, output akan berupa urutan seperti "Hello", " world", " I am", " an AI".

Untuk saat ini, untuk mencapai perilaku yang diinginkan, Anda dapat menerapkan hal berikut. Hal ini berfungsi dengan perilaku standar dan non-standar.

let result = '';
let previousChunk = '';

for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

Menghentikan perintah yang berjalan

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 mengosongkan resource jika Anda tidak lagi memerlukan sesi. Jika dihancurkan, sesi tidak dapat digunakan lagi, dan eksekusi yang sedang berlangsung akan dibatalkan. Anda dapat menyimpan sesi jika ingin sering meminta model karena pembuatan sesi dapat memerlukan 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.'
);

Demo

Untuk menguji Prompt API di Ekstensi Chrome, instal ekstensi demo. Kode sumber ekstensi tersedia di GitHub.

Antarmuka demo untuk Prompt API

Berpartisipasi dan memberikan masukan

Mulai uji Prompt API sekarang di Ekstensi Chrome Anda dengan bergabung ke uji coba origin dan berikan masukan Anda. Input Anda dapat langsung memengaruhi cara kami mem-build dan menerapkan versi mendatang API ini, dan semua API AI bawaan.