GenAI Rewriting API

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

In den folgenden Fällen kann es für Nutzer hilfreich sein, Vorschläge zur Umformulierung von Inhalten zu erhalten:

  • Eine Nachricht so umstrukturieren, dass sie bei der Kommunikation mit Stakeholdern professioneller wirkt
  • Nachrichten kürzen, damit sie besser für das Posten in sozialen Medien geeignet sind
  • Eine Nachricht für Personen umformulieren, die nicht Muttersprachler sind und nach alternativen Möglichkeiten suchen, die Botschaft zu vermitteln

Hauptmerkmale

Die GenAI Rewriting API von ML Kit kann kurze Textinhalte in einem der folgenden Stile umschreiben:

  • Genauer ausführen: Der Eingabetext wird um weitere Details und beschreibende Formulierungen erweitert.
  • Emojify: Dem Eingabetext werden relevante Emojis hinzugefügt, um ihn ausdrucksvoller und unterhaltsamer zu gestalten.
  • Kürzen: Der Eingabetext wird in eine kürzere Version komprimiert, wobei die Kernaussage erhalten bleibt.
  • Freundlich: Der Eingabetext wird in einem ungezwungenen und freundlichen Ton umformuliert.
  • Professionell: Der Eingabetext wird in einem respektvollen Tonfall umformuliert, um ihn formeller und geschäftlicher zu gestalten.
  • Umformulieren: Der Eingabetext wird mit anderen Wörtern und Satzstrukturen umformuliert, 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 Umschreibungsstil Ausgabe
Möchten Sie sich mit mir treffen, um mehr zu erfahren? Professionell Wäre es Ihnen möglich, sich noch einmal mit mir zu treffen, um das Thema weiter zu besprechen?
Ich möchte Sie zu einem ungezwungenen Treffen bei mir am kommenden Samstagabend einladen. Kürzen Möchtest du am Samstagabend zu einem ungezwungenen Treffen bei mir vorbeikommen?
Das Ereignis war erfolgreich Genauer ausführen Die Veranstaltung war ein voller Erfolg und hat alle unsere Erwartungen übertroffen.
Lass uns bald mal einen Kaffee trinken. Emojis hinzufügen Lass uns bald mal einen Kaffee trinken ☕. 👋
Bericht bis zum Ende des Tages vorlegen Freundlich Könnten Sie mir den Bericht bis zum Ende des Tages senden?
Hallo, ich benötige das Teil so schnell wie möglich. Professionell Bitte senden Sie uns das angeforderte Dokument so bald wie möglich.
Das Projekt liegt hinter dem Zeitplan. Umformulieren Der Projektzeitplan muss angepasst werden, um den ursprünglichen Termin einzuhalten

Erste Schritte

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

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

Erstellen 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 Umwandlungsprozess 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, Spanisch und Koreanisch. Sie sind in RewriterOptions.Language definiert. Die Eingabe darf maximal 256 Token enthalten.

Die Verfügbarkeit der spezifischen Funktionskonfiguration (RewriterOptions) kann je nach Gerätekonfiguration 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 der angeforderten RewriterOptions unterstützt wird, ist das Aufrufen der Methode checkFeatureStatus(). Diese Methode liefert den endgültigen Status der Funktionsverfügbarkeit auf dem Gerät zur Laufzeit.

Häufig auftretende Probleme bei der Einrichtung

ML Kit GenAI APIs nutzen die Android AICore App, um auf Gemini Nano zuzugreifen. Wenn ein Gerät gerade eingerichtet (einschließlich Zurücksetzen) oder die AICore App gerade zurückgesetzt wurde (z.B. Daten gelöscht, deinstalliert und dann wieder installiert), hat die AICore App möglicherweise nicht genug Zeit, die Initialisierung abzuschließen (einschließlich Herunterladen der neuesten Konfigurationen vom Server). Daher funktionieren die ML Kit GenAI APIs möglicherweise nicht wie erwartet. Im Folgenden finden Sie häufige Fehlermeldungen bei der Einrichtung und wie Sie damit umgehen können:

Beispiel für Fehlermeldung Vorgehensweise
AICore-Fehler vom Typ 4-CONNECTION_ERROR mit dem Fehlercode 601-BINDING_FAILURE: Die Bindung des AICore-Dienstes ist fehlgeschlagen. Das kann passieren, wenn Sie die App mit ML Kit GenAI APIs direkt nach der Geräteeinrichtung installieren oder wenn AICore nach der Installation Ihrer App deinstalliert wird. Wenn Sie die AICore App aktualisieren und dann Ihre App neu installieren, sollte das Problem behoben werden.
AICore-Fehler vom Typ 3-PREPARATION_ERROR mit dem Fehlercode 606-FEATURE_NOT_FOUND: Die Funktion „…“ ist nicht verfügbar. Das kann passieren, wenn AICore noch nicht mit dem Herunterladen der neuesten Konfigurationen fertig ist. Behalten Sie die Netzwerkverbindung aufrecht und warten Sie einige Minuten bis zu mehrere Stunden.

Hinweis: Wenn der Bootloader des Geräts entsperrt ist, wird auch dieser Fehler angezeigt. Diese API unterstützt keine Geräte mit entsperrtem Bootloader.
AICore-Fehler vom Typ „1-DOWNLOAD_ERROR“ mit dem Fehlercode „0-UNKNOWN“: Die Funktion „…“ ist mit dem Fehlerstatus „0“ und dem Fehler „esz: UNAVAILABLE: Unable to resolve host…“ fehlgeschlagen. Behalten Sie die Netzwerkverbindung aufrecht, warten Sie einige Minuten und versuchen Sie es noch einmal.