Tạo câu trả lời thông minh bằng ML Kit trên Android

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

  1. Nếu bạn chưa có, hãy thêm Firebase vào dự án Android của bạn .
  2. 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'
    }
    
  3. 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ệp tflite :
    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.