GenAI Rewriting API

GenAI Rewriting API ของ ML Kit ช่วยให้คุณช่วยผู้ใช้เขียนข้อความแชทหรือเนื้อหาสั้นๆ ใหม่โดยอัตโนมัติด้วยสไตล์หรือโทนที่แตกต่างกันได้

ผู้ใช้อาจเห็นว่าคำแนะนำเกี่ยวกับวิธีเขียนเนื้อหาใหม่มีประโยชน์ในกรณีต่อไปนี้

  • การปรับโครงสร้างข้อความให้ดูเป็นมืออาชีพมากขึ้นเมื่อสื่อสารกับผู้มีส่วนเกี่ยวข้อง
  • การย่อข้อความให้เหมาะกับการโพสต์บนแพลตฟอร์มโซเชียลมีเดียมากขึ้น
  • การเรียบเรียงข้อความใหม่สำหรับผู้ที่ไม่ได้ใช้ภาษาอังกฤษเป็นภาษาแม่ซึ่งกำลังมองหาวิธีอื่นในการ สื่อสารข้อความ

ความสามารถหลัก

GenAI Rewriting API ของ ML Kit สามารถเขียนเนื้อหาสั้นๆ ใหม่ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้

  • ขยายความ: เพิ่มรายละเอียดและภาษาที่อธิบายให้ข้อความสมบูรณ์ยิ่งขึ้น
  • Emojify: เพิ่มอีโมจิที่เกี่ยวข้องลงในข้อความที่ป้อนเพื่อให้ข้อความแสดงอารมณ์และสนุกสนานยิ่งขึ้น
  • ย่อ: ย่อข้อความที่ป้อนให้สั้นลงโดยยังคง ข้อความหลักไว้
  • ปรับให้เป็นกันเอง: เขียนข้อความที่ป้อนใหม่ให้เป็นกันเองและเข้าถึงได้ง่ายขึ้น โดยใช้ระดับภาษาแบบสนทนา
  • เป็นมืออาชีพ: เขียนข้อความที่ป้อนใหม่ให้เป็นทางการและ ดูเป็นธุรกิจมากขึ้น โดยใช้น้ำเสียงที่สุภาพ
  • ปรับเปลี่ยน: เขียนข้อความที่ป้อนใหม่โดยใช้คำและโครงสร้างประโยคที่แตกต่างกัน ในขณะที่ยังคงความหมายเดิมไว้

คำขอจะแสดงคำแนะนำอย่างน้อย 1 รายการ หากมีคำแนะนำหลายรายการ ระบบจะจัดเรียงผลลัพธ์ตามความเชื่อมั่นจากมากไปน้อย

ตัวอย่างผลการแข่ง

อินพุต รูปแบบการเขียนใหม่ เอาต์พุต
คุณต้องการนัดหมายเพื่อพูดคุยเพิ่มเติมไหม ผู้เชี่ยวชาญ คุณสนใจที่จะนัดประชุมอีกครั้งเพื่อพูดคุยเรื่องนี้เพิ่มเติมไหม
ฉันขอเชิญคุณมาร่วมงานสังสรรค์แบบสบายๆ ที่บ้านของฉันในเย็นวันเสาร์ที่จะถึงนี้ ย่อ คุณอยากมาสังสรรค์กันที่บ้านฉัน เย็นวันเสาร์นี้ไหม
กิจกรรมสำเร็จ ลงรายละเอียด งานนี้ประสบความสำเร็จอย่างล้นหลาม เกินความคาดหมาย ทั้งหมดของเรา และพิสูจน์ให้เห็นถึงชัยชนะที่ยิ่งใหญ่
ไว้ไปดื่มกาแฟกันนะ แทรกอีโมจิ ไว้ไปดื่มกาแฟกันนะ ☕ เร็วๆ นี้ 👋
ส่งรายงานภายในสิ้นวัน รอบกระชับมิตร โปรดแชร์รายงานภายในวันนี้
สวัสดี ฉันต้องการสิ่งนั้นโดยเร็วที่สุด ผู้เชี่ยวชาญ โปรดส่งเอกสารที่ขอโดยเร็วที่สุดเมื่อคุณสะดวก
โปรเจ็กต์ล่าช้ากว่ากำหนด ปรับเปลี่ยน ต้องปรับไทม์ไลน์ของโปรเจ็กต์เพื่อให้เป็นไปตามกำหนดเวลาเดิม

เริ่มต้นใช้งาน

หากต้องการเริ่มต้นใช้งาน GenAI Rewriting API ให้เพิ่มทรัพยากร Dependency นี้ลงในไฟล์บิลด์ของโปรเจ็กต์

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

