باستخدام واجهة برمجة التطبيقات GenAI Rewriting من ML Kit، يمكنك تلقائيًا مساعدة المستخدمين في إعادة كتابة رسائل المحادثة أو مقاطع المحتوى القصيرة بأسلوب أو نبرة مختلفة.
قد يجد المستخدمون أنّه من المفيد الحصول على اقتراحات حول كيفية إعادة كتابة جزء من المحتوى في الحالات التالية:
- إعادة هيكلة الرسالة لتكون أكثر احترافية عند التواصل مع الجهات المعنية
- تقصير رسالة لتكون أكثر ملاءمة للنشر على منصات وسائل التواصل الاجتماعي
- إعادة صياغة رسالة للمتحدثين بلغة غير لغتهم الأم الذين يبحثون عن طرق بديلة للتعبير عن الرسالة
الإمكانات الرئيسية
يمكن لواجهة برمجة التطبيقات GenAI Rewriting API من ML Kit إعادة كتابة مقاطع قصيرة من المحتوى بأحد الأساليب التالية:
- التوسيع: لتوسيع النص المدخل بإضافة المزيد من التفاصيل واللغة الوصفية
- Emojify: يضيف هذا الخيار إيموجي مناسبًا إلى النص المدخل، ما يجعله أكثر تعبيرًا ومرحًا.
- الاختصار: يضغط النص المدخل إلى نسخة أقصر مع الحفاظ على الرسالة الأساسية.
- ودّي: يعيد كتابة النص المدخل ليكون أكثر بساطة وسهولة، باستخدام نبرة تحاورية.
- احترافي: يعيد كتابة النص المدخل ليكون أكثر رسمية وملاءمةً للأعمال، وذلك باستخدام أسلوب محترم.
- إعادة الصياغة: لإعادة كتابة النص المُدخَل باستخدام كلمات وبِنى جمل مختلفة مع الحفاظ على المعنى الأصلي
ستعرض الطلبات اقتراحًا واحدًا على الأقل. إذا تم عرض اقتراحات متعددة، سيتم ترتيب النتائج حسب مستوى الثقة تنازليًا.
أمثلة النتائج
الإدخال | نمط إعادة الكتابة | الناتج |
هل تريد الاجتماع لمناقشة الموضوع بشكل أكبر؟ | الرزمة الاحترافية | هل يهمّك الاجتماع مرة أخرى لمناقشة هذا الموضوع بالتفصيل؟ |
أودّ دعوتك إلى لقاء غير رسمي في منزلي مساء السبت المقبل. | تطبيق أسلوب مختصر | هل يهمّك أن نلتقي في منزلي مساء السبت؟ |
تم تنفيذ الحدث بنجاح | تطبيق أسلوب مفصَّل | لقد حقق الحدث نجاحًا باهرًا، وتجاوزت النتائج كل توقعاتنا، ما أثبت أنّه كان إنجازًا كبيرًا. |
لنذهب لشرب القهوة معًا قريبًا | إضافة إيموجي | لنذهب لشرب القهوة ☕ قريبًا 👋. |
تقديم التقرير بحلول نهاية اليوم | مباراة ودّية | هل يمكنك مشاركة التقرير بحلول نهاية اليوم؟ |
مرحبًا، أحتاج إلى هذا المنتج في أسرع وقت ممكن | الرزمة الاحترافية | يُرجى تقديم المستند المطلوب في أقرب وقت ممكن. |
المشروع متأخر عن الجدول الزمني | إعادة صياغة | يجب تعديل الجدول الزمني للمشروع للالتزام بالموعد النهائي الأصلي |
البدء
للبدء باستخدام GenAI Rewriting API، أضِف هذه التبعية إلى ملف الإصدار الخاص بمشروعك.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
بعد ذلك، أنشئ مثيلاً لعميل Rewriter
باستخدام الخيارات المطلوبة، وتحقَّق مما إذا كانت ميزات النموذج المطلوبة على الجهاز متاحة (ونزِّلها إذا لزم الأمر)، وأعِدّ نص الإدخال كطلب، ونفِّذ عملية إعادة الكتابة للحصول على اقتراحات، ثم حرِّر الموارد.
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();
الميزات المتوفّرة والقيود
تتوافق واجهة برمجة التطبيقات GenAI Rewriting API مع اللغات التالية: الإنجليزية واليابانية والفرنسية والألمانية والإيطالية والإسبانية والكورية، ويتم تحديدها في RewriterOptions.Language
. يجب أن يكون عدد الرموز المميزة أقل من 256 رمزًا.
قد يختلف مدى توفّر إعدادات الميزة المحددة (المحددة بواسطة RewriterOptions
) حسب إعدادات الجهاز المحددة والنماذج التي تم تنزيلها على الجهاز.
الطريقة الأكثر موثوقية التي يمكن للمطوّرين اتّباعها لضمان توفّر ميزة واجهة برمجة التطبيقات المطلوبة على جهاز يتضمّن RewriterOptions
المطلوب هي استدعاء الطريقة checkFeatureStatus()
. توفّر هذه الطريقة الحالة النهائية لتوفّر الميزة على الجهاز في وقت التشغيل.
مشاكل الإعداد الشائعة
تعتمد واجهات برمجة التطبيقات المستنِدة إلى الذكاء الاصطناعي التوليدي في ML Kit على تطبيق Android AICore للوصول إلى Gemini Nano. عند إعداد جهاز للتو (بما في ذلك إعادة الضبط)، أو إعادة ضبط تطبيق AICore للتو (مثل محو البيانات، وإلغاء التثبيت ثم إعادة التثبيت)، قد لا يتوفّر لتطبيق AICore وقت كافٍ لإنهاء عملية التهيئة (بما في ذلك تنزيل أحدث الإعدادات من الخادم). نتيجةً لذلك، قد لا تعمل واجهات برمجة التطبيقات المستندة إلى الذكاء الاصطناعي التوليدي في ML Kit على النحو المتوقّع. في ما يلي رسائل الخطأ الشائعة التي قد تظهر لك أثناء عملية الإعداد وكيفية التعامل معها:
مثال على رسالة خطأ | كيفية التعامل معها |
تعذّر تنفيذ AICore بسبب نوع الخطأ 4-CONNECTION_ERROR ورمز الخطأ 601-BINDING_FAILURE: تعذّر ربط خدمة AICore. | قد يحدث ذلك عند تثبيت التطبيق باستخدام واجهات برمجة تطبيقات GenAI في ML Kit بعد إعداد الجهاز مباشرةً أو عند إلغاء تثبيت AICore بعد تثبيت تطبيقك. يجب أن يؤدي تحديث تطبيق AICore ثم إعادة تثبيت تطبيقك إلى حلّ المشكلة. |
تعذّر تنفيذ AICore بسبب الخطأ من النوع 3-PREPARATION_ERROR ورمز الخطأ 606-FEATURE_NOT_FOUND: الميزة ... غير متاحة. |
قد يحدث ذلك عندما لا ينتهي تطبيق AICore من تنزيل أحدث الإعدادات. عندما يكون الجهاز متصلاً بالإنترنت، يستغرق التحديث عادةً بضع دقائق إلى بضع ساعات. يمكن أن تؤدي إعادة تشغيل الجهاز إلى تسريع عملية التحديث.
يُرجى العِلم أنّه في حال تم إلغاء قفل أداة تحميل التشغيل على الجهاز، سيظهر لك هذا الخطأ أيضًا، لأنّ واجهة برمجة التطبيقات هذه لا تتوافق مع الأجهزة التي تم إلغاء قفل أداة تحميل التشغيل عليها. |
تعذّر تنفيذ AICore بسبب نوع الخطأ 1-DOWNLOAD_ERROR ورمز الخطأ 0-UNKNOWN: تعذّر تنفيذ الميزة ... مع حالة التعذّر 0 والخطأ esz: UNAVAILABLE: يتعذّر تحليل المضيف ... | يُرجى الحفاظ على الاتصال بالشبكة والانتظار بضع دقائق ثم إعادة المحاولة. |