Con l'API GenAI Rewriting di ML Kit, puoi aiutare automaticamente gli utenti a riscrivere messaggi di chat o brevi contenuti con uno stile o un tono diverso.
Gli utenti potrebbero trovare utile ricevere suggerimenti su come riscrivere un contenuto nei seguenti casi:
- Ristrutturare un messaggio per renderlo più professionale quando comunichi con gli stakeholder
- Abbreviare un messaggio per renderlo più adatto alla pubblicazione sulle piattaforme di social media
- Riformulazione di un messaggio per persone non madrelingua che cercano modi alternativi per comunicare il messaggio
Funzionalità chiave
L'API GenAI Rewriting di ML Kit può riscrivere brevi contenuti in uno dei seguenti stili:
- Elabora: espande il testo inserito con maggiori dettagli e un linguaggio descrittivo.
- Emojify: aggiunge emoji pertinenti al testo inserito, rendendolo più espressivo e divertente.
- Abbrevia: comprime il testo inserito in una versione più breve, mantenendo intatto il messaggio principale.
- Amichevole: riscrive il testo di input in modo che sia più informale e accessibile, utilizzando un tono colloquiale.
- Professionale: riscrive il testo di input per renderlo più formale e aziendale, utilizzando un tono rispettoso.
- Riformula: riscrive il testo di input utilizzando parole e strutture di frasi diverse, mantenendo il significato originale.
Le richieste restituiranno almeno un suggerimento. Se vengono restituiti più suggerimenti, i risultati verranno ordinati in base alla confidenza decrescente.
Risultati di esempio
Ingresso | Riscrivi stile | Output |
Vuoi incontrarci per parlare di persona? | Professionale | Ti piacerebbe incontrarci di nuovo per approfondire l'argomento? |
Vorrei invitarti a una festa informale a casa mia sabato sera. | Abbrevia | Ti piacerebbe raggiungermi per una serata informale a casa mia sabato sera? |
L'evento è andato a buon fine | Elabora | L'evento ha avuto un successo clamoroso, superando tutte le nostre aspettative e dimostrandosi un trionfo assoluto. |
Prendiamoci un caffè prima o poi. | Aggiungi emoji | Prendiamoci un caffè ☕ prima o poi 👋. |
Fornisci il report entro la fine della giornata | Amichevole | Potresti condividere il report entro la fine della giornata? |
Ehi, mi serve quella cosa al più presto | Professionale | Potresti fornirci il documento richiesto il prima possibile? |
Il progetto è in ritardo rispetto alla pianificazione | Riformula | La cronologia del progetto richiede un aggiustamento per rispettare la scadenza originale |
Per iniziare
Per iniziare a utilizzare l'API GenAI Rewriting, aggiungi questa dipendenza al file di build del progetto.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
Quindi, crea un'istanza del client Rewriter
con le opzioni richieste, verifica se le funzionalità del modello on-device richieste sono disponibili (e scaricale se necessario), prepara il testo di input come richiesta, esegui il processo di riscrittura per ottenere suggerimenti e rilascia le risorse.
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();
Funzionalità supportate e limitazioni
L'API GenAI Rewriting supporta le seguenti lingue: inglese, giapponese,
francese, tedesco, italiano, spagnolo e coreano, definite in
RewriterOptions.Language
. L'input deve contenere meno di 256 token.
La disponibilità della configurazione di una funzionalità specifica (specificata da
RewriterOptions
) può variare in base alla configurazione del dispositivo specifico
e ai modelli scaricati sul dispositivo.
Il modo più affidabile per gli sviluppatori per assicurarsi che la funzionalità API prevista sia
supportata su un dispositivo con RewriterOptions
richiesto è chiamare il metodo
checkFeatureStatus()
. Questo metodo fornisce lo stato definitivo
della disponibilità delle funzionalità sul dispositivo in fase di runtime.
Problemi di configurazione comuni
Le API ML Kit GenAI si basano sull'app Android AI Core per accedere a Gemini Nano. Quando un dispositivo viene appena configurato (incluso il ripristino) o l'app AICore viene appena ripristinata (ad es. cancellazione dei dati, disinstallazione e reinstallazione), 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 comuni che potresti visualizzare e come gestirli:
Esempio di messaggio di errore | Come gestirla |
AICore non è riuscito a eseguire l'operazione con il tipo di errore 4-CONNECTION_ERROR e il codice di errore 601-BINDING_FAILURE: il servizio AICore non è riuscito a eseguire il binding. | 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. L'aggiornamento dell'app AICore e la reinstallazione dell'app dovrebbero risolvere il problema. |
AICore non è riuscito a completare l'operazione con il tipo di errore 3 - PREPARATION_ERROR e il codice di errore 606 - FEATURE_NOT_FOUND: la funzionalità ... non è disponibile. |
Ciò può accadere quando AICore non ha completato il download delle configurazioni più recenti. Quando il dispositivo è connesso a internet, l'aggiornamento richiede in genere da pochi minuti a qualche ora. Il riavvio del dispositivo può velocizzare l'aggiornamento.
Tieni presente che se il bootloader del dispositivo è sbloccato, visualizzerai anche questo errore. Questa API non supporta i dispositivi con bootloader sbloccati. |
AICore non è riuscito a completare l'operazione con il tipo di errore 1-DOWNLOAD_ERROR e il codice di errore 0-UNKNOWN: Feature ... failed with failure status 0 and error esz: UNAVAILABLE: Unable to resolve host ... | Mantieni la connessione di rete, attendi qualche minuto e riprova. |