Prompt API

Yayınlanma tarihi: 11 Kasım 2024

Açıklayıcı Web Uzantılar Chrome Durumu Amaç
GitHub Experimental EPP'de Bayrak arkasında Origin deneme sürümü Geçerli değil Geçerli değil

Prompt API ile tarayıcıda Gemini Nano'ya doğal dil isteklerini gönderebilirsiniz.

Prompt API, Chrome uzantıları için bir kaynak denemesinde kullanılabilir. Web geliştiricileri, erken önizleme programına katılarak prototip oluşturma ve ek kullanım alanlarını keşfetme amaçlı keşif API'sini kullanabilir.

Chrome uzantılarında Prompt API'yi kullanmanın birçok yolu vardır. Örneğin:

  • Anında takvim etkinlikleri. Kullanıcıların birkaç adımda takvim girişleri 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 iletişim listesi ayrıntılarını 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.

Başlayın

Chrome uzantılarında Prompt API'yi kullanmak için uzantınızın ihtiyaç duyabileceği diğer izinlerle birlikte "aiLanguageModelOriginTrial" iznini uzantının manifest.json bölümüne ekleyin.

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

Bu işlem, yalnızca kaynak deneme süresi boyunca geçerli olan geçici bir izin verir. API kullanıma sunulursa süresi dolan izni kaldırıp nihai izinlerle değiştirerek uzantınızı güncelleyip yeniden yüklemeniz gerekir.

Ayrıca, manifest dosyanıza key mülkünü ekleyerek sürekli bir uzantı kimliği kullanmanızı öneririz.

Kaynak denemesine katılma

Prompt API'yi Chrome uzantınıza eklemek için:

  1. Chrome 131 ile 136 arasında çalışan Prompt API kaynak deneme sürümüne katılın.
  2. Web Kökeni olarak uzantınızın URL'sini (chrome-extension://YOUR_EXTENSION_ID) kullanın. Örneğin, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

  3. Deneme jetonunuzu dizi olarak eklemek için manifest dosyanızı güncelleyin.

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

Uzantıların Prompt API'yi kullanması

Prompt API'yi kullanma izni istedikten sonra uzantınızı oluşturabilirsiniz. chrome.aiOriginTrial.languageModel ad alanında iki uzantı işlevi kullanabilirsiniz:

  • 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. Bunun nedeni, modeli indirmek için yeterli disk alanı olmaması gibi çeşitli faktörler olabilir.
  • '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 en iyi uygulama, indirme işleminin ilerleme durumunu dinlemektir. 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 özellikleri hakkında da bilgi verir. Elde edilen AILanguageModelCapabilities nesnesinde available dışında aşağıdaki alanlar da bulunur:

  • defaultTopK: Varsayılan ü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ık değeri 0.0 ile 2.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ışabileceğinden emin olduktan sonra create() işleviyle bir oturum oluşturursunuz. Bu oturum, prompt() veya promptStreaming() işlevleriyle modeli istemde bulunmanıza olanak tanır.

Oturumunuzu özelleştirme

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ı options nesnesi, oturumu yok etmek için bir AbortSignal iletmenize olanak tanıyan bir signal alanı da alır.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
Sistem istemleri

Sistem istemleriyle dil modeline biraz bağlam bilgisi verebilirsiniz.

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 sınırları

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. 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ı kopyalama

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şmeden kalır. 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

Modeli prompt() veya promptStreaming() işlevleriyle isteyebilirsiniz.

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ı birbiri ü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 durumda, çıkış "Hello", " world", " I am", " an AI" gibi bir sıra olur.

Şu anda, istenen davranışı elde etmek için aşağıdakileri uygulayabilirsiniz. Bu özellik hem standart hem de standart dışı davranışlarla ç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ı serbest bırakmak için destroy() numaralı telefonu arayın. Kaldırılan oturumlar artık kullanılamaz ve devam eden yürütme işlemleri 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.

Prompt API için demo arayüzü

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 derleyip uygulayacağımızı doğrudan etkileyebilir.