Dzięki interfejsowi GenAI Rewriting API w ML Kit możesz automatycznie pomagać użytkownikom w przekształcaniu wiadomości na czacie lub krótkich treści w inny styl lub ton.
Użytkownicy mogą uznać za przydatne otrzymywanie sugestii dotyczących tego, jak zmienić treść w następujących przypadkach:
- Przeredagowanie wiadomości, aby brzmiała bardziej profesjonalnie w kontaktach z interesariuszami
- skracanie wiadomości, aby była bardziej odpowiednia do publikowania na platformach mediów społecznościowych;
- przeformułowanie wiadomości dla osób, które nie są rodzimymi użytkownikami języka i szukają alternatywnych sposobów na przekazanie wiadomości;
Najważniejsze funkcje
Interfejs GenAI Rewriting API w ML Kit może przepisywać krótkie treści w jednym z tych stylów:
- Rozwiń twórczo: rozszerza tekst wejściowy o więcej szczegółów i opisowy język.
- Emojify dodaje do tekstu wejściowego odpowiednie emotikony, dzięki czemu jest on bardziej ekspresyjny i zabawny.
- Skróć: skróci wprowadzony tekst, zachowując jego główną treść.
- Przyjazny: przepisuje tekst wejściowy, aby był bardziej swobodny i przystępny, używając konwersacyjnego tonu.
- Profesjonalny: przepisuje tekst wejściowy, aby był bardziej formalny i biznesowy, używając pełnego szacunku tonu.
- Zmodyfikuj: tworzy inną wersję tekstu wejściowego, używając innych słów i struktur zdań, ale zachowując pierwotne znaczenie.
Żądania zwrócą co najmniej 1 sugestię. Jeśli zwróconych zostanie kilka sugestii, wyniki zostaną posortowane w kolejności malejącej według poziomu ufności.
Przykładowe wyniki
Wejście | Styl ponownego pisania | Dane wyjściowe |
Chcesz się spotkać, żeby porozmawiać więcej? | Profesjonalny | Czy chciałbyś/chciałabyś spotkać się ponownie, aby omówić to bardziej szczegółowo? |
Chciałbym zaprosić Cię na niezobowiązujące spotkanie w moim domu w najbliższą sobotę wieczorem. | Skróć | Czy chciałabyś wpaść do mnie w sobotę wieczorem na niezobowiązujące spotkanie? |
Wydarzenie zakończyło się sukcesem | Pokaż więcej | Wydarzenie okazało się ogromnym sukcesem, przekraczając wszelkie nasze oczekiwania i okazując się wielkim triumfem. |
Umówmy się wkrótce na kawę. | Dodaj emotikony | Skoczmy kiedyś na kawę ☕ 👋. |
Prześlij raport do końca dnia | Towarzyski | Czy możesz udostępnić raport do końca dnia? |
Hej, potrzebuję tego jak najszybciej | Profesjonalny | Czy możesz przesłać wymagany dokument jak najszybciej? |
Projekt jest opóźniony | Sparafrazuj | Harmonogram projektu wymaga dostosowania, aby dotrzymać pierwotnego terminu. |
Pierwsze kroki
Aby zacząć korzystać z interfejsu GenAI Rewriting API, dodaj tę zależność do pliku kompilacji projektu.
implementation("com.google.mlkit:genai-rewriting:1.0.0-beta1")
Następnie utwórz instancję klienta Rewriter
z wymaganymi opcjami, sprawdź, czy dostępne są wymagane funkcje modelu na urządzeniu (i w razie potrzeby pobierz je), przygotuj tekst wejściowy jako żądanie, uruchom proces przepisywania, aby uzyskać sugestie, i zwolnij zasoby.
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();
Obsługiwane funkcje i ograniczenia
Interfejs GenAI Rewriting API obsługuje te języki: angielski, francuski, hiszpański, japoński, koreański, niemiecki i włoski. Są one zdefiniowane w RewriterOptions.Language
. Dane wejściowe powinny zawierać mniej niż 256 tokenów.
Dostępność konkretnej konfiguracji funkcji (określonej przez RewriterOptions
) może się różnić w zależności od konfiguracji urządzenia i modeli pobranych na urządzenie.
Najbardziej niezawodnym sposobem, w jaki deweloperzy mogą się upewnić, że zamierzona funkcja interfejsu API jest obsługiwana na urządzeniu z wymaganym RewriterOptions
, jest wywołanie metody checkFeatureStatus()
. Ta metoda podaje ostateczny stan dostępności funkcji na urządzeniu w czasie działania.
Typowe problemy z konfiguracją
Interfejsy ML Kit GenAI API korzystają z aplikacji Android AICore, aby uzyskać dostęp do Gemini Nano. Gdy urządzenie jest dopiero konfigurowane (w tym resetowane) lub aplikacja AICore jest dopiero resetowana (np. przez wyczyszczenie danych, odinstalowanie i ponowne zainstalowanie), może nie mieć wystarczająco dużo czasu na zakończenie inicjowania (w tym pobranie najnowszych konfiguracji z serwera). W związku z tym interfejsy ML Kit GenAI API mogą nie działać zgodnie z oczekiwaniami. Oto typowe komunikaty o błędach konfiguracji, które możesz zobaczyć, oraz sposoby postępowania z nimi:
Przykładowy komunikat o błędzie | Jak sobie z tym poradzić |
Usługa AICore nie działa z powodu błędu typu 4-CONNECTION_ERROR i kodu błędu 601-BINDING_FAILURE: nie udało się powiązać usługi AICore. | Może się to zdarzyć, gdy zainstalujesz aplikację za pomocą interfejsów ML Kit GenAI API natychmiast po skonfigurowaniu urządzenia lub gdy po zainstalowaniu aplikacji odinstalujesz AICore. Zaktualizowanie aplikacji AICore, a następnie ponowne zainstalowanie aplikacji powinno rozwiązać ten problem. |
Usługa AICore nie działa z powodu błędu typu 3-PREPARATION_ERROR i kodu błędu 606-FEATURE_NOT_FOUND: funkcja ... jest niedostępna. |
Może się tak zdarzyć, gdy AICore nie zakończyło pobierania najnowszych konfiguracji. Gdy urządzenie jest połączone z internetem, aktualizacja trwa zwykle od kilku minut do kilku godzin. Ponowne uruchomienie urządzenia może przyspieszyć aktualizację.
Pamiętaj, że ten błąd pojawi się też, jeśli program rozruchowy urządzenia jest odblokowany. Ten interfejs API nie obsługuje urządzeń z odblokowanymi programami rozruchowymi. |
Usługa AICore nie działa z błędem typu 1-DOWNLOAD_ERROR i kodem błędu 0-UNKNOWN: funkcja ... nie działa ze stanem błędu 0 i błędem esz: UNAVAILABLE: nie można rozpoznać hosta ... | Utrzymuj połączenie z siecią, poczekaj kilka minut i spróbuj ponownie. |