GenAI Rewriting API

Dengan GenAI Rewriting API dari ML Kit, Anda dapat secara otomatis membantu pengguna menulis ulang pesan chat atau konten singkat dengan gaya atau nada yang berbeda.

Pengguna mungkin merasa terbantu dengan saran tentang cara menulis ulang konten dalam kasus berikut:

  • Menyusun ulang pesan agar lebih profesional saat berkomunikasi dengan pemangku kepentingan
  • Memendekkan pesan agar lebih cocok untuk diposting di platform media sosial
  • Mengubah susunan kata pesan untuk penutur non-pribumi yang mencari cara alternatif untuk menyampaikan pesan

Kemampuan utama

GenAI Rewriting API ML Kit dapat menulis ulang konten singkat dalam salah satu gaya berikut:

  • Jelaskan: Memperluas teks input dengan detail dan bahasa deskriptif yang lebih banyak.
  • Emojify: Menambahkan emoji yang relevan ke teks input, sehingga teks menjadi lebih ekspresif dan menarik.
  • Persingkat: Memadatkan teks input ke versi yang lebih pendek, dengan tetap mempertahankan pesan inti.
  • Ramah (Friendly): Menulis ulang teks input agar lebih kasual dan mudah dipahami, menggunakan gaya bahasa percakapan.
  • Profesional: Menulis ulang teks input agar lebih formal dan seperti bisnis, menggunakan gaya bahasa yang sopan.
  • Susun ulang: Menulis ulang teks input menggunakan kata dan struktur kalimat yang berbeda, sambil mempertahankan makna aslinya.

Permintaan akan menampilkan setidaknya satu saran. Jika beberapa saran ditampilkan, hasil akan diurutkan berdasarkan keyakinan menurun.

Hasil contoh

Input Gaya Penulisan Ulang Output
Apakah Anda ingin bertemu untuk membahasnya lebih lanjut? Profesional Apakah Anda tertarik untuk bertemu lagi guna membahas hal ini lebih lanjut?
Saya ingin mengundang Anda untuk menghadiri acara kumpul-kumpul santai di kediaman saya pada Sabtu malam mendatang Persingkat Mau bergabung denganku untuk berkumpul santai di rumahku Sabtu malam ini?
Acara berhasil Jelaskan Acara tersebut sukses besar, melampaui semua ekspektasi kami dan terbukti menjadi kemenangan yang gemilang.
Yuk, kita ngopi kapan-kapan Tambahkan emoji Yuk, kita minum kopi ☕ kapan-kapan 👋.
Berikan laporan pada akhir hari Persahabatan Dapatkah Anda membagikan laporan tersebut sebelum akhir hari ini?
Hei, butuh barang itu secepatnya Profesional Dapatkah Anda memberikan dokumen yang diminta sesegera mungkin?
Proyek terlambat dari jadwal Susun ulang frasa Garis waktu proyek memerlukan penyesuaian untuk memenuhi tenggat waktu asli

Memulai

Untuk mulai menggunakan GenAI Rewriting API, tambahkan dependensi ini ke file build project Anda.

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

Kemudian, buat instance klien Rewriter dengan opsi yang diperlukan, periksa apakah fitur model di perangkat yang diperlukan tersedia (dan download jika perlu), siapkan teks input Anda sebagai permintaan, jalankan proses penulisan ulang untuk mendapatkan saran, dan lepaskan resource.

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

Fitur yang didukung dan batasan

GenAI Rewriting API mendukung bahasa berikut: Inggris, Jepang, Prancis, Jerman, Italia, Spanyol, dan Korea, yang ditentukan dalam RewriterOptions.Language. Input harus kurang dari 256 token.

Ketersediaan konfigurasi fitur tertentu (yang ditentukan oleh RewriterOptions) dapat bervariasi bergantung pada konfigurasi perangkat tertentu dan model yang telah didownload ke perangkat.

Cara paling andal bagi developer untuk memastikan bahwa fitur API yang dimaksud didukung di perangkat dengan RewriterOptions yang diminta adalah dengan memanggil metode checkFeatureStatus(). Metode ini memberikan status pasti ketersediaan fitur di perangkat saat runtime.

Masalah penyiapan umum

API GenAI ML Kit mengandalkan aplikasi Android AICore untuk mengakses Gemini Nano. Saat perangkat baru disiapkan (termasuk direset), atau aplikasi AICore baru direset (misalnya, hapus data, di-uninstal lalu diinstal ulang), aplikasi AICore mungkin tidak memiliki cukup waktu untuk menyelesaikan inisialisasi (termasuk mendownload konfigurasi terbaru dari server). Akibatnya, API GenAI ML Kit mungkin tidak berfungsi seperti yang diharapkan. Berikut adalah pesan error penyiapan umum yang mungkin Anda lihat dan cara menanganinya:

Contoh pesan error Cara menangani
AICore gagal dengan jenis error 4-CONNECTION_ERROR dan kode error 601-BINDING_FAILURE: Layanan AICore gagal terikat. Hal ini dapat terjadi saat Anda menginstal aplikasi menggunakan ML Kit GenAI API segera setelah penyiapan perangkat atau saat AICore di-uninstal setelah aplikasi Anda diinstal. Mengupdate aplikasi AICore, lalu menginstal ulang aplikasi Anda akan memperbaiki masalah ini.
AICore gagal dengan jenis error 3-PREPARATION_ERROR dan kode error 606-FEATURE_NOT_FOUND: Fitur ... tidak tersedia. Hal ini dapat terjadi saat AICore belum selesai mendownload konfigurasi terbaru. Saat perangkat terhubung ke internet, biasanya perlu waktu beberapa menit hingga beberapa jam untuk melakukan update. Memulai ulang perangkat dapat mempercepat update.

Perhatikan bahwa jika bootloader perangkat tidak terkunci, Anda juga akan melihat error ini—API ini tidak mendukung perangkat dengan bootloader yang tidak terkunci.
AICore gagal dengan jenis error 1-DOWNLOAD_ERROR dan kode error 0-UNKNOWN: Fitur ... gagal dengan status kegagalan 0 dan error esz: UNAVAILABLE: Unable to resolve host ... Pertahankan koneksi jaringan, tunggu beberapa menit, lalu coba lagi.