Bạn có thể sử dụng ML Kit để tạo tin nhắn trả lời bằng mẫu trên thiết bị.
Để tạo câu trả lời thông minh, bạn chuyển cho ML Kit nhật ký các tin nhắn gần đây trong cuộc trò chuyện. Nếu ML Kit xác định cuộc trò chuyện bằng tiếng Anh và cuộc trò chuyện đó không có chủ đề nhạy cảm thì ML Kit sẽ tạo tối đa ba câu trả lời mà bạn có thể đề xuất cho người dùng của mình.
Trước khi bắt đầu
- Nếu bạn chưa có, hãy thêm Firebase vào dự án Android của bạn .
- Thêm các phần phụ thuộc cho thư viện ML Kit Android vào tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là
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' }
- Ngoài ra, trong tệp
build.gradle
cấp ứng dụng của bạn, hãy tắt tính năng nén các tệptflite
:android { // ... aaptOptions { noCompress "tflite" } }
1. Tạo đối tượng lịch sử hội thoại
Để tạo câu trả lời thông minh, bạn chuyển cho Bộ ML một List
các đối tượng FirebaseTextMessage
được sắp xếp theo thứ tự thời gian, với dấu thời gian sớm nhất trước tiên.
Bất cứ khi nào người dùng gửi tin nhắn, hãy thêm tin nhắn và dấu thời gian của nó vào lịch sử hội thoại:
Java
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
Bất cứ khi nào người dùng nhận được tin nhắn, hãy thêm tin nhắn, dấu thời gian của tin nhắn và ID người dùng của người gửi vào lịch sử cuộc trò chuyện. ID người dùng có thể là bất kỳ chuỗi nào xác định duy nhất người gửi trong cuộc trò chuyện. ID người dùng không cần phải tương ứng với bất kỳ dữ liệu người dùng nào và ID người dùng không cần nhất quán giữa cuộc trò chuyện hoặc lời gọi của trình tạo trả lời thông minh.
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))
Đối tượng lịch sử hội thoại trông giống như ví dụ sau:
Dấu thời gian | Tên người dùng | Người dùng địa phương? | Tin nhắn |
---|---|---|---|
Thứ năm ngày 21 tháng 2 13:13:39 PST 2019 | ĐÚNG VẬY | bạn đang trên đường tới phải không? | |
Thứ năm ngày 21 tháng 2 13:15:03 PST 2019 | BẠN BÈ0 | SAI | Đến muộn, xin lỗi! |
Lưu ý rằng tin nhắn gần đây nhất trong ví dụ trên là từ người dùng không phải người dùng cục bộ. Điều này rất quan trọng vì ML Kit đề xuất các câu trả lời được gửi bởi người dùng ứng dụng của bạn: người dùng cục bộ. Bạn phải chắc chắn rằng bạn đang chuyển cho ML Kit một nhật ký cuộc trò chuyện kết thúc bằng một tin nhắn mà người dùng của bạn có thể muốn trả lời.
2. Nhận tin nhắn trả lời
Để tạo câu trả lời thông minh cho tin nhắn, hãy lấy một phiên bản của FirebaseSmartReply
và chuyển lịch sử cuộc trò chuyện sang phương thức suggestReplies()
của nó:
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
// ...
}
Nếu thao tác thành công, đối tượng SmartReplySuggestionResult
sẽ được chuyển tới trình xử lý thành công. Đối tượng này chứa danh sách tối đa 3 câu trả lời được đề xuất mà bạn có thể trình bày cho người dùng của mình:
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
Lưu ý rằng Bộ công cụ ML có thể không trả về kết quả nếu mô hình không chắc chắn về mức độ liên quan của các câu trả lời được đề xuất, cuộc trò chuyện đầu vào không phải bằng tiếng Anh hoặc nếu mô hình phát hiện thấy chủ đề nhạy cảm.