จากนั้นสร้างอินสแตนซ์ไคลเอ็นต์ [Rewriter][1] ด้วยตัวเลือกที่จำเป็น ตรวจสอบว่าฟีเจอร์โมเดลในอุปกรณ์ที่จำเป็นพร้อมใช้งานหรือไม่ (และดาวน์โหลดหากจำเป็น) เตรียมข้อความอินพุตเป็นคำขอ เรียกใช้กระบวนการเขียนใหม่เพื่อรับคำแนะนำ และปล่อยทรัพยากร

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][2] อินพุตควรมีโทเค็นน้อยกว่า 256 รายการ

ความพร้อมใช้งานของการกำหนดค่าฟีเจอร์ที่เฉพาะเจาะจง (ระบุโดย RewriterOptions) อาจแตกต่างกันไปตามการกำหนดค่าของอุปกรณ์นั้นๆ และโมเดลที่ดาวน์โหลดลงในอุปกรณ์

วิธีที่น่าเชื่อถือที่สุดสำหรับนักพัฒนาแอปในการตรวจสอบว่าฟีเจอร์ API ที่ต้องการ รองรับในอุปกรณ์ที่มี RewriterOptions ที่ขอคือการเรียกใช้เมธอด [checkFeatureStatus()][3] วิธีนี้จะให้สถานะที่แน่นอน ของความพร้อมใช้งานฟีเจอร์ในอุปกรณ์ขณะรันไทม์

ปัญหาที่พบบ่อยเกี่ยวกับการตั้งค่า

API ของ GenAI ใน ML Kit จะใช้แอป Android AICore เพื่อเข้าถึง Gemini Nano เมื่อตั้งค่าอุปกรณ์ใหม่ (รวมถึงการรีเซ็ต) หรือรีเซ็ตแอป AICore ใหม่ (เช่น ล้างข้อมูล ถอนการติดตั้งแล้วติดตั้งใหม่) แอป AICore อาจมีเวลาไม่พอที่จะทำการเริ่มต้นให้เสร็จสมบูรณ์ (รวมถึงการดาวน์โหลดการกำหนดค่าล่าสุดจากเซิร์ฟเวอร์) ด้วยเหตุนี้ ML Kit GenAI API จึงอาจทำงานไม่เป็นไปตามที่คาดไว้ ข้อความแสดงข้อผิดพลาดในการตั้งค่าที่พบบ่อยซึ่งคุณอาจเห็นและวิธีจัดการมีดังนี้

ตัวอย่างข้อความแสดงข้อผิดพลาด วิธีจัดการ
AICore ไม่สำเร็จโดยมีข้อผิดพลาดประเภท 4-CONNECTION_ERROR และรหัสข้อผิดพลาด 601-BINDING_FAILURE: บริการ AICore เชื่อมโยงไม่สำเร็จ ปัญหานี้อาจเกิดขึ้นเมื่อคุณติดตั้งแอปโดยใช้ ML Kit GenAI API ทันทีหลังจากตั้งค่าอุปกรณ์ หรือเมื่อถอนการติดตั้ง AICore หลังจากติดตั้งแอปแล้ว การอัปเดตแอป AICore แล้วติดตั้งแอปของคุณอีกครั้งน่าจะช่วยแก้ปัญหานี้ได้
AICore ล้มเหลวโดยมีข้อผิดพลาดประเภท 3-PREPARATION_ERROR และรหัสข้อผิดพลาด 606-FEATURE_NOT_FOUND: ฟีเจอร์ ... ไม่พร้อมใช้งาน ปัญหานี้อาจเกิดขึ้นเมื่อ AICore ดาวน์โหลดการกำหนดค่าล่าสุดไม่เสร็จ เมื่ออุปกรณ์เชื่อมต่อกับอินเทอร์เน็ต โดยปกติแล้วระบบจะใช้เวลา 2-3 นาทีถึง 2-3 ชั่วโมงในการอัปเดต การรีสตาร์ทอุปกรณ์จะช่วยให้อัปเดตได้เร็วขึ้น

โปรดทราบว่าหาก Bootloader ของอุปกรณ์ปลดล็อกอยู่ คุณจะเห็นข้อผิดพลาดนี้ด้วย เนื่องจาก API นี้ไม่รองรับอุปกรณ์ที่มี Bootloader ที่ปลดล็อก
AICore ล้มเหลวโดยมีข้อผิดพลาดประเภท 1-DOWNLOAD_ERROR และรหัสข้อผิดพลาด 0-UNKNOWN: ฟีเจอร์ ... ล้มเหลวโดยมีสถานะความล้มเหลว 0 และข้อผิดพลาด esz: UNAVAILABLE: แก้ไขโฮสต์ ... ไม่ได้ โปรดเชื่อมต่อเครือข่ายไว้ รอสักครู่ แล้วลองอีกครั้ง

โค้ดตัวอย่าง