您可以使用 ML Kit 使用裝置上的模型產生訊息回覆。
要產生智慧回复,您可以向 ML Kit 傳遞對話中最近訊息的日誌。如果 ML Kit 確定對話是英語,且對話沒有潛在的敏感主題,ML Kit 會產生最多三個回复,您可以向用戶建議這些回复。
在你開始之前
- 如果您尚未將 Firebase 新增至您的 Android 專案中,請將其新增至您的 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 傳遞按時間順序排列的FirebaseTextMessage
物件List
,其中最早的時間戳在前。
每當用戶發送訊息時,將訊息及其時間戳記新增至對話歷史記錄:
爪哇
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
科特林
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
每當用戶收到訊息時,都會將該訊息、其時間戳記和寄件者的用戶 ID 新增至對話記錄中。使用者 ID 可以是對話中唯一標識寄件者的任何字串。用戶ID不需要對應到任何用戶數據,且用戶ID不需要在智慧回復生成器的對話或呼叫之間保持一致。
爪哇
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId));
科特林
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId))
對話歷史記錄物件如下例所示:
時間戳 | 使用者身分 | 本地用戶? | 訊息 |
---|---|---|---|
2019 年 2 月 21 日星期四 13:13:39(太平洋標準時間) | 真的 | 你在路上嗎? | |
2019 年 2 月 21 日星期四 13:15:03(太平洋標準時間) | 朋友0 | 錯誤的 | 遲到了,抱歉! |
請注意,上例中的最新消息來自非本地用戶。這很重要,因為 ML Kit 建議由應用程式的使用者(本機使用者)發送的回應。您應該確保向 ML Kit 傳遞一個對話日誌,該日誌以用戶可能想要回复的訊息結尾。
2. 獲取訊息回复
要產生對訊息的智慧回复,請取得FirebaseSmartReply
的實例並將對話歷史記錄傳遞給其suggestReplies()
方法:
爪哇
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
// ...
}
});
科特林
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 個建議回應的列表,您可以將其呈現給使用者:
爪哇
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
科特林
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
請注意,如果模型對建議回應的相關性沒有信心、輸入對話不是英語或模型偵測到敏感主題,ML Kit 可能不會傳回結果。