GenAI Rewriting API

با استفاده از رابط برنامه‌نویسی کاربردی (API) بازنویسی GenAI در ML Kit، می‌توانید به طور خودکار به کاربران کمک کنید تا پیام‌های چت یا بخش‌های کوتاه محتوا را با سبک یا لحنی متفاوت بازنویسی کنند.

کاربران ممکن است دریافت پیشنهاداتی در مورد چگونگی بازنویسی یک محتوا در موارد زیر را مفید بیابند:

  • بازسازی پیام برای حرفه‌ای‌تر شدن در هنگام ارتباط با ذینفعان
  • کوتاه کردن پیام برای مناسب‌تر شدن برای ارسال در پلتفرم‌های رسانه‌های اجتماعی
  • بازنویسی یک پیام برای افراد غیربومی که به دنبال راه‌های جایگزین برای انتقال پیام هستند

قابلیت‌های کلیدی

رابط برنامه‌نویسی کاربردی (API) بازنویسی GenAI کیت ML می‌تواند بخش‌های کوتاه محتوا را به یکی از سبک‌های زیر بازنویسی کند:

  • شرح و بسط : متن ورودی را با جزئیات بیشتر و زبان توصیفی بسط می‌دهد.
  • Emojify : ایموجی‌های مرتبط را به متن ورودی اضافه می‌کند و آن را رساتر و سرگرم‌کننده‌تر می‌کند.
  • کوتاه کردن : متن ورودی را به نسخه کوتاه‌تری فشرده می‌کند و پیام اصلی را دست‌نخورده نگه می‌دارد.
  • دوستانه : متن ورودی را با استفاده از لحنی محاوره‌ای، غیررسمی‌تر و قابل فهم‌تر بازنویسی می‌کند.
  • حرفه‌ای : متن ورودی را با استفاده از لحنی محترمانه، رسمی‌تر و رسمی‌تر می‌نویسد.
  • بازنویسی : متن ورودی را با استفاده از کلمات و ساختارهای جمله متفاوت بازنویسی می‌کند، در حالی که معنای اصلی آن حفظ می‌شود.

درخواست‌ها حداقل یک پیشنهاد را برمی‌گردانند. اگر چندین پیشنهاد برگردانده شود، نتایج بر اساس اطمینان نزولی مرتب می‌شوند.

نتایج مثال

ورودی بازنویسی سبک خروجی
آیا مایلید همدیگر را ببینیم تا بیشتر صحبت کنیم؟ حرفه‌ای آیا مایلید دوباره برای بحث بیشتر در این مورد جلسه داشته باشیم؟
مایلم از شما خواهش کنم که در یک مهمانی غیررسمی در منزلم در عصر شنبه آینده، افتخار همراهی با من را داشته باشید. کوتاه کردن آیا مایلید عصر شنبه برای یک دورهمی خودمانی به خانه من بیایید؟
این رویداد با موفقیت انجام شد استادانه شرح دادن این رویداد یک موفقیت چشمگیر بود، از تمام انتظارات ما فراتر رفت و یک پیروزی قاطع بود.
بیایید به زودی قهوه بخوریم ایموجیفای بیا یه وقت دیگه با هم قهوه بخوریم 👋.
ارائه گزارش تا پایان روز دوستانه میشه لطفا گزارش رو تا آخر وقت امروز منتشر کنید؟
هی، هر چه زودتر به اون چیز نیاز داری حرفه‌ای میشه لطفا هر چه سریعتر مدرک مورد نظر رو ارائه بدید؟
پروژه از برنامه عقب است بازنویسی جدول زمانی پروژه برای مطابقت با مهلت اولیه نیاز به تنظیم دارد

شروع به کار

برای شروع کار با GenAI Rewriting API، این وابستگی را به فایل ساخت پروژه خود اضافه کنید.

implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")

سپس، کلاینت Rewriter را با گزینه‌های مورد نیاز نمونه‌سازی کنید، بررسی کنید که آیا ویژگی‌های مدل مورد نیاز روی دستگاه موجود است یا خیر (و در صورت لزوم آنها را دانلود کنید)، متن ورودی خود را به عنوان یک درخواست آماده کنید، فرآیند بازنویسی را برای دریافت پیشنهادات اجرا کنید و منابع را آزاد کنید.

