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

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

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

Theo cụmKhông được kết hợp
Tên thư việncom.google.mlkit:smart-replycom.google.android.gms:play-services-mlkit-smart-reply
Triển khaiMô hình được liên kết tĩnh với ứng dụng của bạn tại thời điểm tạo.Mô hình được tải xuống linh hoạt thông qua Dịch vụ Google Play.
Tác động đến kích thước ứng dụngKích thước tăng khoảng 5,7 MB.Kích thước tăng khoảng 200 KB.
Thời gian khởi chạyMô hình này có sẵn ngay lập tức.Có thể phải đợi mô hình tải xuống trước khi sử dụng lần đầu.

Dùng thử

Trước khi bắt đầu

  1. Trong tệp build.gradle cấp dự án, hãy nhớ thêm kho lưu trữ Maven của Google vào cả hai mục buildscriptallprojects.

  2. Thêm các phần phụ thuộc cho thư viện ML Kit trên Android vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle. Chọn một trong các phần phụ thuộc sau đây dựa trên nhu cầu của bạn:

    • Cách đóng gói mô hình với ứng dụng của bạn:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.4'
    }
    
    • Cách sử dụng mô hình trong Dịch vụ Google Play:
    dependencies {
      // ...
      // Use this dependency to use the dynamically downloaded model in Google Play Services
      implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1'
    }
    

    Nếu chọn sử dụng mô hình trong Dịch vụ Google Play, bạn có thể định cấu hình ứng dụng để tự động tải mô hình xuống thiết bị sau khi ứng dụng được cài đặt từ Cửa hàng Play. Bằng cách thêm phần khai báo sau vào tệp AndroidManifest.xml của ứng dụng:

    <application ...>
          ...
          <meta-data
              android:name="com.google.mlkit.vision.DEPENDENCIES"
              android:value="smart_reply" >
          <!-- To use multiple models: android:value="smart_reply,model2,model3" -->
    </application>
    

    Bạn cũng có thể kiểm tra rõ ràng phạm vi cung cấp của mô hình và yêu cầu tải xuống thông qua ModuleInstallClient API của Dịch vụ Google Play.

    Nếu bạn không bật tính năng tải mô hình xuống tại thời điểm cài đặt hoặc yêu cầu tải xuống rõ ràng, thì mô hình sẽ được tải xuống vào lần đầu tiên bạn chạy trình tạo phản hồi thông minh. Những yêu cầu bạn đưa ra trước khi quá trình tải xuống hoàn tất sẽ không mang lại kết quả.

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

    Để tạo câu trả lời thông minh, bạn truyền cho Bộ công cụ học máy một List được sắp xếp theo thứ tự thời gian của các đối tượng TextMessage, trong đó dấu thời gian sớm nhất sẽ xuất hiện trước.

    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:

    Kotlin

    conversation.add(TextMessage.createForLocalUser(
            "heading out now", System.currentTimeMillis()))

    Java

    conversation.add(TextMessage.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à 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à chuỗi bất kỳ xác định duy nhất người gửi trong cuộc trò chuyện. User ID không cần tương ứng với bất kỳ dữ liệu người dùng nào và User ID không cần nhất quán giữa các cuộc trò chuyện hoặc lệnh gọi của trình tạo tính năng trả lời thông minh.

    Kotlin

    conversation.add(TextMessage.createForRemoteUser(
            "Are you coming back soon?", System.currentTimeMillis(), userId))

    Java

    conversation.add(TextMessage.createForRemoteUser(
            "Are you coming back soon?", System.currentTimeMillis(), userId));

    Đối tượng nhật ký trò chuyện sẽ có dạng như ví dụ sau:

    Dấu thời gian userID isLocalUser Thông điệp
    Thu Feb 21 13:13:39 PST 2019 true are you on your way?
    Thu Feb 21 13:15:03 PST 2019 FRIEND0 false Sẽ đến muộn, xin lỗi!

    ML Kit đề xuất câu trả lời cho tin nhắn gần đây nhất trong nhật ký cuộc trò chuyện. Thông báo cuối cùng phải là của một người dùng không phải người dùng tại địa phương. Trong ví dụ trên, tin nhắn cuối cùng trong cuộc trò chuyện là của người dùng không phải người dùng tại địa phương FRIEND0. Khi bạn sử dụng ML Kit để truyền nhật ký này, nhật ký sẽ đề xuất các câu trả lời cho tin nhắn của FRIENDO: "Tôi đang trên đường đến, xin lỗi!"

    2. Nhận câu trả lời cho tin nhắn

    Để 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 SmartReplyGenerator và truyền nhật ký trò chuyện đến phương thức suggestReplies() của thực thể đó:

    Kotlin

    val smartReplyGenerator = SmartReply.getClient()
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener { result ->
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so
                    // the result doesn't contain any suggestions.
                } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                    // Task completed successfully
                    // ...
                }
            }
            .addOnFailureListener {
                // Task failed with an exception
                // ...
            }

    Java

    SmartReplyGenerator smartReply = SmartReply.getClient();
    smartReply.suggestReplies(conversation)
            .addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(SmartReplySuggestionResult result) {
                    if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                        // The conversation's language isn't supported, so
                        // 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
                    // ...
                }
            });

    Nếu thao tác thành công, một đối tượng SmartReplySuggestionResult sẽ được truyề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ể trình bày cho người dùng:

    Kotlin

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

    Java

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

    Xin lưu ý rằng ML Kit có thể không trả về kết quả nếu mô hình không chắc chắn về mức độ phù hợp của các câu trả lời đề 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.