Dengan GenAI Rewriting API dari ML Kit, Anda dapat otomatis membantu pengguna menulis ulang pesan chat atau potongan konten singkat dengan gaya atau nuansa yang berbeda.
Pengguna mungkin merasa terbantu jika diberi saran tentang cara menulis ulang sebuah konten dalam kasus berikut:
- Merstrukturisasi pesan agar lebih profesional saat berkomunikasi dengan pemangku kepentingan
- Mempersingkat pesan agar lebih sesuai untuk diposting di platform media sosial
- Memformulasikan ulang pesan untuk penutur non-native yang mencari cara alternatif untuk menyampaikan pesan
Kemampuan utama
GenAI Rewriting API ML Kit dapat menulis ulang potongan konten singkat dalam salah satu gaya berikut:
- Jelaskan: Memperluas teks input dengan detail dan bahasa deskriptif selengkapnya.
- Emojify: Menambahkan emoji yang relevan ke teks input, sehingga lebih ekspresif dan menyenangkan.
- Persingkat: Meringkas teks input menjadi versi yang lebih singkat, tanpa mengubah pesan intinya.
- Ramah: Menulis ulang teks input agar lebih kasual dan mudah didekati, menggunakan gaya 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, sekaligus mempertahankan makna aslinya.
Permintaan akan menampilkan setidaknya satu saran. Jika beberapa saran ditampilkan, hasil akan diurutkan berdasarkan keyakinan menurun.
Hasil contoh
Input | Gaya Tulis Ulang | Output |
Ingin bertemu untuk membahas lebih lanjut? | Profesional | Apakah Anda tertarik untuk bertemu lagi guna membahasnya lebih lanjut? |
Saya ingin mengundang Anda untuk bergabung dalam acara temu kangen santai di kediaman saya pada Sabtu malam mendatang | Persingkat | Mau bergabung dengan saya untuk berkumpul santai di rumah saya Sabtu malam ini? |
Peristiwa berhasil | Jelaskan | Acara ini sangat sukses, melebihi semua ekspektasi kami dan terbukti menjadi kesuksesan besar. |
Mari kita minum kopi | Jadikan emoji | Mari kita minum kopi ☕ dalam waktu dekat 👋. |
Berikan laporan pada akhir hari | Persahabatan | Bisakah Anda membagikan laporannya hari ini? |
Hei, saya butuh hal itu secepatnya | Profesional | Dapatkah Anda memberikan dokumen yang diminta sesegera mungkin? |
Project terlambat | Susun ulang frasa | Linimasa project memerlukan penyesuaian untuk memenuhi tenggat waktu awal |
Memulai
Untuk memulai 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
diperlukan), siapkan teks input Anda sebagai permintaan, jalankan proses penulisan ulang untuk
mendapatkan saran, dan rilis 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, dan bahasa tersebut ditentukan dalam
RewriterOptions.Language
. Input harus kurang dari 256 token.
Ketersediaan konfigurasi fitur tertentu (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 diinginkan
didukung di perangkat dengan RewriterOptions
yang diminta adalah dengan memanggil
metode checkFeatureStatus()
. Metode ini memberikan status definitif
ketersediaan fitur di perangkat saat runtime.
Masalah penyiapan umum
API GenAI ML Kit mengandalkan aplikasi Android AICore untuk mengakses Gemini Nano. Saat perangkat baru saja disiapkan (termasuk direset), atau aplikasi AICore baru saja direset (misalnya, menghapus data, meng-uninstal, lalu menginstal ulang), aplikasi AICore mungkin tidak memiliki cukup waktu untuk menyelesaikan inisialisasi (termasuk mendownload konfigurasi terbaru dari server). Akibatnya, ML Kit GenAI API 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 melakukan binding. | Hal ini dapat terjadi saat Anda menginstal aplikasi menggunakan ML Kit GenAI API segera setelah penyiapan perangkat atau saat AICore di-uninstal setelah aplikasi diinstal. Mengupdate aplikasi AICore, lalu menginstal ulang aplikasi Anda akan memperbaikinya. |
AICore gagal dengan jenis error 3-PREPARATION_ERROR dan kode error 606-FEATURE_NOT_FOUND: Fitur ... tidak tersedia. |
Hal ini dapat terjadi jika AICore belum selesai mendownload konfigurasi terbaru. Pastikan koneksi jaringan tetap aktif dan tunggu selama beberapa menit hingga beberapa jam.
Perlu diperhatikan 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: Tidak dapat me-resolve host ... | Pastikan koneksi jaringan tetap aktif, tunggu beberapa menit, lalu coba lagi. |