Con l'API di correzione bozze di IA generativa di ML Kit, puoi aiutare gli utenti a controllare la grammatica e l'ortografia di brevi testi.
Funzionalità chiave
- Correggere il testo inserito tramite tastiera o comandi vocali
- Le richieste restituiranno almeno un suggerimento. Se vengono restituiti più suggerimenti, i risultati verranno ordinati in base all'affidabilità decrescente.
Risultati di esempio
Ingresso |
Tipo di input |
Output |
this is a short msg |
Tastiera |
Questo è un messaggio breve |
Il progetto è quasi completo, ma deve essere esaminato |
Tastiera |
Il progetto è quasi completo, ma deve essere esaminato |
Incontrami all\'orso, |
Voice |
Ci vediamo al bar. |
Per iniziare
Per iniziare a utilizzare l'API di correzione bozza GenAI, aggiungi questa dipendenza al file di compilazione del progetto.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
Poi, configura e ottieni un client Proofreader
con impostazioni specifiche per la lingua e il tipo di input. Verifica e assicurati che le funzionalità del modello on-device necessarie siano disponibili (attivando un download, se necessario). Invia il testo che vuoi analizzare in un ProofreadingRequest
, esegui l'inferenza di correzione bozza e infine elabora i suggerimenti restituiti per correggere il testo.
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();
In che modo il modello gestisce i diversi tipi di input
Quando il modello dispone di più informazioni su come l'utente ha inserito il testo (tastiera o voce), può prevedere meglio il tipo di errori che potrebbero essere presenti. Il testo inserito con la tastiera è più soggetto a errori ortografici con i tasti vicini, mentre il testo inserito tramite comandi vocali è più soggetto a errori ortografici delle parole con la stessa pronuncia.
Funzionalità supportate e limitazioni
La correzione bozza è supportata per le seguenti lingue: inglese,
giapponese, francese, tedesco, italiano, spagnolo e coreano, che sono definite in
ProofreaderOptions.Language
. L'input deve contenere meno di 256 token.
La disponibilità della configurazione della funzionalità specifica (specificata da
ProofreaderOptions
) può variare in base alla configurazione del singolo
dispositivo e ai modelli che sono stati scaricati sul dispositivo.
Il modo più affidabile per gli sviluppatori di assicurarsi che la funzionalità dell'API prevista sia supportata su un dispositivo con il ProofreaderOptions
richiesto è chiamare il metodo checkFeatureStatus()
. Questo metodo fornisce lo stato definitivo della disponibilità delle funzionalità sul dispositivo in fase di esecuzione.
Problemi di configurazione comuni
Le API ML Kit GenAI si basano sull'app Android AICore per accedere a Gemini Nano. Quando un dispositivo è appena stato configurato (incluso il ripristino dei dati di fabbrica) o l'app AICore è appena stata reimpostata (ad es. dati cancellati, disinstallata e reinstallata), l'app AICore potrebbe non avere tempo sufficiente per completare l'inizializzazione (incluso il download delle configurazioni più recenti dal server). Di conseguenza, le API ML Kit GenAI potrebbero non funzionare come previsto. Di seguito sono riportati i messaggi di errore di configurazione più comuni che potresti visualizzare e come gestirli:
Esempio di messaggio di errore | Come gestire |
AICore non è riuscito con il tipo di errore 4-CONNECTION_ERROR e il codice di errore 601-BINDING_FAILURE: non è stato possibile eseguire l'associazione del servizio AICore. | Ciò può accadere quando installi l'app utilizzando le API ML Kit GenAI immediatamente dopo la configurazione del dispositivo o quando AICore viene disinstallato dopo l'installazione dell'app. Il problema dovrebbe essere risolto aggiornando l'app AICore e reinstallando la tua app. |
AICore non è riuscito con il tipo di errore 3-PREPARATION_ERROR e il codice di errore 606-FEATURE_NOT_FOUND: la funzionalità ... non è disponibile. |
Questo può accadere quando AICore non ha completato il download delle configurazioni più recenti. Mantieni la connessione di rete e attendi da alcuni minuti a qualche ora.
Tieni presente che se il bootloader del dispositivo è sbloccato, vedrai anche questo errore: questa API non supporta i dispositivi con bootloader sbloccati. |
AICore non è riuscito con il tipo di errore 1-DOWNLOAD_ERROR e il codice di errore 0-UNKNOWN: la funzionalità ... non è riuscita con lo stato di errore 0 e l'errore esz: UNAVAILABLE: Unable to resolve host ... | Mantieni la connessione di rete, attendi qualche minuto e riprova. |