Com a API de reescrita de IA geral do Kit de ML, é possível ajudar os usuários a reescrever mensagens de chat ou pequenos conteúdos com um estilo ou tom diferente.
Os usuários podem achar útil receber sugestões sobre como reescrever um conteúdo nos seguintes casos:
- Reestruturar uma mensagem para ser mais profissional ao se comunicar com partes interessadas
- Encurtar uma mensagem para que ela seja mais adequada para postagens em plataformas de mídia social
- Reformule uma mensagem para falantes não nativos que procuram maneiras alternativas de transmitir a mensagem.
Principais recursos
A API de reescrita de GenAI do Kit de ML pode reescrever pequenos trechos de conteúdo em um dos seguintes estilos:
- Detalhar: expande o texto de entrada com mais detalhes e linguagem descritiva.
- Emojify: adiciona emojis relevantes ao texto de entrada, tornando-o mais expressivo e divertido.
- Encurtar: condensa o texto de entrada em uma versão mais curta, mantendo a mensagem principal intacta.
- Amigável: reescreve o texto de entrada para ser mais informal e acessível, usando um tom de conversa.
- Profissional: reescreve o texto de entrada para que seja mais formal e profissional, usando um tom respeitoso.
- Reformular: reescreve o texto de entrada usando palavras e estruturas de frases diferentes, mantendo o significado original.
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 | Estilo de reescrita | Saída |
Quer conversar mais? | Profissional | Você gostaria de marcar outra reunião para discutir melhor o assunto? |
Gostaria de convidar você para um encontro casual na minha casa neste sábado à noite | Encurtar | Quer participar de um encontro casual na minha casa neste sábado à noite? |
O evento foi concluído | Elaborar | O evento foi um sucesso, superando todas as nossas expectativas e provando ser um grande triunfo. |
Vamos tomar um café em breve | Transformar em emoji | Vamos tomar um café ☕ em breve 👋. |
Enviar o relatório até o fim do dia | Amigável | Você pode enviar o relatório até o fim do dia? |
Preciso disso o mais rápido possível | Profissional | Poderia enviar o documento solicitado assim que possível? |
O projeto está atrasado | Reformular | A linha do tempo do projeto precisa ser ajustada para atender ao prazo original |
Primeiros passos
Para começar a usar a API GenAI Rewriting, adicione essa dependência ao arquivo de build do projeto.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
Em seguida, instancie o cliente Rewriter
com as opções necessárias, verifique se
os recursos necessários do modelo no dispositivo estão disponíveis (e faça o download deles, se
necessário), prepare o texto de entrada como uma solicitação, execute o processo de reescrita para
receber sugestões e libere os recursos.
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();
Recursos compatíveis e limitações
A API de reescrita da IA generativa oferece suporte aos seguintes idiomas: inglês, japonês,
francês, alemão, italiano, espanhol e coreano, que são definidos em
RewriterOptions.Language
. A entrada precisa ter menos de 256 tokens.
A disponibilidade da configuração específica do recurso (especificada por
RewriterOptions
) 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 RewriterOptions
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. |