GenAI Rewriting API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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: แก้ไขโฮสต์ ... ไม่ได้ เชื่อมต่อเครือข่ายไว้ รอสักครู่ แล้วลองอีกครั้ง