با استفاده از GenAI Proofreading API ML Kit، می توانید به کاربران کمک کنید گرامر و املای خود را روی قطعات کوتاه متن بررسی کنند.
قابلیت های کلیدی
- تصحیح متن وارد شده از طریق صفحه کلید یا صدا
- درخواست ها حداقل یک پیشنهاد را برمی گرداند. اگر چندین پیشنهاد برگردانده شود، نتایج بر اساس اطمینان نزولی مرتب خواهند شد.
نتایج نمونه
ورودی | نوع ورودی | خروجی |
این یک پیام کوتاه است | صفحه کلید | این یک پیام کوتاه است |
این پروژه تقریباً کامل است اما نیاز به بازنگری دارد | صفحه کلید | پروژه تقریبا تکمیل شده است اما نیاز به بازنگری دارد |
لطفا من را در خرس بخور، | صدا | لطفا با من در بار ملاقات کنید. |
شروع به کار
برای شروع کار با GenAI Proofreading API، این وابستگی را به فایل ساخت پروژه خود اضافه کنید.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
سپس، یک کلاینت Proofreader
را با تنظیمات زبان و نوع ورودی خاص پیکربندی و دریافت کنید. بررسی کنید و مطمئن شوید که ویژگیهای مدل موجود در دستگاه لازم است (در صورت نیاز، بارگیری را شروع کنید). متنی را که میخواهید تجزیه و تحلیل کنید در یک ProofreadingRequest
ارسال کنید، استنباط تصحیح را اجرا کنید و در نهایت پیشنهادات برگشتی را برای تصحیح متن پردازش کنید.
کاتلین
val textToProofread = "The praject is compleet but needs too be reviewd"
// Define task with required input and output format
val options = ProofreaderOptions.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that
// the user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available
// languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build()
val proofreader = Proofreading.getClient(options)
suspend fun prepareAndStartProofread() {
// Check feature availability, status will be one of the
// following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
val featureStatus = proofreader.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.
proofreader.downloadFeature(object : DownloadCallback {
override fun onDownloadStarted(bytesToDownload: Long) { }
override fun onDownloadFailed(e: GenAiException) { }
override fun onDownloadProgress(
totalBytesDownloaded: Long
) {}
override fun onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader)
}
})
} 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
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader)
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader)
}
}
suspend fun startProofreadingRequest(
text: String, proofreader: Proofreader
) {
// Create task request
val proofreadingRequest =
ProofreadingRequest.builder(text).build()
// Start proofreading 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 proofreadingResults =
proofreader.runInference(proofreadingRequest).await().results
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest) { newText ->
// // show new text in UI
// }
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close()
جاوا
String textToProofread = "The praject is compleet but needs too be reviewd";
// Define task with required input and output format
ProofreaderOptions proofreaderOptions =
ProofreaderOptions
.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that the
// user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build();
Proofreader proofreader = Proofreading.getClient(proofreaderOptions);
void prepareAndStartProofread(Context context) throws ExecutionException,
InterruptedException {
// Check feature availability, status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
try {
int featureStatus = proofreader.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.
proofreader.downloadFeature(new DownloadCallback() {
@Override
public void onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader);
}
@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
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader);
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader);
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
void startProofreadingRequest(String text, Proofreader proofreader) {
// Create task request
ProofreadingRequest proofreadingRequest = ProofreadingRequest
.builder(text).build();
try {
// Start proofreading request with non-streaming response
// More than 1 result may be returned. If multiple suggestions are
// returned, results will be sorted by descending confidence.
proofreader.runInference(proofreadingRequest).get().getResults();
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest, 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()
proofreader.close();
چگونه مدل انواع ورودی های مختلف را مدیریت می کند
هنگامی که مدل اطلاعات بیشتری در مورد نحوه وارد کردن متن (صفحه کلید یا صدا) توسط کاربر داشته باشد، بهتر می تواند نوع خطاهای موجود را پیش بینی کند. نوشتار وارد شده با صفحه کلید بیشتر مستعد غلط املایی با کلیدهای نزدیک است، در حالی که متن وارد شده با صدا بیشتر مستعد غلط املایی کلمات با تلفظ مشابه است.
ویژگی ها و محدودیت های پشتیبانی شده
تصحیح برای زبانهای زیر پشتیبانی میشود: انگلیسی، ژاپنی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی و کرهای، و در ProofreaderOptions.Language
تعریف شدهاند. ورودی باید کمتر از 256 توکن باشد.
در دسترس بودن پیکربندی ویژگی خاص (مشخص شده توسط ProofreaderOptions
) ممکن است بسته به پیکربندی دستگاه خاص و مدل هایی که در دستگاه دانلود شده اند متفاوت باشد.
مطمئن ترین راه برای توسعه دهندگان برای اطمینان از اینکه ویژگی API مورد نظر در دستگاهی با ProofreaderOptions
درخواستی پشتیبانی می شود، فراخوانی متد 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: غیرقابل دسترس: قادر به رفع میزبان نیست ... | اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید و دوباره امتحان کنید. |