Yerleşik yapay zeka ile Chrome'da özetleme

Yayınlanma tarihi: 11 Kasım 2024

Kullanıcılarınıza uzun makaleleri, karmaşık dokümanları ve hatta canlı sohbet görüşmelerini kısa ve bilgilendirici özetlere dönüştürme olanağı sunabileceğinizi hayal edin.

Özetleyici API, cümle, paragraf, madde işareti listesi ve daha fazlası gibi çeşitli uzunluk ve biçimlerde farklı türde özetler oluşturmak için kullanılabilir. Bu API'nin aşağıdaki senaryolarda faydalı olacağını düşünüyoruz:

  • Bir makalenin veya sohbet görüşmesinin önemli noktalarını özetleme
  • Makaleler için başlık ve başlıklar önerir.
  • Uzun bir metnin kısa ve bilgilendirici bir özetini oluşturma.
  • Kitap incelemesine dayalı bir kitap tanıtımı oluşturma.

Kullanılabilirlik

  • API'yi üretim aşamasında gerçek kullanıcılarla test etmek için Chrome 131'den Chrome 136'ya kadar süren Summarizer API kaynak denemesine katılın. Kaynak denemeleri, Chrome'da kaynağınızdaki tüm kullanıcılar için özelliği etkinleştirir. Kaynak denemelerini kullanmaya nasıl başlayacağınızı öğrenin.
    • Kullanım sınırlamaları olabilir ancak canlı test yapmak ve kullanıcı geri bildirimleri toplamak için bu özellikleri entegre edebilirsiniz. Amacımız, daha geniş bir kullanım alanına sunmak için bu API'nin gelecekteki sürümlerini bilgilendirmektir.
  • Uygulama sürecimizi Chrome Durumu'nda takip edebilirsiniz.
  • Summarizer API önerisi, yazma API'leri paketinin bir parçasıdır ve tartışmaya açıktır.
  • 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 denemesi sırasındaki sınırlamalar

Model kalitesi yalnızca İngilizce içerik üzerinde kapsamlı bir şekilde test edildiğinden, kaynak denemesi sırasında Summarizer API yalnızca İngilizce metinlerin özetlenmesini destekler. Kalite ve güvenlik açısından başka dilleri test edip API'yi geniş çapta kullanıma sunduktan sonra bu sınırlamayı kaldırmayı planlıyoruz.

Summarizer API'yi kullanma

Öncelikle, tarayıcının Summarizer API'yi destekleyip desteklemediğini görmek için özellik algılama işlemini çalıştırın.

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

Model indirme

Özetleyici API, yüksek kaliteli özetler oluşturmak için eğitilmiş güçlü bir yapay zeka modeli kullanır. API, Chrome'a yerleştirilmiş olsa da bir web sitesi API'yi ilk kez kullandığında model ayrı olarak indirilir.

Modelin kullanıma hazır olup olmadığını belirlemek için eşzamansız ai.summarizer.capabilities() işlevini çağırın. Üç olası değer alabilen bir available alanına sahip bir AISummarizerCapabilities nesnesi döndürür:

  • no: Mevcut tarayıcı, Summarizer API'yi destekliyor ancak şu anda kullanılamıyor. Bu durum, modeli indirmek için yeterli disk alanı olmaması gibi çeşitli nedenlerden kaynaklanabilir.
  • readily: Mevcut tarayıcı, Summarizer API'yi destekler ve hemen kullanılabilir.
  • after-download: Mevcut tarayıcı, özetleyici API'yi destekler ancak önce modeli indirmesi gerekir.

Model indirme işlemini tetiklemek ve özetleyici oluşturmak için eşzamansız ai.summarizer.create() işlevini çağırın. capabilities() için yanıt after-download ise indirme işleminin ilerleme durumunu dinlemeniz önerilir. Bu şekilde, indirme işleminin zaman alması ihtimaline karşı kullanıcıyı bilgilendirebilirsiniz.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

API işlevleri

create() işlevi, ihtiyaçlarınıza göre yeni bir özetleyici nesnesi yapılandırmanıza olanak tanır. Aşağıdaki parametrelere sahip isteğe bağlı bir options nesnesini alır:

  • sharedContext: Özetleyiciye yardımcı olabilecek ek paylaşılan bağlam.
  • type: key-points (varsayılan), tl;dr, teaser ve headline izin verilen değerlerle özetleme türü.
  • format: markdown (varsayılan) ve plain-text izin verilen değerlerle özetleme biçimi.
  • length: İzin verilen short, medium (varsayılan) ve long değerleriyle özetin uzunluğu. Bu uzunlukların anlamları, istenen type'e göre değişir. Örneğin, Chrome'un uygulamasında kısa önemli noktalar özeti üç madde işaretinden, kısa özet ise bir cümleden oluşur. Uzun önemli noktalar özeti yedi madde işaretinden, uzun özet ise bir paragraftan oluşur.

Aşağıdaki örnekte özetleyicinin nasıl başlatılacağı gösterilmektedir.

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

Özetleyiciyi çalıştırma

Özetleyiciyi çalıştırmanın iki yolu vardır: akışlı olan ve olmayan.

Akış dışı özet

Akış dışı özetleme işleminde model, girişi bir bütün olarak işler ve ardından çıkışı oluşturur.

Akış olmayan bir özet almak için özetleyicinin eşzamansız summarize() işlevini çağırın. İşlevin ilk bağımsız değişkeni, özetlemek istediğiniz metindir. İkinci isteğe bağlı bağımsız değişken, context alanına sahip bir nesnedir. Bu alan, özetleme işlemini iyileştirebilecek arka plan ayrıntıları eklemenize olanak tanır.

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

Akış özeti

Akış özetleme, sonuçları anlık olarak sunar. Giriş eklenip ayarlandıkça çıkış da sürekli olarak güncellenir.

Akış özetini almak için özetleyicinin summarizeStreaming() işlevini çağırın. Ardından akıştaki mevcut metin segmentlerini iteratif olarak inceleyin.

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

summarizeStreaming(), yanıt segmentlerinin birbirini ardışık olarak oluşturduğu bir ReadableStream döndürür. Bu, her yanıtın yalnızca bir sonraki segmenti değil, o noktaya kadar oluşturulan özetin tamamını içerdiği anlamına gelir. Bu, istenen davranış değildir.

Segmentlerin tek bir uzun akışın parçalarından oluştuğu platformdaki diğer akış API'leriyle uyumlu olmayı amaçlıyoruz. Şu anda, istenen davranışı elde etmek için aşağıdakileri uygulayabilirsiniz:

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

Demo

Summarizer API'yi Summarizer API Playground'da deneyebilirsiniz.

Standartlaştırma çalışması

Tarayıcılar arası uyumluluğu sağlamak için Summarizer API'yi standartlaştırmaya çalışıyoruz.

API önerimiz topluluktan destek aldı ve daha fazla tartışma için W3C Web Incubator Topluluğu'na taşındı. Chrome ekibi, W3C Teknik Mimari Grubu'ndan geri bildirim istedi ve Mozilla ile WebKit'ten standartlarla ilgili görüşlerini sordu.

Katılma ve geri bildirim paylaşma

Kaynak denemesine katılarak Summarizer API'yi hemen test etmeye başlayın ve geri bildirimlerinizi paylaşın. Geri bildiriminiz, bu API'nin gelecekteki sürümlerini ve tüm yerleşik yapay zeka API'lerini nasıl geliştirip uygulayacağımızı doğrudan etkileyebilir.