GenAI Rewriting API

ML Kit'in GenAI Rewriting API'si ile kullanıcıların sohbet mesajlarını veya kısa içerikleri farklı bir stil ya da üslupla yeniden yazmasına otomatik olarak yardımcı olabilirsiniz.

Kullanıcılar, aşağıdaki durumlarda bir içeriği yeniden yazma konusunda öneriler almayı faydalı bulabilir:

  • Paydaşlarla iletişim kurarken mesajı daha profesyonel bir şekilde yeniden yapılandırma
  • Bir mesajı sosyal medya platformlarında yayınlamaya daha uygun hale getirmek için kısaltma
  • Mesajı farklı şekillerde iletmek isteyen, ana dili İngilizce olmayan kullanıcılar için mesajı yeniden ifade etme

Temel özellikler

ML Kit'in GenAI Rewriting API'si, kısa içerikleri aşağıdaki stillerden birinde yeniden yazabilir:

  • Detaylandır: Giriş metnini daha fazla ayrıntı ve açıklayıcı bir dille genişletir.
  • Emojify: Giriş metnine alakalı emoji'ler ekleyerek metni daha etkileyici ve eğlenceli hale getirir.
  • Kısalt: Girdi metnini daha kısa bir sürüme dönüştürürken temel mesajı korur.
  • Samimi: Giriş metnini daha gündelik ve samimi bir şekilde, sohbet tonuyla yeniden yazar.
  • Profesyonel: Giriş metnini daha resmi ve iş hayatına uygun olacak şekilde, saygılı bir üslupla yeniden yazar.
  • Farklı sözcüklerle yaz: Giriş metnini farklı kelimeler ve cümle yapıları kullanarak yeniden yazar ancak orijinal anlamı korur.

İstekler en az bir öneri döndürür. Birden fazla öneri döndürülürse sonuçlar güven düzeyine göre azalan sırada sıralanır.

Örnek sonuçlar

Giriş Yeniden Yazma Stili Çıkış
Daha fazla konuşmak için buluşmak ister misiniz? Profesyonel Konuyu daha ayrıntılı şekilde ele almak için tekrar görüşmek ister misiniz?
Bu cumartesi akşamı evimde düzenleyeceğim samimi bir toplantıya katılmanızı rica ediyorum. Kısalt Bu cumartesi akşamı evimde düzenleyeceğim samimi buluşmaya katılmak ister misiniz?
Etkinlik başarılı oldu Detaylandır Etkinlik, tüm beklentilerimizi aşarak büyük bir başarıya ulaştı.
Let's grab coffee sometime soon Emoji ekle Bir ara kahve içelim ☕ 👋.
Raporu gün sonuna kadar gönderin. Samimi Lütfen raporu gün sonuna kadar paylaşabilir misiniz?
Hey, need that thing ASAP Profesyonel Lütfen en kısa zamanda istenen belgeyi gönderin.
Proje, zaman çizelgesinin gerisinde kalıyor Farklı yaz Proje zaman çizelgesinin, orijinal teslim tarihine uyacak şekilde ayarlanması gerekiyor.

Başlarken

Üretken Yapay Zeka ile Yeniden Yazma API'sini kullanmaya başlamak için bu bağımlılığı projenizin derleme dosyasına ekleyin.

implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")

Ardından, gerekli seçeneklerle Rewriter istemcisini oluşturun, gerekli cihaz üzerinde model özelliklerinin kullanılabilir olup olmadığını kontrol edin (gerekirse indirin), giriş metninizi istek olarak hazırlayın, öneri almak için yeniden yazma sürecini çalıştırın ve kaynakları serbest bırakın.

Kotlin

val textToRewrite = "The event was successful"

// Define task with selected input and output format
val rewriterOptions = RewriterOptions.builder(context)
    // OutputType can be one of the following: ELABORATE, EMOJIFY, SHORTEN,
    // FRIENDLY, PROFESSIONAL, REPHRASE
    .setOutputType(RewriterOptions.OutputType.ELABORATE)
    // Refer to RewriterOptions.Language for available languages
    .setLanguage(RewriterOptions.Language.ENGLISH)
    .build()
