با GenAI Rewriting API در ML Kit، میتوانید بهطور خودکار به کاربران کمک کنید پیامهای گپ یا قطعههای کوتاه محتوا را با سبک یا لحنی متفاوت بازنویسی کنند.
ممکن است برای کاربران مفید باشد که در موارد زیر پیشنهادهایی درباره نحوه بازنویسی یک محتوا دریافت کنند:
- بازسازی پیام برای حرفهایتر شدن هنگام ارتباط با ذینفعان
- کوتاه کردن پیام برای مناسبتر شدن آن برای پست کردن در پلاتفرمهای رسانههای اجتماعی
- بازنویسی پیام برای افرادی که زبان مادریشان نیست و بهدنبال روشهای جایگزین برای انتقال پیام هستند
قابلیتهای کلیدی
«میانای برنامهسازی کاربردی بازنویسی هوشواره زایا» در ML Kit میتواند قطعههای کوتاه محتوا را به یکی از سبکهای زیر بازنویسی کند:
- مفصلتر: نوشتار ورودی را با جزئیات بیشتر و زبان توصیفی ازهم باز میکند.
- Emojify: اموجیهای مرتبط به نوشتار ورودی اضافه میکند و آن را گویاتر و سرگرمکنندهتر میکند.
- کوتاه کردن: نوشتار ورودی را به نسخه کوتاهتری خلاصه میکند و پیام اصلی را دستنخورده نگه میدارد.
- دوستانه: نوشتار ورودی را بازنویسی میکند تا غیررسمیتر و صمیمیتر شود، بااستفاده از لحنی محاورهای.
- حرفهای: نوشتار ورودی را بازنویسی میکند تا رسمیتر و شبیه کسبوکار شود و از لحنی محترمانه استفاده میکند.
- بازنویسی: نوشتار ورودی را بااستفاده از کلمات و ساختارهای جملهای متفاوت بازنویسی میکند، درحالیکه معنای اصلی را حفظ میکند.
درخواستها حداقل یک پیشنهاد برمیگردانند. اگر چندین پیشنهاد برگردانده شود، نتایج براساس اطمینان نزولی مرتب خواهند شد.
نتایج نمونه
| ورودی | سبک بازنویسی | برونداد |
| میخواهید ملاقات کنیم و بیشتر صحبت کنیم؟ | حرفهای | مایلید دوباره ملاقات کنید تا درباره این موضوع بیشتر صحبت کنیم؟ |
| از شما دعوت میکنم که شنبه شب در دورهمی غیررسمی در محل اقامتم شرکت کنید | کوتاه کردن | مایلید شنبه عصر برای یک دورهمی خودمانی به خانه من بیایید؟ |
| رویداد موفقیتآمیز بود | بسط دادن | این رویداد با موفقیت چشمگیری برگزار شد و از همه انتظارات ما فراتر رفت و پیروزی بزرگی را رقم زد. |
| بیایید بهزودی قهوه بخوریم | اموجیدار کردن | بیایید بهزودی قهوه بخوریم ☕ 👋. |
| گزارش را تا پایان روز ارائه کنید | دوستانه | لطفاً گزارش را تا پایان روز همرسانی کنید. |
| سلام، آن چیز را در اسرع وقت نیاز دارم | حرفهای | لطفاً در اولین فرصت ممکن سند درخواستشده را ارائه دهید. |
| پروژه از برنامه زمانی عقب است | بازتوصیف | برای برآورده کردن مهلت مقرر اصلی، جدول زمانی پروژه باید اصلاح شود |
شروع به کار
برای شروع کار با GenAI Rewriting API، این وابستگی را به فایل ساخت پروژهتان اضافه کنید.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
سپس، کارخواه [Rewriter][1] را با گزینههای موردنیاز نمونهسازی کنید، بررسی کنید آیا ویژگیهای مدل دروندستگاهی موردنیاز دردسترس است (و درصورت نیاز آنها را بارگیری کنید)، نوشتار ورودیتان را بهعنوان درخواست آماده کنید، فرایند بازنویسی را برای دریافت پیشنهادها اجرا کنید، و منابع را آزاد کنید.
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()
جاوا
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();
ویژگیهای پشتیبانیشده و محدودیتها
«میانای برنامهسازی کاربردی بازنویسی هوش مصنوعی زایا» از زبانهای زیر پشتیبانی میکند: انگلیسی، ژاپنی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی، و کرهای، و این زبانها در [RewriterOptions.Language][۲] تعریف شدهاند. ورودی باید کمتر از ۲۵۶ نشانه باشد.
دردسترس بودن پیکربندی ویژگی خاص (مشخصشده با
RewriterOptions) ممکن است بسته به پیکربندی دستگاه خاص
و مدلهایی که در دستگاه بارگیری شده است متفاوت باشد.
مطمئنترین راه برای توسعهدهندگان جهت اطمینان از اینکه ویژگی API موردنظر در دستگاهی با RewriterOptions درخواستی پشتیبانی میشود، فراخوانی روش [checkFeatureStatus()][3] است. این روش وضعیت قطعی دردسترس بودن ویژگی در دستگاه را در زمان اجرا ارائه میدهد.
مشکلات رایج راهاندازی
میاناهای برنامهسازی کاربردی ML Kit GenAI برای دسترسی به Gemini Nano به برنامه Android AICore متکی هستند. وقتی دستگاه بهتازگی راهاندازی شده است (ازجمله بازنشانی)، یا برنامه AICore بهتازگی بازنشانی شده است (مثلاً پاک کردن دادهها، حذف نصب و سپس نصب مجدد)، ممکن است برنامه AICore زمان کافی برای تکمیل مقداردهی اولیه (ازجمله بارگیری جدیدترین پیکربندیها از سرور) نداشته باشد. درنتیجه، ممکن است «میاناهای برنامهسازی کاربردی هوش مصنوعی زایا در ML Kit» عملکرد موردانتظار را نداشته باشند. در اینجا پیامهای خطای رایج راهاندازی که ممکن است ببینید و نحوه رسیدگی به آنها آورده شده است:
| نمونه پیام خطا | نحوه رسیدگی |
| AICore با خطای نوع ۴-CONNECTION_ERROR و کد خطای ۶۰۱-BINDING_FAILURE ناموفق بود: سرویس AICore پیوند نشد. | این اتفاق ممکن است زمانی رخ دهد که برنامه را بااستفاده از ML Kit GenAI APIs بلافاصله پساز راهاندازی دستگاه نصب کنید یا زمانی که AICore پساز نصب برنامه شما حذف نصب شود. بهروزرسانی برنامه AICore و سپس بازنصب کردن برنامه باید مشکل را برطرف کند. |
| AICore با خطای نوع ۳-PREPARATION_ERROR و کد خطای ۶۰۶-FEATURE_NOT_FOUND ناموفق بود: ویژگی ... دردسترس نیست. |
این اتفاق ممکن است زمانی رخ دهد که AICore بارگیری جدیدترین پیکربندیها را بهپایان نرسانده باشد. وقتی دستگاه به اینترنت متصل باشد، معمولاً چند دقیقه تا چند ساعت طول میکشد تا بهروز شود. بازراهاندازی دستگاه میتواند بهروزرسانی را تسریع کند.
توجه داشته باشید که اگر قفل bootloader دستگاه باز باشد، این خطا را نیز خواهید دید—این API از دستگاههای دارای bootloader باز پشتیبانی نمیکند. |
| AICore با خطای نوع ۱-DOWNLOAD_ERROR و کد خطای ۰-UNKNOWN ناموفق بود: ویژگی ... با وضعیت ناموفق ۰ و خطای esz: UNAVAILABLE ناموفق بود: میزبان ... شناسایی نشد | اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید، و دوباره امتحان کنید. |