ML Kit'in GenAI Özetleme API'si ile makalelerin ve görüşmelerin özetlerini madde işaretli liste olarak otomatik şekilde oluşturabilirsiniz. Bu özellik, kullanıcıların büyük metinleri anlamasına yardımcı olur.
Özetleme, cihaz üzerinde üretken yapay zekadan yararlanır. Çünkü bu özellik, veri gizliliği ve maliyet verimliliğiyle ilgili endişeleri giderir. Kişisel sohbetleri, e-postaları, notları ve hatırlatıcıları özetleyen uygulamalar genellikle hassas bilgileri işler. Bu nedenle, kullanıcı gizliliği için cihaz üzerinde işleme önemlidir. Ayrıca, özellikle uzun bağlamlı veya çok öğeli özetleme görevleri önemli işlem gücü gerektirebilir. Bu içeriğin cihazda işlenmesi, kullanıcı verilerini gizli tutarken sunucu yükünü ve sunma maliyetlerini azaltır.
Temel özellikler
Üretken Yapay Zeka Özetleme API'si aşağıdaki özellikleri kapsar:
- Makale veya görüşme olarak sınıflandırılan metinleri özetleme
- Özeti bir, iki veya üç madde işaretiyle oluştur.
Başlayın
build.gradle
yapılandırmanıza bağımlılık olarak ML Kit özetleme API'sini ekleyin.
implementation("com.google.mlkit:genai-summarization:1.0.0-beta1")
Ardından, kodu projenizde uygulayın:
Summarizer
nesnesi oluşturun.- İndirilebiliyorsa özelliği indirin.
- Özetleme isteği oluşturun.
- Çıkarım yapın ve sonucu alın.
Kotlin
val articleToSummarize = "Announcing a set of on-device GenAI APIs..."
// Define task with required input type, output type, and language
val summarizerOptions = SummarizerOptions.builder(context)
.setInputType(InputType.ARTICLE)
.setOutputType(OutputType.ONE_BULLET)
.setLanguage(Language.ENGLISH)
.build()
val summarizer = Summarization.getClient(summarizerOptions)
suspend fun prepareAndStartSummarization() {
// Check feature availability. Status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
val featureStatus = summarizer.checkFeatureStatus().await()
if (featureStatus == FeatureStatus.DOWNLOADABLE) {
// Download feature if necessary. If downloadFeature is not called,
// the first inference request will also trigger the feature to be
// downloaded if it's not already downloaded.
summarizer.downloadFeature(object : DownloadCallback {
override fun onDownloadStarted(bytesToDownload: Long) { }
override fun onDownloadFailed(e: GenAiException) { }
override fun onDownloadProgress(totalBytesDownloaded: Long) {}
override fun onDownloadCompleted() {
startSummarizationRequest(articleToSummarize, summarizer)
}
})
} else if (featureStatus == FeatureStatus.DOWNLOADING) {
// Inference request will automatically run once feature is
// downloaded. If Gemini Nano is already downloaded on the device,
// the feature-specific LoRA adapter model will be downloaded
// quickly. However, if Gemini Nano is not already downloaded, the
// download process may take longer.
startSummarizationRequest(articleToSummarize, summarizer)
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startSummarizationRequest(articleToSummarize, summarizer)
}
}
fun startSummarizationRequest(text: String, summarizer: Summarizer) {
// Create task request
val summarizationRequest = SummarizationRequest.builder(text).build()
// Start summarization request with streaming response
summarizer.runInference(summarizationRequest) { newText ->
// Show new text in UI
}
// You can also get a non-streaming response from the request
// val summarizationResult = summarizer.runInference(
// summarizationRequest).get().summary
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
summarizer.close()
Java
String articleToSummarize = "Announcing: a set of on-device GenAI AI APIs.";
// Define task with required input type, output type, and language
SummarizerOptions summarizerOptions =
SummarizerOptions.builder(context)
.setInputType(SummarizerOptions.InputType.ARTICLE)
.setOutputType(SummarizerOptions.OutputType.ONE_BULLET)
.setLanguage(SummarizerOptions.Language.ENGLISH)
.build();
Summarizer summarizer = Summarization.getClient(summarizerOptions);
void prepareAndStartSummarization()
throws ExecutionException, InterruptedException {
// Check feature availability. Status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
try {
int featureStatus = summarizer.checkFeatureStatus().get();
if (featureStatus == FeatureStatus.DOWNLOADABLE) {
// Download feature if necessary.
// If downloadFeature is not called, the first inference request
// will also trigger the feature to be downloaded if it's not
// already downloaded.
summarizer.downloadFeature(new DownloadCallback() {
@Override
public void onDownloadCompleted() {
startSummarizationRequest(articleToSummarize, summarizer);
}
@Override
public void onDownloadFailed(GenAiException e) { /* handle error */ }
@Override
public void onDownloadProgress(long totalBytesDownloaded) {}
@Override
public void onDownloadStarted(long bytesDownloaded) {}
});
} else if (featureStatus == FeatureStatus.DOWNLOADING) {
// Inference request will automatically run once feature is
// downloaded. If Gemini Nano is already downloaded on the
// device, the feature-specific LoRA adapter model will be
// downloaded quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startSummarizationRequest(articleToSummarize, summarizer);
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startSummarizationRequest(articleToSummarize, summarizer);
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
void startSummarizationRequest(String text, Summarizer summarizer) {
// Create task request
SummarizationRequest summarizationRequest =
SummarizationRequest.builder(text).build();
// Start summarization request with streaming response
summarizer.runInference(summarizationRequest, newText -> {
// Show new text in UI
});
// You can also get a non-streaming response from the request
// ListenableFuture<SummarizationResult> summarizationResult
// = summarizer.runInference(summarizationRequest);
// String summary = summarizationResult.get().getSummary();
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
summarizer.close();
Modelin farklı giriş türlerini nasıl işlediği
Metin girişi InputType.CONVERSATION
olarak belirtildiğinde model, girişi şu biçimde bekler:
<name>: <message>
<name2>: <message2>
<name>: <message3>
<name3>: <message4>
Bu sayede model, sohbeti ve etkileşimleri daha iyi anlayarak daha doğru bir özet oluşturabilir.
Desteklenen özellikler ve sınırlamalar
Giriş 4.000 jetondan (veya yaklaşık 3.000 İngilizce kelimeden) kısa olmalıdır. Giriş 4.000 jetonu aşıyorsa aşağıdaki seçenekleri değerlendirin:
- İlk 4.000 jetonun özetlenmesine öncelik verin. Testler, bu yöntemin genellikle daha uzun girişlerde iyi sonuçlar verdiğini gösteriyor.
setLongInputAutoTruncationEnabled
işlevini çağırarak otomatik kesmeyi etkinleştirebilirsiniz. Böylece, ek giriş otomatik olarak kesilir. - Girişi 4.000 jetonluk gruplara ayır ve bunları ayrı ayrı özetle.
- Daha büyük giriş için daha uygun bir bulut çözümü kullanmayı düşünebilirsiniz.
InputType.ARTICLE
için giriş de 400 karakterden uzun olmalıdır. Model, makale en az 300 kelime olduğunda en iyi performansı gösterir.
Üretken Yapay Zeka Özetleme API'si İngilizce, Japonca ve Korece dillerini destekler ve SummarizerOptions.Language
içinde tanımlanır.
Belirli özellik yapılandırmasının (SummarizerOptions
ile belirtilir) kullanılabilirliği, cihazın yapılandırmasına ve cihaza indirilen modellere bağlı olarak değişebilir.
Geliştiricilerin, amaçlanan API özelliğinin istenen SummarizerOptions
ile bir cihazda desteklendiğinden emin olmasının en güvenilir yolu checkFeatureStatus()
yöntemini çağırmaktır. Bu yöntem, çalışma zamanında cihazdaki özellik kullanılabilirliğiyle ilgili kesin durumu sağlar.
Sık karşılaşılan kurulum sorunları
ML Kit üretken yapay zeka API'leri, Gemini Nano'ya erişmek için Android AICore uygulamasına bağlıdır. Bir cihaz yeni kurulduğunda (sıfırlama dahil) veya AICore uygulaması yeni sıfırlandığında (ör. veriler temizlendiğinde, uygulama kaldırılıp yeniden yüklendiğinde) AICore uygulaması başlatma işlemini (sunucudan en son yapılandırmaları indirme dahil) tamamlamak için yeterli zamana sahip olmayabilir. Bu nedenle, ML Kit GenAI API'leri beklendiği gibi çalışmayabilir. Karşılaşabileceğiniz yaygın kurulum hata mesajları ve bunların nasıl ele alınacağı aşağıda açıklanmıştır:
Örnek hata mesajı | Ne yapmalı? |
AICore, 4-CONNECTION_ERROR hata türü ve 601-BINDING_FAILURE hata koduyla başarısız oldu: AICore hizmeti bağlanamadı. | Bu durum, cihaz kurulumundan hemen sonra ML Kit GenAI API'lerini kullanarak uygulamayı yüklediğinizde veya uygulamanız yüklendikten sonra AICore kaldırıldığında ortaya çıkabilir. AICore uygulamasını güncelleyip uygulamanızı yeniden yüklediğinizde sorun düzelir. |
AICore, 3-PREPARATION_ERROR hata türü ve 606-FEATURE_NOT_FOUND hata koduyla başarısız oldu: Özellik ... kullanılamıyor. |
Bu durum, AICore en son yapılandırmaları indirmeyi tamamlamadığında meydana gelebilir. Cihaz internete bağlandığında güncelleme işlemi genellikle birkaç dakika ile birkaç saat arasında sürer. Cihazı yeniden başlatmak güncellemeyi hızlandırabilir.
Cihazın önyükleyicisi kilidi açılmışsa bu hatayı da görürsünüz. Bu API, önyükleyicisi kilidi açılmış cihazları desteklemez. |
AICore, 1-DOWNLOAD_ERROR hata türü ve 0-UNKNOWN hata koduyla başarısız oldu: Feature ... failed with failure status 0 and error esz: UNAVAILABLE: Unable to resolve host ... | Ağ bağlantısını koruyun, birkaç dakika bekleyin ve tekrar deneyin. |