Prompt API

Yayınlanma tarihi: 20 Mayıs 2025

Açıklayıcı Web Uzantılar Chrome Durumu Amaç
GitHub Deneysel EPP'de Chrome Beta Chrome 137 beta Görünüm Deneme yapma niyeti

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

Prompt API'yi kullanmanın birçok yolu vardır. Web uygulamasında veya web sitesinde şunları oluşturabilirsiniz:

  • Yapay zeka destekli arama: Web sayfasının içeriğine göre soruları yanıtlayın.
  • Kişiselleştirilmiş haber feed'leri: Makaleleri kategorilere göre dinamik olarak sınıflandıran ve kullanıcıların bu içeriği filtrelemesine olanak tanıyan bir feed 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.

Donanım gereksinimlerini inceleyin

Dil Tanımlayıcı ve Çevirmen API'leri, masaüstünde yalnızca Chrome'da çalışır.

Prompt API, Summarizer API, Writer API ve Rewriter API, aşağıdaki koşullar karşılandığında Chrome'da çalışır:

  • İşletim sistemi: Windows 10 veya 11; macOS 13 veya üzeri (Ventura ve sonraki sürümler) ya da Linux. Android, iOS ve ChromeOS için Chrome, Gemini Nano tarafından desteklenen API'lerimiz tarafından henüz desteklenmiyor.
  • Depolama alanı: Chrome profilinizi içeren birimde en az 22 GB.
  • GPU: 4 GB'tan fazla VRAM
  • : Sınırsız veri veya sınırsız bağlantı.

Bu şartlar, geliştirme süreciniz ve oluşturduğunuz özellikleri kullanan kullanıcılarınız için geçerlidir.

Prompt API'yi kullanma

LanguageModel ad alanında iki işlev kullanabilirsiniz:

  • availability() 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 kaynak API'yi ilk kez kullandığında model ayrı olarak indirilir.

Modelin kullanıma hazır olup olmadığını belirlemek için asenkron LanguageModel.availability() işlevini çağırın. Bu işlem, aşağıdaki yanıtlardan birini döndürür:

  • "unavailable", uygulamanın istenen seçenekleri desteklemediği veya hiç dil modeli istemi desteklemediği anlamına gelir.
  • "downloadable", uygulamanın istenen seçenekleri desteklediği ancak bu seçenekleri kullanarak oturum oluşturabilmek için bir şey (ör. dil modelinin kendisi veya hassas ayar) indirmesi gerektiği anlamına gelir.
  • "downloading", uygulamanın istenen seçenekleri desteklediği ancak bu seçenekleri kullanarak oturum oluşturmadan önce devam eden bir indirme işleminin tamamlanması gerektiği anlamına gelir.
  • "available", uygulamanın yeni indirme gerektirmeden istenen seçenekleri desteklediği anlamına gelir.

Model indirme işlemini tetiklemek ve dil modeli oturumunu oluşturmak için asenkron LanguageModel.availability() işlevini çağırın. availability() için verilen yanıt 'downloadable' ise indirme işleminin ilerleme durumunu dinlemeniz önerilir. Bu sayede, indirme işleminin uzun sürmesi durumunda kullanıcıyı bilgilendirebilirsiniz.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

Model özellikleri

params() işlevi, dil modelinin parametreleri hakkında bilgi verir. Nesnede aşağıdaki alanlar 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.
  • maxTemperature: Maksimum sıcaklık.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

Oturum oluşturma

Prompt API çalıştırılabilir hale geldiğinde create() işleviyle bir oturum oluşturursunuz. Modeli prompt() veya promptStreaming() işlevleriyle isteyebilirsiniz.

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 LanguageModel.params() kaynağından döndürülür.

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

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 LanguageModel.create({
  signal: controller.signal,
})

İ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 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.inputUsage}/${session.inputQuota}`);

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 LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "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 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

Modele prompt() veya promptStreaming() işlevlerini kullanarak istek gönderebilirsiniz.

Akışlanmayan çı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 {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);
}

Akışla yayınlanan çı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. promptStreaming() işlevi bir ReadableStream döndürür.

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

İstemleri 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()'ü arayın. Bir oturum yok edildiğinde artık kullanılamaz ve devam eden yürütme işlemi 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."
);

Çok formatlı özellikler

Prompt API, yerel deneme için Chrome 138 Canary'dan ses ve resim girişlerini destekler. API, metin çıkışı döndürür.

Bu özellikler sayesinde:

  • Kullanıcıların bir sohbet uygulamasında gönderilen sesli mesajları metne dönüştürmesine izin verin.
  • Web sitenize yüklenen bir resmi altyazı veya alternatif metin olarak kullanmak için açıklayın.
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
    { type: "image", value: referenceImage },
    { type: "image", value: userDrawnImage }
  ]
}]);

console.log(response1);

const audioBlob = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "My response to your critique:" },
    { type: "audio", value: audioBlob }
  ]
}]);

Çok modlu demolar

Prompt API'yi ses girişiyle kullanmak için Mediarecorder Ses İstemi demosuna, Prompt API'yi resim girişiyle kullanmak için Canvas Resim İstemi demosuna bakın.

Geri bildirim

Geri bildiriminiz bu API'nin geleceği ve Gemini Nano'da yapılacak iyileştirmeler hakkında bilgi edinmemize yardımcı olur. Hatta bu, hem sizin hem de kullanıcılarınızın ihtiyaçlarını karşılayabilmemiz için özel görev API'leri (ör. ses metne dönüştürme veya resim açıklaması API'leri) geliştirilmesine yol açabilir.

Katılma ve geri bildirim paylaşma

Geri bildiriminiz, bu API'nin ve tüm yerleşik yapay zeka API'lerinin gelecekteki sürümlerini nasıl geliştirip uygulayacağımızı doğrudan etkileyebilir.