Mit der GenAI Proofreading API von ML Kit können Sie Nutzern dabei helfen, die Grammatik und Rechtschreibung kurzer Textabschnitte zu überprüfen.
Hauptmerkmale
- Über die Tastatur oder per Spracheingabe eingegebenen Text Korrekturlesen
- Bei Anfragen wird mindestens ein Vorschlag zurückgegeben. Wenn mehrere Vorschläge zurückgegeben werden, werden die Ergebnisse absteigend nach Konfidenz sortiert.
Beispielergebnisse
Eingabe |
Eingabetyp |
Ausgabe |
Dies ist eine kurze Nachricht. |
Tastatur |
Das ist eine kurze Nachricht |
Das Projekt ist fast fertig, muss aber noch überprüft werden. |
Tastatur |
Das Projekt ist fast abgeschlossen, muss aber noch überprüft werden |
Bitte treffen Sie mich am Bären, |
Sprache |
Treffen Sie mich an der Bar. |
Erste Schritte
Wenn Sie mit der GenAI Proofreading API beginnen möchten, fügen Sie der Build-Datei Ihres Projekts diese Abhängigkeit hinzu.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
Konfigurieren Sie dann einen Proofreader
-Client mit bestimmten Sprach- und Eingabetypeinstellungen und rufen Sie ihn ab. Prüfen Sie, ob die erforderlichen Modellfunktionen auf dem Gerät verfügbar sind. Starten Sie gegebenenfalls einen Download. Reichen Sie den Text, den Sie analysieren möchten, in einem ProofreadingRequest
ein, führen Sie die Korrekturlesen-Inferenz aus und verarbeiten Sie abschließend die zurückgegebenen Vorschläge zur Korrektur des Textes.
Kotlin
val textToProofread = "The praject is compleet but needs too be reviewd"
// Define task with required input and output format
val options = ProofreaderOptions.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that
// the user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available
// languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build()
val proofreader = Proofreading.getClient(options)
suspend fun prepareAndStartProofread() {
// Check feature availability, status will be one of the
// following: UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
val featureStatus = proofreader.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.
proofreader.downloadFeature(object : DownloadCallback {
override fun onDownloadStarted(bytesToDownload: Long) { }
override fun onDownloadFailed(e: GenAiException) { }
override fun onDownloadProgress(
totalBytesDownloaded: Long
) {}
override fun onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader)
}
})
} 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
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader)
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader)
}
}
suspend fun startProofreadingRequest(
text: String, proofreader: Proofreader
) {
// Create task request
val proofreadingRequest =
ProofreadingRequest.builder(text).build()
// Start proofreading 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 proofreadingResults =
proofreader.runInference(proofreadingRequest).await().results
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest) { newText ->
// // show new text in UI
// }
}
// Be sure to release the resource when no longer needed
// For example, on viewModel.onCleared() or activity.onDestroy()
proofreader.close()
Java
String textToProofread = "The praject is compleet but needs too be reviewd";
// Define task with required input and output format
ProofreaderOptions proofreaderOptions =
ProofreaderOptions
.builder(context)
// InputType can be KEYBOARD or VOICE. VOICE indicates that the
// user generated text based on audio input.
.setInputType(ProofreaderOptions.InputType.KEYBOARD)
// Refer to ProofreaderOptions.Language for available languages
.setLanguage(ProofreaderOptions.Language.ENGLISH)
.build();
Proofreader proofreader = Proofreading.getClient(proofreaderOptions);
void prepareAndStartProofread(Context context) throws ExecutionException,
InterruptedException {
// Check feature availability, status will be one of the following:
// UNAVAILABLE, DOWNLOADABLE, DOWNLOADING, AVAILABLE
try {
int featureStatus = proofreader.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.
proofreader.downloadFeature(new DownloadCallback() {
@Override
public void onDownloadCompleted() {
startProofreadingRequest(textToProofread, proofreader);
}
@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
// very quickly. However, if Gemini Nano is not already
// downloaded, the download process may take longer.
startProofreadingRequest(textToProofread, proofreader);
} else if (featureStatus == FeatureStatus.AVAILABLE) {
startProofreadingRequest(textToProofread, proofreader);
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
void startProofreadingRequest(String text, Proofreader proofreader) {
// Create task request
ProofreadingRequest proofreadingRequest = ProofreadingRequest
.builder(text).build();
try {
// Start proofreading request with non-streaming response
// More than 1 result may be returned. If multiple suggestions are
// returned, results will be sorted by descending confidence.
proofreader.runInference(proofreadingRequest).get().getResults();
// You can also start a streaming request
// proofreader.runInference(proofreadingRequest, 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()
proofreader.close();
Wie das Modell mit verschiedenen Eingabetypen umgeht
Je mehr Informationen das Modell darüber hat, wie der Nutzer Text eingegeben hat (Tastatur oder Sprache), desto besser kann es die Art der möglichen Fehler vorhersagen. Bei der Tastatur-Eingabe ist die Wahrscheinlichkeit von Rechtschreibfehlern bei Tasten in der Nähe höher, während bei der Spracherkennung Wörter mit derselben Aussprache häufiger falsch geschrieben werden.
Unterstützte Funktionen und Einschränkungen
Die Korrekturlesen-Funktion wird für die folgenden Sprachen unterstützt: Deutsch, Englisch, Französisch, Italienisch, Japanisch, Spanisch und Koreanisch. Sie sind in ProofreaderOptions.Language
definiert. Die Eingabe darf maximal 256 Token enthalten.
Die Verfügbarkeit der spezifischen Funktionskonfiguration (ProofreaderOptions
) 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 ProofreaderOptions
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. |