你可以使用 ML Kit 在裝置上生成訊息回覆 模型
如要產生智慧回覆,請將 ML Kit 近期訊息記錄傳送至 對話。如果 ML Kit 判斷對話是以英文表示對話, 就沒有敏感主題的 ML Kit 最多產生 3 則回覆,您可當做建議使用者參考。
事前準備
- 如果還沒試過 將 Firebase 新增至您的 Android 專案。
- 將 ML Kit Android 程式庫的依附元件新增至模組
(應用程式層級) Gradle 檔案 (通常是
app/build.gradle
):apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { // ... implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0' implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7' }
- 在應用程式層級的
build.gradle
檔案中,停用壓縮功能 共tflite
個檔案:android { // ... aaptOptions { noCompress "tflite" } }
1. 建立對話記錄物件
如要產生智慧回覆,您需要傳送 ML Kit 按照時間排序的List
的 FirebaseTextMessage
物件,並採用最早的時間戳記。
每當使用者傳送訊息時,請將訊息和時間戳記新增至 對話記錄:
Java
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
每當使用者收到訊息時,請新增訊息、訊息時間戳記和 並將傳送者的使用者 ID 加入對話記錄中。使用者 ID 可以是任何 可明確識別會話群組中的寄件者。User-ID 不需要 對應至任何使用者資料,而且 User-ID 不需要保持一致 。
Java
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId));
Kotlin
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId))
對話記錄物件如下列範例所示:
時間戳記 | 使用者 ID | 本機使用者? | 訊息 |
---|---|---|---|
2019 年 2 月 21 日星期四 13:13:39 (太平洋標準時間) | 是 | 你正在路上嗎? | |
2019 年 2 月 21 日星期四 13:15:03 (太平洋標準時間) | 朋友 | false | 抱歉,我遲到了! |
請注意,上述範例中最新的訊息並非來自本機 內容。這很重要,因為 ML Kit 建議要傳送的回覆 也就是本機使用者確定自己能順利通過 ML Kit 對話記錄,此記錄的結尾是使用者可能前往的訊息 也就是您要回覆的對象。
2. 接收訊息回覆
如要產生訊息的智慧回覆,請取得 FirebaseSmartReply
的執行個體
並將對話記錄傳遞至其 suggestReplies()
方法:
Java
FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
.addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
@Override
public void onSuccess(SmartReplySuggestionResult result) {
if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
// The conversation's language isn't supported, so the
// the result doesn't contain any suggestions.
} else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
// Task completed successfully
// ...
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
Kotlin
val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
.addOnSuccessListener { result ->
if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
// The conversation's language isn't supported, so the
// the result doesn't contain any suggestions.
} else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
// Task completed successfully
// ...
}
}
.addOnFailureListener {
// Task failed with an exception
// ...
}
如果作業成功,系統會將 SmartReplySuggestionResult
物件傳遞至
成功處理常式這個物件包含最多 3 個建議的回覆清單
可用來向使用者顯示:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
請注意,如果模型對模型缺乏信心,ML Kit 可能不會傳回結果 建議回覆的關聯性,但輸入對話不在 指定語言,或模型偵測到敏感主題。