Yayınlanma tarihi: 11 Kasım 2024
Prompt API for Extensions artık bir kaynak deneme sürümünde kullanılabilir. Böylece tarayıcıda en verimli dil modelimiz olan Gemini Nano'yu kullanan Chrome Uzantıları oluşturabilirsiniz.
Chrome uzantıları ile Prompt API'nin birçok kullanım alanı vardır. Aşağıda bazı örnekler verilmiştir:
- Anında takvim etkinlikleri. Kullanıcıların birkaç adımda takvim girişi oluşturabilmesi için web sayfalarından etkinlik ayrıntılarını otomatik olarak ayıklayan bir Chrome uzantısı geliştirin.
- Sorunsuz kişi ayıklama Web sitelerinden iletişim bilgilerini ayıklayan bir uzantı oluşturarak kullanıcıların bir işletmeyle iletişim kurmasını veya kişi listelerine ayrıntı eklemesini kolaylaştırın.
- Dinamik içerik filtreleme Haber makalelerini analiz eden ve kullanıcı tanımlı konulara göre içeriği otomatik olarak bulanıklaştıran veya gizleyen bir Chrome uzantısı oluşturun.
Bunlar, kullanabileceğiniz seçeneklerden yalnızca birkaçıdır. Neler oluşturacağınızı görmek için sabırsızlanıyoruz.
Kullanılabilirlik
- Bu API ile uzantı oluşturmak için Chrome 131 ile 136 arasında çalışan Prompt API kaynak deneme sürümüne katılın. Kaynak denemelerine yeni başladıysanız bu denemeler, deneysel platform özelliklerine erken erişim sunan ve tüm geliştiricilere açık olan, zaman sınırı olan programlardır. Geliştiriciler test yapabilir, kullanıcı geri bildirimleri toplayabilir ve gelecekteki bir lansmana yönelik iterasyonlar yapabilir.
- Kullanım sınırlamaları olabilir ancak canlı test yapmak ve kullanıcı geri bildirimleri toplamak için bu özellikleri entegre edebilirsiniz. Daha geniş bir kullanılabilirlik sağlamak için çalışırken API'nin gelecekteki iterasyonlarını bildirmeyi hedefliyoruz.
- Yeni yerleşik yapay zeka API'lerine erken bir bakış atmak ve posta listemizdeki tartışmalara erişmek için erken önizleme programına katılın.
Kaynak denemesine katılma
Chrome Uzantılarında Prompt API'yi kullanmak için manifest.json
dosyanıza "aiLanguageModelOriginTrial"
iznini aşağıdaki alıntıya göre ekleyin ve uzantınızın ihtiyaç duyabileceği diğer tüm izinleri ekleyin.
Uzantılarınızı kaynak denemesine kaydetmek için Web Kaynağı olarak chrome-extension://YOUR_EXTENSION_ID
URL'sini kullanın. Örneğin, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
.
Uzantı kimliği dinamik olarak oluşturulur ancak bir kimlik atandıktan sonra manifest dosyasına key
mülkünü ekleyerek kimliğin sabit kalmasını sağlayabilirsiniz.
Orijinal deneme sürümüne kaydolduktan sonra, oluşturulan bir jeton alırsınız. Bu jetonu, manifest dosyasında trial_tokens
alanının değeri olarak bir diziye iletmeniz gerekir. Örnek için snippet'i inceleyin.
{
"permissions": ["aiLanguageModelOriginTrial"],
"trial_tokens": ["GENERATED_TOKEN"],
}
Prompt API'yi kullanma
Prompt API'yi kullanma izni istedikten sonra uzantınızı oluşturabilirsiniz. chrome.aiOriginTrial.languageModel
ad alanında iki yeni uzantı işlevi kullanılabilir:
capabilities()
tıklayın.create()
simgesini tıklayarak dil modeli oturumu başlatın.
Model indirme
Prompt API, Chrome'da Gemini Nano modelini kullanır. API, Chrome'a yerleştirilmiş olsa da bir uzantı API'yi ilk kez kullandığında model ayrı olarak indirilir.
Modelin kullanıma hazır olup olmadığını belirlemek için asenkron chrome.aiOriginTrial.languageModel.capabilities()
işlevini çağırın. Üç olası değer alabilen bir available
alanına sahip bir AILanguageModelCapabilities
nesnesi döndürür:
'no'
: Mevcut tarayıcı istem API'sini destekler ancak şu anda kullanılamaz. Bu durum, modeli indirmek için yeterli kullanılabilir disk alanı gibi birkaç nedenden kaynaklanabilir.'readily'
: Mevcut tarayıcı Prompt API'yi destekler ve hemen kullanılabilir.'after-download'
: Mevcut tarayıcı Prompt API'yi destekler ancak önce modeli indirmesi gerekir.
Model indirme işlemini tetiklemek ve dil modeli oturumunu oluşturmak için asenkron chrome.aiOriginTrial.languageModel.create()
işlevini çağırın. capabilities()
için verilen yanıt 'after-download'
ise indirme işleminin ilerleme durumunu dinlemeniz önerilir. Böylece, indirme işleminin uzun sürmesi durumunda kullanıcıyı bilgilendirebilirsiniz.
const session = await chrome.aiOriginTrial.languageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
Model özellikleri
capabilities()
işlevi, dil modelinin becerileri hakkında da sizi bilgilendirir. Elde edilen AILanguageModelCapabilities
nesnesinde available
dışında aşağıdaki alanlar da bulunur:
defaultTopK
: Varsayılan en üst K değeri (varsayılan:3
).maxTopK
: En yüksek K değeri (8
).defaultTemperature
: Varsayılan sıcaklık (1.0
). Sıcaklık0.0
ile2.0
arasında olmalıdır.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
Oturum oluşturma
Prompt API'nin çalışabildiğinden emin olduktan sonra create()
işleviyle bir oturum oluşturursunuz. Bu oturumdan sonra
prompt()
veya promptStreaming()
işlevleriyle model için istem girebilirsiniz.
Oturum seçenekleri
Her oturum, isteğe bağlı bir seçenekler nesnesi kullanılarak topK
ve temperature
ile özelleştirilebilir. Bu parametrelerin varsayılan değerleri chrome.aiOriginTrial.languageModel.capabilities()
kaynağından döndürülür.
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,
});
create()
işlevinin isteğe bağlı seçenekler nesnesi de bir signal
alanı alır. Bu alan, oturumu yok etmek için bir AbortSignal
iletmenize olanak tanır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await chrome.aiOriginTrial.languageModel.create({
signal: controller.signal,
})
Sistem istemleri
Sistem istemlerini kullanarak dil modeline biraz bağlam sunabilirsiniz.
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.'
İlk istemler
İlk istemlerle, dil modeline önceki etkileşimlerle ilgili bağlam bilgisi sağlayabilirsiniz. Örneğin, kullanıcının tarayıcı yeniden başlatıldıktan sonra kayıtlı bir oturumu devam ettirmesine izin vermek için bu yöntemi kullanabilirsiniz.
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. [...]' }
]
});
Oturum bilgileri
Belirli bir dil modeli oturumunun işleyebileceği maksimum jeton sayısı vardır. Oturum nesnesinde aşağıdaki özellikleri kullanarak kullanımı ve bu sınıra ulaşma yolunda ilerleme durumunu kontrol edebilirsiniz:
console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
Oturum devamlılığı
Her oturum, sohbetin bağlamını izler. Önceki etkileşimler, oturumun bağlam penceresi dolana kadar gelecekteki etkileşimler için dikkate alınır.
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 and 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);
Oturumları klonlama
Kaynakları korumak için clone()
işlevini kullanarak mevcut bir oturumu kopyalayabilirsiniz. Görüşme bağlamı sıfırlanır ancak ilk istem veya sistem istemleri değişmez. clone()
işlevi, signal
alanı içeren isteğe bağlı bir options nesnesi alır. Bu nesne, klonlanmış oturumu yok etmek için bir AbortSignal
iletmenize olanak tanır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Modele istem gönderme
Modele prompt()
veya promptStreaming()
işlevleriyle istem gönderebilirsiniz.
Akış dışı çıkış
Kısa bir sonuç bekliyorsanız yanıt mevcut olduğunda yanıtı döndüren prompt()
işlevini kullanabilirsiniz.
// 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);
}
Akış çıkışı
Daha uzun bir yanıt bekliyorsanız modelden gelen kısmi sonuçları göstermenize olanak tanıyan promptStreaming()
işlevini kullanmanız gerekir.
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()
, parçaları birbirinin üzerine eklenerek ilerleyen bir ReadableStream
döndürür. Örneğin "Hello,"
, "Hello world,"
, "Hello world I am,"
, "Hello world I am an AI."
. Bu, amaçlanan davranış değildir. Platformdaki diğer akış API'leriyle uyumlu hale getirmek istiyoruz. Bu API'lerde, parçalar tek bir uzun yayının art arda gelen parçalarıdır. Bu, çıkışın "Hello"
, " world"
, " I am"
, " an AI"
gibi bir dizi olacağı anlamına gelir.
Şimdilik amaçlanan davranışa ulaşmak için aşağıdakileri uygulayabilirsiniz. Bu özellik hem standart hem de standart dışı davranışlarda çalışır.
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);
İstemin çalışmasını durdurma
Hem prompt()
hem de promptStreaming()
, istemleri çalıştırmayı durdurmanıza olanak tanıyan bir signal
alanıyla isteğe bağlı ikinci bir parametreyi kabul eder.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt(
'Write me a poem!',
{ signal: controller.signal }
);
Oturumları sonlandırma
Artık oturuma ihtiyacınız yoksa kaynakları boşaltmak için destroy()
numaralı telefonu arayın. Bir oturum yok edildiğinde artık kullanılamaz ve devam eden tüm yürütmeler iptal edilir. Oturum oluşturmak biraz zaman alabileceğinden, modelden sık sık istemde bulunmak istiyorsanız oturumu açık tutabilirsiniz.
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
Chrome uzantılarında Prompt API'yi test etmek için demo uzantısını yükleyin. Uzantı kaynak kodu GitHub'da mevcuttur.
Katılma ve geri bildirim paylaşma
Kaynak denemesine katılarak Prompt API'yi Chrome uzantılarınızda hemen test etmeye başlayın ve geri bildirimlerinizi paylaşın. Geri bildiriminiz, bu API'nin ve tüm yerleşik yapay zeka API'lerinin gelecekteki sürümlerini nasıl oluşturacağımızı ve uygulayacağımızı doğrudan etkileyebilir.
- Chrome'un uygulanmasıyla ilgili geri bildirim için hata raporu veya özellik isteği gönderin.
- Mevcut bir soruna yorum yaparak veya Prompt API GitHub deposunda yeni bir sorun açarak Prompt API'nin API biçimiyle ilgili geri bildirimlerinizi paylaşın.
- GitHub'daki Prompt API örnek uzantısına göz atın.
- Web Incubator Topluluk Grubu'na katılarak standartlar çalışmalarına katılın.