Com a API de revisão GenAI do Kit de ML, você pode ajudar os usuários a verificar a gramática e a ortografia em textos curtos.
Principais recursos
- Revisar o texto inserido por teclado ou voz
- As solicitações vão retornar pelo menos uma sugestão. Se várias sugestões forem retornadas, os resultados serão classificados por confiança decrescente.
Resultados de exemplo
Entrada |
Tipo de entrada |
Saída |
esta é uma mensagem curta |
Teclado |
Esta é uma mensagem curta |
O projeto está quase concluído, mas precisa ser revisado |
Teclado |
O projeto está quase concluído, mas precisa ser revisado |
Por favor, encontre-me no urso, |
Voz |
Me encontre no bar. |
Primeiros passos
Para começar a usar a API GenAI Proofreading, adicione essa dependência ao arquivo de build do projeto.
implementation("com.google.mlkit:genai-proofreading:1.0.0-beta1")
Em seguida, configure e obtenha um cliente Proofreader
com configurações específicas de idioma
e tipo de entrada. Verifique e garanta que os recursos necessários do modelo no dispositivo
estão disponíveis (acionando um download, se necessário). Envie o texto que você quer
analisar em um ProofreadingRequest
, execute a inferência de revisão e,
por fim, processe as sugestões retornadas para corrigir o texto.
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();
Como o modelo lida com diferentes tipos de entrada
Quando o modelo tem mais informações sobre como o usuário digitou o texto (teclado ou voz), ele pode prever melhor o tipo de erro que pode estar presente. O texto digitado no teclado tem mais probabilidade de erros ortográficos com teclas próximas, enquanto o texto inserido por voz tem mais probabilidade de erros ortográficos de palavras com a mesma pronúncia.
Recursos compatíveis e limitações
A revisão ortográfica tem suporte para os seguintes idiomas: inglês,
japonês, francês, alemão, italiano, espanhol e coreano, e eles são definidos em
ProofreaderOptions.Language
. A entrada precisa ter menos de 256 tokens.
A disponibilidade da configuração específica do recurso (especificada por
ProofreaderOptions
) pode variar dependendo da configuração do dispositivo
e dos modelos que foram transferidos por download para ele.
A maneira mais confiável para os desenvolvedores garantirem que o recurso de API pretendido tenha
suporte em um dispositivo com o ProofreaderOptions
solicitado é chamar o método
checkFeatureStatus()
. Esse método fornece o status definitivo
da disponibilidade do recurso no dispositivo no momento da execução.
Problemas comuns de configuração
As APIs GenAI do Kit de ML dependem do app Android AICore para acessar o Gemini Nano. Quando um dispositivo é configurado (incluindo redefinição) ou o app AICore é redefinido (por exemplo, dados limpos, desinstalado e reinstalado), o app AICore pode não ter tempo suficiente para concluir a inicialização, incluindo o download das configurações mais recentes do servidor. Como resultado, as APIs do ML Kit GenAI podem não funcionar como esperado. Confira as mensagens de erro comuns de configuração e como lidar com elas:
Exemplo de mensagem de erro | Como lidar com |
O AICore falhou com o tipo de erro 4-CONNECTION_ERROR e o código de erro 601-BINDING_FAILURE: o serviço AICore falhou na vinculação. | Isso pode acontecer quando você instala o app usando as APIs do ML Kit GenAI imediatamente após a configuração do dispositivo ou quando o AICore é desinstalado após a instalação do app. Atualize o app AICore e reinstale o app para corrigir o problema. |
O AICore falhou com o tipo de erro 3-PREPARATION_ERROR e o código de erro 606-FEATURE_NOT_FOUND: o recurso ... não está disponível. |
Isso pode acontecer quando o AICore não termina de fazer o download das configurações mais recentes. Mantenha a conexão de rede e aguarde de alguns minutos a algumas horas.
Se o carregador de inicialização do dispositivo estiver desbloqueado, esse erro também vai aparecer. Essa API não oferece suporte a dispositivos com carregador de inicialização desbloqueado. |
O AICore falhou com o tipo de erro 1-DOWNLOAD_ERROR e o código de erro 0-UNKNOWN: o recurso ... falhou com o status de falha 0 e o erro esz: INDISPONÍVEL: não foi possível resolver o host ... | Mantenha a conexão de rede, aguarde alguns minutos e tente novamente. |