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ác 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 sẽ truyền Bộ công cụ học máy nhật ký gồm những 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 rằng cuộc trò chuyện đó là bằng tiếng Anh và cuộc trò chuyện đó không có chủ đề có thể mang tính 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.

Gộp chungKhông nhóm
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 xây dựng.Mô hình được tải xuống linh động thông qua Dịch vụ Google Play.
Tác động của kích thước ứng dụngTăng kích thước khoảng 5,7 MB.Tăng kích thước khoảng 200 KB.
Thời gian khởi chạyMô hình có sẵn ngay lập tức.Có thể phải đợi tải mô hình xuống trước khi sử dụng lần đầu tiên.

Dùng thử

Trước khi bắt đầu

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

  2. Thêm các phần phụ thuộc cho thư viện Android của Bộ công cụ học máy vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle. Hãy chọn một trong các phần phụ thuộc sau tuỳ theo nhu cầu của bạn:

    • Cách gói mô hình với ứng dụng:
    dependencies {
      // ...
      // Use this dependency to bundle the model with your app
      implementation 'com.google.mlkit:smart-reply:17.0.3'
    }
    
    • 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 nội dung 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 tình trạng sẵn có 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 cho phép 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 trong lần đầu tiên bạn chạy trình tạo câu trả lời thông minh. Yêu cầu bạn thực hiện trước khi tải xuống hoàn tất không có kết quả nào.

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

    Để tạo câu trả lời thông minh, bạn sẽ truyền Bộ công cụ học máy một List gồm các đối tượng TextMessage theo thứ tự thời gian, với 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 một 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 một 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à một chuỗi bất kỳ 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 phải 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 các cuộc trò chuyện hoặc lệnh gọi của trình tạo 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ý cuộc trò chuyện sẽ có dạng như ví dụ sau:

    Dấu thời gian userID isLocalUser Thông điệp
    13:13:39, ngày 21 tháng 2 năm 2019 theo giờ PST đúng bạn có đang trên đường đi không?
    Thứ Năm, ngày 21 tháng 2 năm 2019 13:15:03 theo giờ PST FRIEND0 false Xin lỗi vì sẽ đến muộn!

    Bộ công cụ học máy đề xuất các câu trả lời cho tin nhắn gần đây nhất trong nhật ký trò chuyện. Tin nhắn cuối cùng phải là của một người dùng không phải người dùng cục bộ. 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 cục bộ FRIEND0. Khi bạn sử dụng tính năng truyền bộ công cụ học máy vào nhật ký này, hệ thống sẽ đề xuất câu trả lời cho thông báo của FRIENDO: "Chạy trễ, xin 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 SmartReplyGenerator và chuyển nhật ký trò chuyện sang phương thức suggestReplies():

    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, đố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 gồm tối đa 3 câu trả lời đề xuất mà bạn có thể hiển thị 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 Bộ công cụ học máy 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 đề xuất, nội dung nhập vào cuộc trò chuyện không bằng tiếng Anh hoặc nếu mô hình phát hiện thấy chủ đề nhạy cảm.