Dipublikasikan: 11 November 2024
Prompt API untuk Ekstensi kini tersedia dalam uji coba origin, sehingga Anda dapat mem-build Ekstensi Chrome yang menggunakan Gemini Nano, model bahasa kami yang paling efisien, di browser.
Ada banyak kasus penggunaan untuk Prompt API dengan Ekstensi Chrome. Berikut beberapa contohnya:
- Acara kalender instan. Kembangkan 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 mempermudah 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 kreasi Anda.
Ketersediaan
- Ikuti uji coba origin Prompt API,
yang berjalan di Chrome 131 hingga 136, untuk membuat Ekstensi dengan API ini. Jika Anda
baru menggunakan uji coba origin, ini adalah
program terbatas waktu yang terbuka untuk semua developer, yang menawarkan akses awal ke
fitur platform eksperimental. Developer dapat menguji, mengumpulkan masukan pengguna,
dan melakukan iterasi untuk peluncuran mendatang.
- Meskipun mungkin ada batas penggunaan, Anda dapat mengintegrasikan fitur ini untuk pengujian langsung dan mengumpulkan masukan pengguna. Tujuannya adalah untuk menginformasikan iterasi API ini di masa mendatang, karena kami berupaya untuk meningkatkan ketersediaannya.
- Bergabunglah dengan program pratinjau awal untuk melihat sekilas API AI bawaan baru dan akses ke diskusi di mailing list kami.
Berpartisipasi dalam uji coba asal
Untuk menggunakan Prompt API di Ekstensi Chrome, tambahkan izin "aiLanguageModelOriginTrial"
ke file manifest.json
Anda sesuai dengan kutipan berikut, beserta izin lain yang mungkin diperlukan ekstensi Anda.
Untuk mendaftarkan ekstensi Anda ke uji coba origin, gunakan URL
chrome-extension://YOUR_EXTENSION_ID
sebagai Origin Web. Contohnya,
chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
.
ID ekstensi dibuat secara dinamis. Setelah ditetapkan, Anda dapat memaksa ID
tetap stabil dengan menambahkan properti
key
ke manifes.
Setelah mendaftar ke uji coba asli, Anda akan menerima token yang dihasilkan,
yang perlu Anda teruskan dalam array sebagai nilai kolom trial_tokens
dalam
manifes.
{
"manifest_version": 3,
"name": "YOUR_EXTENSION_NAME",
"permissions": ["aiLanguageModelOriginTrial"],
"trial_tokens": ["GENERATED_TOKEN"],
}
Menambahkan dukungan ke localhost
Untuk mengakses Prompt API di localhost
selama uji coba origin, Anda harus
mengupdate Chrome ke versi
terbaru. Selanjutnya, ikuti langkah-langkah berikut:
- Buka Chrome di salah satu platform berikut: Windows, Mac, atau Linux.
- Buka
chrome://flags/#optimization-guide-on-device-model
. - Pilih Enabled BypassPerfRequirement.
- Tindakan ini akan melewati pemeriksaan performa yang dapat mencegah Anda mendownload Gemini Nano ke perangkat.
- Klik Luncurkan kembali atau mulai ulang Chrome.
Menggunakan Prompt API
Setelah meminta izin untuk menggunakan Prompt API, Anda dapat mem-build ekstensi. Ada dua fungsi ekstensi baru yang tersedia untuk Anda di namespace chrome.aiOriginTrial.languageModel
:
capabilities()
untuk memeriksa kemampuan model dan apakah model tersebut 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 tidak cukupnya kapasitas disk yang tersedia untuk mendownload model.'readily'
: Browser saat ini mendukung Prompt API, dan dapat langsung digunakan.'after-download'
: Browser saat ini mendukung Prompt API, tetapi perlu 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
). Suhu harus antara0.0
dan2.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()
.
Opsi 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. [...]' }
]
});
Informasi 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 merupakan
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. Solusi 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 sedang 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. Sebaiknya simpan sesi jika Anda 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.
Berpartisipasi dan memberikan masukan
Mulai uji Prompt API sekarang di Ekstensi Chrome Anda dengan bergabung ke uji coba origin dan berikan masukan Anda. Masukan Anda dapat secara langsung memengaruhi cara kami mem-build dan menerapkan versi API ini pada masa mendatang, dan semua API AI bawaan.
- Untuk memberikan masukan tentang penerapan Chrome, ajukan laporan bug atau permintaan fitur.
- Berikan masukan Anda tentang bentuk API Prompt API dengan memberikan komentar pada Masalah yang ada atau dengan membuka masalah baru di repositori GitHub Prompt API.
- Lihat ekstensi contoh Prompt API di GitHub.
- Berpartisipasilah dalam upaya standar dengan bergabung ke Grup Komunitas Inkubator Web.