با GenAI Summarization API کیت ML، میتوانید بهطور خودکار خلاصهای از مقالات و مکالمات را بهعنوان فهرستی از نقاط گلوله تولید کنید. این به کاربران کمک می کند تا حجم بزرگی از متن را درک کنند.
خلاصهسازی از هوش مصنوعی مولد روی دستگاه سود میبرد، زیرا نگرانیهای مربوط به حریم خصوصی دادهها و کارایی هزینه را برطرف میکند. برنامههایی که چتهای شخصی، ایمیلها، یادداشتها و یادآوریها را خلاصه میکنند، اغلب اطلاعات حساس را مدیریت میکنند و پردازش روی دستگاه را برای حفظ حریم خصوصی کاربر مهم میکنند. علاوه بر این، وظایف خلاصهسازی، بهویژه آنهایی که زمینههای طولانی یا موارد زیادی دارند، میتوانند به قدرت پردازش قابل توجهی نیاز داشته باشند. پردازش این محتوا در دستگاه، بار سرور را کاهش می دهد و هزینه های سرویس را کاهش می دهد، در حالی که داده های کاربر را خصوصی نگه می دارد.
قابلیت های کلیدی
GenAI Summarization API قابلیت های زیر را پوشش می دهد:
- خلاصه کردن متن، طبقه بندی شده به عنوان مقاله یا گفتگو.
- خلاصه خروجی در یک، دو یا سه گلوله.
شروع کنید
API خلاصه سازی ML Kit را به عنوان یک وابستگی در پیکربندی build.gradle
خود اضافه کنید.
implementation("com.google.mlkit:genai-summarization:1.0.0-beta1")
سپس کد را در پروژه خود پیاده سازی کنید:
- یک شی
Summarizer
ایجاد کنید. - این ویژگی را در صورت قابل دانلود بودن دانلود کنید.
- یک درخواست خلاصه سازی ایجاد کنید.
- استنتاج را اجرا کنید و نتیجه را بازیابی کنید.
کاتلین
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()
جاوا
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>
این مدل را قادر میسازد تا با ارائه درک بهتری از گفتگو و تعاملات، خلاصهای دقیقتر تولید کند.
ویژگی ها و محدودیت های پشتیبانی شده
ورودی باید کمتر از 4000 توکن (یا تقریباً 3000 کلمه انگلیسی) باشد. اگر ورودی بیش از 4000 توکن باشد، این گزینه ها را در نظر بگیرید:
- خلاصه کردن 4000 توکن اول را در اولویت قرار دهید. آزمایش نشان میدهد که معمولاً نتایج خوبی برای ورودیهای طولانیتر به همراه دارد. با فراخوانی
setLongInputAutoTruncationEnabled
قطع خودکار را روشن کنید تا ورودی اضافی به طور خودکار کوتاه شود. - ورودی را به گروه های 4000 توکن تقسیم کنید و آنها را به صورت جداگانه خلاصه کنید.
- راه حل ابری را در نظر بگیرید که برای ورودی بزرگتر مناسب تر است.
برای InputType.ARTICLE
، ورودی همچنین باید بیش از 400 کاراکتر باشد و مدل زمانی که مقاله حداقل 300 کلمه باشد بهترین عملکرد را دارد.
GenAI Summarization API از انگلیسی، ژاپنی و کره ای پشتیبانی می کند و در SummarizerOptions.Language
تعریف شده است.
در دسترس بودن پیکربندی ویژگی خاص (که توسط SummarizerOptions
مشخص شده است) ممکن است بسته به پیکربندی دستگاه خاص و مدل هایی که در دستگاه دانلود شده اند متفاوت باشد.
مطمئن ترین راه برای توسعه دهندگان برای اطمینان از اینکه ویژگی API مورد نظر در دستگاهی با SummarizerOptions
درخواستی پشتیبانی می شود، فراخوانی متد 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: غیرقابل دسترس: قادر به رفع میزبان نیست ... | اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید و دوباره امتحان کنید. |