val rewriter = Rewriting.getClient(rewriterOptions)

suspend fun prepareAndStartRewrite() {
    // Check feature availability, status will be one of the following:
    // UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    val featureStatus = rewriter.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.
        rewriter.downloadFeature(object : DownloadCallback {
            override fun onDownloadStarted(bytesToDownload: Long) { }

            override fun onDownloadFailed(e: GenAiException) { }

            override fun onDownloadProgress(totalBytesDownloaded: Long) {}

            override fun onDownloadCompleted() {
                startRewritingRequest(textToRewrite, rewriter)
            }
        })
    } 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.
        startRewritingRequest(textToRewrite, rewriter)
    } else if (featureStatus == FeatureStatus.AVAILABLE) {
        startRewritingRequest(textToRewrite, rewriter)
    }
}

suspend fun startRewritingRequest(text: String, rewriter: Rewriter) {
    // Create task request
    val rewritingRequest = RewritingRequest.builder(text).build()

    // Start rewriting request with non-streaming response
    // More than 1 result may be returned. If multiple suggestions are
    // returned, results will be sorted by descending confidence.
    val rewriteResults =
        rewriter.runInference(rewritingRequest).await().results

    // You can also start a streaming request
    // rewriter.runInference(rewritingRequest) { newText ->
    //    // Show new text in UI
    // }
}

// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
rewriter.close()

Java

String textToRewrite = "The event was successful";

// Define task with required input and output format
RewriterOptions rewriterOptions =
    RewriterOptions.builder(context)
        // OutputType can be one of the following: ELABORATE,
        // EMOJIFY, SHORTEN, FRIENDLY, PROFESSIONAL, REPHRASE
        .setOutputType(RewriterOptions.OutputType.ELABORATE)
        // Refer to RewriterOptions.Language for available
        // languages
        .setLanguage(RewriterOptions.Language.ENGLISH)
        .build();
Rewriter rewriter = Rewriting.getClient(rewriterOptions);

void prepareAndStartRewrite()
    throws ExecutionException, InterruptedException {
    // Check feature availability, status will be one of the
    // following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
    try {
        int featureStatus = rewriter.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.
            rewriter.downloadFeature(
                new DownloadCallback() {
                    @Override
                    public void onDownloadCompleted() {
                        startRewritingRequest(textToRewrite, rewriter);
                    }

                    @Override
                    public void onDownloadFailed(GenAIException e) {}

                    @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.
            startRewritingRequest(textToRewrite, rewriter);
        } else if (featureStatus == FeatureStatus.AVAILABLE) {
            startRewritingRequest(textToRewrite, rewriter);
        }
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
    }
}

void startRewritingRequest(String text, Rewriter rewriter) {
    // Create task request
    RewritingRequest rewritingRequest =
        RewritingRequest.builder(text).build();

    try {
        // Start rewriting request with non-streaming response
        // More than 1 result may be returned. If multiple
        // suggestions are returned, results will be sorted by
        // descending confidence.
        rewriter.runInference(rewritingRequest).get().getResults();

        // You can also start a streaming request
        // rewriter.runInference(rewritingRequest, newText -> {
        //     // Show new text in UI
        // });
    } catch (ExecutionException | InterruptedException e) {
        e.printStackTrace();
    }
}

// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
rewriter.close();

Desteklenen özellikler ve sınırlamalar

GenAI Rewriting API şu dilleri destekler: İngilizce, Japonca, Fransızca, Almanca, İtalyanca, İspanyolca ve Korece. Bu diller RewriterOptions.Language içinde tanımlanmıştır. Giriş 256 jetondan kısa olmalıdır.

Belirli özellik yapılandırmasının (RewriterOptions 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 RewriterOptions 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.