GenAI Rewriting API

Mit der GenAI Rewriting API von ML Kit können Sie Nutzern helfen, Chatnachrichten oder kurze Inhalte automatisch in einem anderen Stil oder Tonfall neu zu schreiben.

Nutzer finden es möglicherweise hilfreich, Vorschläge zum Umschreiben von Inhalten zu erhalten, wenn:

  • Eine Nachricht umstrukturieren, um professioneller mit Stakeholdern zu kommunizieren
  • Eine Nachricht kürzen, damit sie besser für das Posten auf Social-Media-Plattformen geeignet ist
  • Eine Nachricht für nicht muttersprachliche Nutzer umformulieren, die nach alternativen Möglichkeiten suchen, die Nachricht zu kommunizieren

Hauptmerkmale

Mit der GenAI Rewriting API von ML Kit können kurze Inhalte in einem der folgenden Stile umgeschrieben werden:

  • Genauer ausführen: Der Eingabetext wird mit weiteren Details und beschreibender Sprache ergänzt.
  • Emojify: Fügt dem Eingabetext relevante Emojis hinzu, um ihn ausdrucksstärker und unterhaltsamer zu gestalten.
  • Kürzen: Der Eingabetext wird in eine kürzere Version umgewandelt, wobei die Kernbotschaft beibehalten wird.
  • Freundlich: Der Eingabetext wird so umformuliert, dass er lockerer und zugänglicher klingt.
  • Professionell: Der eingegebene Text wird so umformuliert, dass er formeller und geschäftsmäßiger klingt und ein respektvoller Ton verwendet wird.
  • Umformulieren: Der eingegebene Text wird mit anderen Wörtern und Satzstrukturen neu formuliert, wobei die ursprüngliche Bedeutung beibehalten wird.

Bei Anfragen wird mindestens ein Vorschlag zurückgegeben. Wenn mehrere Vorschläge zurückgegeben werden, werden die Ergebnisse absteigend nach Konfidenz sortiert.

Beispielergebnisse

Eingabe Stil für die Umformulierung Ausgabe
Möchtest du dich mit mir treffen, um mehr zu besprechen? Professionell Hätten Sie Interesse an einem weiteren Treffen, um das Thema näher zu besprechen?
Ich möchte Sie zu einem zwanglosen Treffen am kommenden Samstagabend in meiner Wohnung einladen. Kürzen Hättest du Lust, am Samstagabend zu mir zu kommen?
Das Event war erfolgreich Genauer ausführen Die Veranstaltung war ein voller Erfolg und hat unsere Erwartungen bei Weitem übertroffen.
Lass uns bald mal einen Kaffee trinken gehen. Emojis hinzufügen Lass uns bald mal einen Kaffee trinken ☕ 👋.
Bericht bis zum Ende des Tages erstellen Freundlich Könnten Sie den Bericht bitte bis zum Ende des Tages einreichen?
Hey, ich brauche das so schnell wie möglich. Professionell Bitte senden Sie uns das angeforderte Dokument so bald wie möglich.
Das Projekt liegt hinter dem Zeitplan zurück. Umformulieren Der Projektzeitplan muss angepasst werden, um die ursprüngliche Deadline einzuhalten.

Erste Schritte

Wenn Sie die GenAI Rewriting API verwenden möchten, fügen Sie diese Abhängigkeit der Build-Datei Ihres Projekts hinzu.

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

Instanziieren Sie dann den Rewriter-Client mit den erforderlichen Optionen, prüfen Sie, ob die erforderlichen On-Device-Modellfunktionen verfügbar sind (und laden Sie sie bei Bedarf herunter), bereiten Sie Ihren Eingabetext als Anfrage vor, führen Sie den Umschreibungsprozess aus, um Vorschläge zu erhalten, und geben Sie die Ressourcen frei.

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

Unterstützte Funktionen und Einschränkungen

Die GenAI Rewriting API unterstützt die folgenden Sprachen: Deutsch, Englisch, Französisch, Italienisch, Japanisch, Koreanisch und Spanisch. Sie sind in RewriterOptions.Language definiert. Die Eingabe sollte weniger als 256 Tokens umfassen.

Die Verfügbarkeit der spezifischen Funktionskonfiguration (angegeben durch RewriterOptions) kann je nach Konfiguration des jeweiligen Geräts und den auf das Gerät heruntergeladenen Modellen variieren.

Die zuverlässigste Methode für Entwickler, um sicherzustellen, dass die gewünschte API-Funktion auf einem Gerät mit dem angeforderten RewriterOptions unterstützt wird, ist der Aufruf der Methode checkFeatureStatus(). Diese Methode liefert den endgültigen Status der Verfügbarkeit von Funktionen auf dem Gerät zur Laufzeit.

Häufig auftretende Probleme bei der Einrichtung

Für den Zugriff auf Gemini Nano sind die ML Kit GenAI-APIs auf die Android AICore App angewiesen. Wenn ein Gerät gerade eingerichtet (einschließlich Zurücksetzen) oder die AICore App gerade zurückgesetzt wurde (z.B. Daten löschen, deinstallieren und neu installieren), hat die AICore App möglicherweise nicht genügend Zeit, die Initialisierung abzuschließen (einschließlich des Herunterladens der neuesten Konfigurationen vom Server). Daher funktionieren die ML Kit GenAI-APIs möglicherweise nicht wie erwartet. Hier finden Sie häufige Fehlermeldungen, die während der Einrichtung angezeigt werden, und Informationen dazu, wie Sie sie beheben können:

Beispiel für Fehlermeldung Vorgehensweise
AICore ist mit dem Fehlertyp 4-CONNECTION_ERROR und dem Fehlercode 601-BINDING_FAILURE fehlgeschlagen: Der AICore-Dienst konnte nicht gebunden werden. Das kann passieren, wenn Sie die App mit ML Kit GenAI-APIs unmittelbar nach der Einrichtung des Geräts installieren oder wenn AICore nach der Installation Ihrer App deinstalliert wird. Wenn Sie die AICore App aktualisieren und Ihre App dann neu installieren, sollte das Problem behoben sein.
AICore ist mit dem Fehlertyp 3-PREPARATION_ERROR und dem Fehlercode 606-FEATURE_NOT_FOUND fehlgeschlagen: Das Feature … ist nicht verfügbar. Das kann passieren, wenn AICore die neuesten Konfigurationen noch nicht vollständig heruntergeladen hat. Wenn das Gerät mit dem Internet verbunden ist, dauert die Aktualisierung in der Regel einige Minuten bis einige Stunden. Ein Neustart des Geräts kann das Update beschleunigen.

Hinweis: Wenn der Bootloader des Geräts entsperrt ist, wird dieser Fehler ebenfalls angezeigt. Diese API unterstützt keine Geräte mit entsperrten Bootloadern.
AICore ist mit dem Fehlertyp 1-DOWNLOAD_ERROR und dem Fehlercode 0-UNKNOWN fehlgeschlagen: Die Funktion ... ist mit dem Fehlerstatus 0 und dem Fehler esz: UNAVAILABLE fehlgeschlagen: Der Host ... konnte nicht aufgelöst werden. Lassen Sie die Netzwerkverbindung bestehen, warten Sie einige Minuten und versuchen Sie es dann noch einmal.