با استفاده از GenAI Rewriting API ML Kit، می توانید به طور خودکار به کاربران کمک کنید تا پیام های چت یا قطعات کوتاه محتوا را با سبک یا لحن متفاوت بازنویسی کنند.
در موارد زیر ممکن است ارائه پیشنهادهایی در مورد نحوه بازنویسی یک قطعه محتوا برای کاربران مفید باشد:
- بازسازی یک پیام برای حرفه ای تر بودن در هنگام برقراری ارتباط با ذینفعان
- کوتاه کردن پیام برای ارسال مناسب تر در شبکه های اجتماعی
- بیان مجدد یک پیام برای افراد غیر بومی که به دنبال راههای جایگزین برای انتقال پیام هستند
قابلیت های کلیدی
GenAI Rewriting API کیت ML می تواند قطعات کوتاهی از محتوا را به یکی از سبک های زیر بازنویسی کند:
- Elaborate : متن ورودی را با جزئیات بیشتر و زبان توصیفی گسترش می دهد.
- Emojify : ایموجی های مرتبط را به متن ورودی اضافه می کند و آن را گویاتر و سرگرم کننده تر می کند.
- Shorten : متن ورودی را به یک نسخه کوتاه تر فشرده می کند و پیام اصلی را دست نخورده نگه می دارد.
- دوستانه : متن ورودی را با استفاده از لحن محاوره ای بازنویسی می کند تا ساده تر و قابل دسترس تر باشد.
- حرفه ای : متن ورودی را با استفاده از لحنی محترمانه بازنویسی می کند تا رسمی تر و تجاری تر باشد.
- Rephrase : متن ورودی را با استفاده از کلمات و ساختار جمله های مختلف بازنویسی می کند و در عین حال معنای اصلی را حفظ می کند.
درخواست ها حداقل یک پیشنهاد را برمی گرداند. اگر چندین پیشنهاد برگردانده شود، نتایج بر اساس اطمینان نزولی مرتب خواهند شد.
نتایج نمونه
ورودی | بازنویسی سبک | خروجی |
آیا می خواهید برای صحبت بیشتر ملاقات کنید؟ | حرفه ای | آیا مایل به ملاقات مجدد برای بحث بیشتر در این مورد هستید؟ |
من می خواهم از شرکت شما در یک گردهمایی گاه به گاه در محل اقامت من در عصر شنبه آینده درخواست کنم. | کوتاه کردن | آیا میخواهید این شنبه عصر برای یک دور همی معمولی در محل من به من بپیوندید؟ |
این رویداد موفقیت آمیز بود | مفصل | این رویداد یک موفقیت چشمگیر بود، فراتر از همه انتظارات ما و ثابت شد که یک پیروزی مهیج است. |
بیا به زودی قهوه بخوریم | Emojify کنید | به زودی قهوه بخوریم ☕ . |
گزارش را تا پایان روز ارائه دهید | دوستانه | لطفاً گزارش را تا پایان روز به اشتراک بگذارید؟ |
هی، در اسرع وقت به آن چیز نیاز دارم | حرفه ای | لطفاً سند درخواستی را در اولین فرصت ارائه دهید؟ |
پروژه عقب مانده است | بازنویسی کنید | جدول زمانی پروژه برای رسیدن به مهلت اولیه نیاز به تنظیم دارد |
شروع به کار
برای شروع با GenAI Rewriting API، این وابستگی را به فایل ساخت پروژه خود اضافه کنید.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
سپس، کلاینت Rewriter
را با گزینههای مورد نیاز نمونهسازی کنید، بررسی کنید که آیا ویژگیهای مدل روی دستگاه مورد نیاز موجود است (و در صورت لزوم آنها را دانلود کنید)، متن ورودی خود را به عنوان درخواست آماده کنید، فرآیند بازنویسی را برای دریافت پیشنهادها اجرا کنید، و منابع را آزاد کنید.
کاتلین
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()
جاوا
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();
ویژگی ها و محدودیت های پشتیبانی شده
GenAI Rewriting API از زبانهای زیر پشتیبانی میکند: انگلیسی، ژاپنی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی، و کرهای، و آنها در RewriterOptions.Language
تعریف شدهاند. ورودی باید کمتر از 256 توکن باشد.
در دسترس بودن پیکربندی ویژگی خاص (مشخص شده توسط RewriterOptions
) ممکن است بسته به پیکربندی دستگاه خاص و مدل هایی که در دستگاه دانلود شده اند متفاوت باشد.
مطمئن ترین راه برای توسعه دهندگان برای اطمینان از اینکه ویژگی API مورد نظر در دستگاهی با RewriterOptions
درخواستی پشتیبانی می شود، فراخوانی متد checkFeatureStatus()
است. این روش وضعیت قطعی در دسترس بودن ویژگی در دستگاه را در زمان اجرا ارائه می دهد.
مشکلات راه اندازی رایج
APIهای ML Kit GenAI برای دسترسی به Gemini Nano به برنامه Android AICore متکی هستند. هنگامی که یک دستگاه به تازگی راه اندازی می شود (از جمله بازنشانی)، یا برنامه AICore به تازگی بازنشانی می شود (به عنوان مثال پاک کردن داده ها، حذف نصب و سپس نصب مجدد)، ممکن است برنامه AICore زمان کافی برای تکمیل اولیه (از جمله دانلود آخرین تنظیمات از سرور) نداشته باشد. در نتیجه، APIهای ML Kit GenAI ممکن است مطابق انتظار عمل نکنند. در اینجا پیامهای خطای متداولی که ممکن است مشاهده کنید و نحوه رسیدگی به آنها آمده است:
نمونه پیام خطا | نحوه رسیدگی |
AICore با نوع خطای 4-CONNECTION_ERROR و کد خطای 601-BINDING_FAILURE ناموفق بود: سرویس AICore متصل نشد. | این ممکن است زمانی اتفاق بیفتد که برنامه را با استفاده از ML Kit GenAI API بلافاصله پس از راهاندازی دستگاه نصب کنید یا زمانی که AICore پس از نصب برنامه شما حذف نصب شود. به روز رسانی برنامه AICore و سپس نصب مجدد برنامه باید آن را برطرف کند. |
AICore با نوع خطای 3-PREPARATION_ERROR و کد خطا 606-FEATURE_NOT_FOUND ناموفق بود: ویژگی ... در دسترس نیست. | این ممکن است زمانی اتفاق بیفتد که AICore دانلود آخرین تنظیمات را تمام نکرده باشد. هنگامی که دستگاه به اینترنت متصل است، معمولاً چند دقیقه تا چند ساعت طول می کشد تا به روز شود. راه اندازی مجدد دستگاه می تواند سرعت به روز رسانی را افزایش دهد. توجه داشته باشید که اگر بوت لودر دستگاه باز باشد، این خطا را نیز مشاهده خواهید کرد—این API از دستگاه هایی با بوت لودر قفل نشده پشتیبانی نمی کند. |
AICore با خطای نوع 1-DOWNLOAD_ERROR و کد خطا 0-ناشناخته ناموفق بود: ویژگی ... با وضعیت خرابی 0 ناموفق بود و خطا esz: غیرقابل دسترس: قادر به رفع میزبان نیست ... | اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید و دوباره امتحان کنید. |