Tạo câu trả lời thông minh bằng Bộ công cụ học máy trên Android

Bạn có thể dùng Bộ công cụ học máy để tạo tin nhắn trả lời bằng mô hình trên thiết bị.

Để tạo các câu trả lời thông minh, bạn sẽ truyền cho Bộ công cụ học máy nhật ký các tin nhắn gần đây trong một cuộc trò chuyện. Nếu Bộ công cụ học máy xác định cuộc trò chuyện bằng tiếng Anh và cuộc trò chuyện không có chủ đề có thể nhạy cảm, thì Bộ công cụ học máy sẽ tạo tối đa 3 câu trả lời để bạn có thể đề xuất cho người dùng của mình.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án Android của bạn nếu bạn chưa thực hiện.
  2. Thêm các phần phụ thuộc của thư viện Android Bộ công cụ học máy vào tệp Gradle của mô-đun (cấp ứng dụng) (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, hãy tắt tính năng nén tệp tflite:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Tạo một đối tượng nhật ký trò chuyện

Để tạo các câu trả lời thông minh, bạn hãy truyền cho Bộ công cụ học máy một List của các đối tượng FirebaseTextMessage theo thứ tự thời gian, trong đó dấu thời gian sớm nhất sẽ xuất hiện đầu 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 tin nhắn đó vào nhật ký trò chuyện:

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 một tin nhắn, hãy thêm tin nhắn đó, dấu thời gian và mã nhận dạng người dùng của người gửi vào nhật ký trò chuyện. Mã nhận dạng 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. Mã nhận dạng người dùng không cần tương ứng với bất kỳ dữ liệu người dùng nào và mã nhận dạng người dùng không cần phải nhất quán giữa cuộc trò chuyện hoặc lệnh gọi của trình tạo câu 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 nhật ký trò chuyện sẽ có dạng như trong ví dụ sau:

Dấu thời gian User ID Bạn là người dùng cục bộ? Nội dung
Thứ Năm, ngày 21 tháng 2 13:13:39 theo giờ PST 2019 đúng bạn đang trên đường đi chưa?
Thứ Năm, ngày 21 tháng 2 13:15:03 giờ PST 2019 BẠN BÈ false Xin lỗi bạn vì muộn giờ!

Xin lưu ý rằng thông báo gần đây nhất trong ví dụ trên là của một người dùng không phải người dùng cục bộ. Việc này rất quan trọng vì Bộ công cụ học máy đề xuất các câu trả lời mà người dùng ứng dụng của bạn, tức là người dùng cục bộ, sẽ gửi đi. Bạn phải đảm bảo truyền cho Bộ công cụ học máy một nhật ký trò chuyện kết thúc bằng một thông báo 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 một tin nhắn, hãy lấy một thực thể của FirebaseSmartReply và chuyển nhật ký trò chuyện vào phương thức 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
            // ...
        }

Nếu thao tác thành công, đối tượng SmartReplySuggestionResult sẽ được chuyển đến 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 đề xuất mà bạn có thể hiển thị cho người dùng:

Java

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

Xin lưu ý rằng Bộ công cụ học máy có thể không trả về kết quả nếu mô hình không tự tin về mức độ liên quan của các câu trả lời đề xuất, cuộc trò chuyện đầu vào không bằng tiếng Anh hoặc nếu mô hình phát hiện thấy vấn đề nhạy cảm.