کاتلین

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();

ویژگی‌ها و محدودیت‌های پشتیبانی‌شده

رابط برنامه‌نویسی کاربردی (API) بازنویسی GenAI از زبان‌های زیر پشتیبانی می‌کند: انگلیسی، ژاپنی، فرانسوی، آلمانی، ایتالیایی، اسپانیایی و کره‌ای، و این زبان‌ها در RewriterOptions.Language تعریف شده‌اند. ورودی باید کمتر از ۲۵۶ توکن باشد.

در دسترس بودن پیکربندی ویژگی خاص (مشخص شده توسط RewriterOptions ) ممکن است بسته به پیکربندی دستگاه خاص و مدل‌هایی که در دستگاه دانلود شده‌اند، متفاوت باشد.

مطمئن‌ترین راه برای توسعه‌دهندگان جهت اطمینان از پشتیبانی ویژگی API مورد نظر در دستگاهی با RewriterOptions درخواستی، فراخوانی متد checkFeatureStatus() است. این متد وضعیت قطعی در دسترس بودن ویژگی را در زمان اجرا روی دستگاه ارائه می‌دهد.

مشکلات رایج در راه‌اندازی

رابط‌های برنامه‌نویسی کاربردی ML Kit GenAI برای دسترسی به Gemini Nano به برنامه Android AICore متکی هستند. هنگامی که یک دستگاه تازه راه‌اندازی شده (شامل تنظیم مجدد) یا برنامه AICore تازه تنظیم مجدد شده است (مثلاً پاک کردن داده‌ها، حذف نصب و سپس نصب مجدد)، ممکن است برنامه AICore زمان کافی برای تکمیل مقداردهی اولیه (از جمله دانلود آخرین پیکربندی‌ها از سرور) نداشته باشد. در نتیجه، رابط‌های برنامه‌نویسی کاربردی ML Kit GenAI ممکن است آنطور که انتظار می‌رود عمل نکنند. در اینجا پیام‌های خطای راه‌اندازی رایجی که ممکن است مشاهده کنید و نحوه مدیریت آنها آمده است:

مثال پیام خطا نحوه رسیدگی
AICore با خطای نوع ۴-CONNECTION_ERROR و کد خطای ۶۰۱-BINDING_FAILURE ناموفق بود: سرویس AICore نتوانست اتصال برقرار کند. این مشکل می‌تواند زمانی رخ دهد که شما برنامه را با استفاده از APIهای ML Kit GenAI بلافاصله پس از راه‌اندازی دستگاه نصب می‌کنید یا زمانی که AICore پس از نصب برنامه شما حذف نصب می‌شود. به‌روزرسانی برنامه AICore و سپس نصب مجدد برنامه باید این مشکل را برطرف کند.
AICore با خطای نوع ۳-PREPARATION_ERROR و کد خطای ۶۰۶-FEATURE_NOT_FOUND ناموفق بود: ویژگی ... در دسترس نیست. این اتفاق ممکن است زمانی رخ دهد که AICore دانلود آخرین تنظیمات را تمام نکرده باشد. وقتی دستگاه به اینترنت متصل است، معمولاً چند دقیقه تا چند ساعت طول می‌کشد تا به‌روزرسانی شود. راه‌اندازی مجدد دستگاه می‌تواند سرعت به‌روزرسانی را افزایش دهد.

توجه داشته باشید که اگر بوت لودر دستگاه آنلاک شده باشد، این خطا را نیز مشاهده خواهید کرد - این API از دستگاه‌هایی با بوت لودر آنلاک شده پشتیبانی نمی‌کند.
AICore با خطای نوع ۱-DOWNLOAD_ERROR و کد خطا ۰-UNKNOWN شکست خورد: ویژگی ... با وضعیت خرابی ۰ و خطای esz شکست خورد: UNAVAILABLE: قادر به حل مشکل میزبان نیست ... اتصال شبکه را حفظ کنید، چند دقیقه صبر کنید و دوباره امتحان کنید.

کد نمونه