باستخدام واجهة برمجة التطبيقات GenAI Summarization API من ML Kit، يمكنك إنشاء ملخّصات تلقائيًا للمقالات والمحادثات في شكل قائمة بنقاط تعداد. ويساعد ذلك المستخدمين في فهم النصوص الطويلة.
تستفيد ميزة التلخيص من الذكاء الاصطناعي التوليدي على الجهاز لأنّها تعالج المخاوف بشأن خصوصية البيانات وفعالية التكلفة. تتعامل التطبيقات التي تلخّص المحادثات الشخصية والرسائل الإلكترونية والملاحظات والتذكيرات غالبًا مع معلومات حساسة، ما يجعل المعالجة على الجهاز مهمة للحفاظ على خصوصية المستخدم. بالإضافة إلى ذلك، يمكن أن تتطلّب مهام التلخيص، خاصةً تلك التي تتضمّن سياقات طويلة أو العديد من العناصر، قدرًا كبيرًا من قوة المعالجة. تؤدي معالجة هذا المحتوى على الجهاز إلى تقليل حِمل الخادم وخفض تكاليف العرض، مع الحفاظ على خصوصية بيانات المستخدمين.
الإمكانات الرئيسية
تتضمّن واجهة برمجة التطبيقات GenAI Summarization API الإمكانات التالية:
- تلخيص النص، المصنّف كمقالة أو محادثة
- تلخيص النتائج في نقطة أو نقطتين أو ثلاث نقاط
البدء
أضِف واجهة برمجة التطبيقات الخاصة بالتلخيص في ML Kit كعنصر تابع في build.gradle
الإعدادات.
implementation("com.google.mlkit:genai-summarization:1.0.0-beta1")
بعد ذلك، نفِّذ الرمز في مشروعك:
- أنشئ عنصر
Summarizer
. - نزِّل الميزة إذا كان يمكن تنزيلها.
- إنشاء طلب تلخيص
- تنفيذ الاستدلال واسترداد النتيجة
Kotlin
val articleToSummarize = "Announcing a set of on-device GenAI APIs..."
// Define task with required input type, output type, and language
val summarizerOptions = SummarizerOptions.builder(context)
.setInputType(InputType.ARTICLE)
.setOutputType(OutputType.ONE_BULLET)
.setLanguage(Language.ENGLISH)
.build()
val summarizer = Summarization.getClient(summarizerOptions)
suspend fun prepareAndStartSummarization() {
// Check feature availability. Status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
val featureStatus = summarizer.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.
summarizer.downloadFeature(object : DownloadCallback {
override fun onDownloadStarted(bytesToDownload: Long) { }
override fun onDownloadFailed(e: GenAiException) { }
override fun onDownloadProgress(totalBytesDownloaded: Long) {}
override fun onDownloadCompleted() {
startSummarizationRequest(articleToSummarize, summarizer)
}
})
} 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.
startSummarizationRequest(articleToSummarize, summarizer)
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startSummarizationRequest(articleToSummarize, summarizer)
}
}
fun startSummarizationRequest(text: String, summarizer: Summarizer) {
// Create task request
val summarizationRequest = SummarizationRequest.builder(text).build()
// Start summarization request with streaming response
summarizer.runInference(summarizationRequest) { newText ->
// Show new text in UI
}
// You can also get a non-streaming response from the request
// val summarizationResult = summarizer.runInference(
// summarizationRequest).get().summary
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
summarizer.close()
Java
String articleToSummarize = "Announcing: a set of on-device GenAI AI APIs.";
// Define task with required input type, output type, and language
SummarizerOptions summarizerOptions =
SummarizerOptions.builder(context)
.setInputType(SummarizerOptions.InputType.ARTICLE)
.setOutputType(SummarizerOptions.OutputType.ONE_BULLET)
.setLanguage(SummarizerOptions.Language.ENGLISH)
.build();
Summarizer summarizer = Summarization.getClient(summarizerOptions);
void prepareAndStartSummarization()
throws ExecutionException, InterruptedException {
// Check feature availability. Status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
try {
int featureStatus = summarizer.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.
summarizer.downloadFeature(new DownloadCallback() {
@Override
public void onDownloadCompleted() {
startSummarizationRequest(articleToSummarize, summarizer);
}
@Override
public void onDownloadFailed(GenAiException e) { /* handle error */ }
@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.
startSummarizationRequest(articleToSummarize, summarizer);
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startSummarizationRequest(articleToSummarize, summarizer);
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
void startSummarizationRequest(String text, Summarizer summarizer) {
// Create task request
SummarizationRequest summarizationRequest =
SummarizationRequest.builder(text).build();
// Start summarization request with streaming response
summarizer.runInference(summarizationRequest, newText -> {
// Show new text in UI
});
// You can also get a non-streaming response from the request
// ListenableFuture<SummarizationResult> summarizationResult
// = summarizer.runInference(summarizationRequest);
// String summary = summarizationResult.get().getSummary();
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
summarizer.close();
طريقة تعامل النموذج مع أنواع الإدخال المختلفة
عندما يتم تحديد إدخال النص على أنّه InputType.CONVERSATION
، يتوقّع النموذج إدخالاً بالتنسيق التالي:
<name>: <message>
<name2>: <message2>
<name>: <message3>
<name3>: <message4>
يتيح ذلك للنموذج تقديم ملخّص أكثر دقة من خلال توفير فهم أفضل للمحادثة والتفاعلات.
الميزات المتوفّرة والقيود
يجب أن يكون الإدخال أقل من 4,000 رمز مميز (أو حوالي 3,000 كلمة باللغة الإنجليزية). إذا كان عدد الرموز المميزة في الإدخال يتجاوز 4, 000 رمز، ننصحك بالخيارات التالية:
- منح الأولوية لتلخيص أول 4000 رمز مميز تشير الاختبارات إلى أنّ ذلك يؤدي عادةً إلى نتائج جيدة عند استخدام مدخلات أطول. ننصحك بتفعيل ميزة الاقتطاع التلقائي من خلال استدعاء
setLongInputAutoTruncationEnabled
ليتم اقتطاع الإدخال الإضافي تلقائيًا. - قسِّم المدخلات إلى مجموعات من 4, 000 رمز مميز، ولخِّص كل مجموعة على حدة.
- ننصحك باستخدام حلّ مستند إلى السحابة الإلكترونية يكون أكثر ملاءمةً للإدخال الأكبر.
بالنسبة إلى InputType.ARTICLE
، يجب أن يكون عدد الأحرف في الإدخال أكثر من 400 حرف، ويقدّم النموذج أفضل أداء عندما تتألف المقالة من 300 كلمة على الأقل.
تتوافق واجهة برمجة التطبيقات GenAI Summarization API مع اللغات الإنجليزية واليابانية والكورية، ويتم تحديدها في SummarizerOptions.Language
.
قد يختلف مدى توفّر إعدادات الميزة المحدّدة (المحدّدة بواسطة
SummarizerOptions
) حسب إعدادات الجهاز المحدّد والطُرز التي تم تنزيلها على الجهاز.
الطريقة الأكثر موثوقية التي يمكن للمطوّرين اتّباعها لضمان توفّر ميزة واجهة برمجة التطبيقات المطلوبة على جهاز يتضمّن SummarizerOptions
المطلوب هي استدعاء الطريقة 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: يتعذّر تحليل المضيف ... | يُرجى الحفاظ على الاتصال بالشبكة والانتظار بضع دقائق ثم إعادة المحاولة. |