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ác câu trả lời thông minh, bạn truyền cho Bộ công cụ học máy nhật ký các tin nhắn gần đây vào 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 là bằng tiếng Anh và cuộc trò chuyện không có vấn đề có thể nhạy cảm, Bộ công cụ học máy tạo tối đa ba câu trả lời để bạn có thể đề xuất cho người dùng của mình.

Theo cụmKhô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 một cách 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 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ớ bao gồm Kho lưu trữ Maven trong cả hai phần buildscriptallprojects.

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

    • Cách đóng 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 này 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 này trong Dịch vụ Google Play, bạn có thể định cấu hình ứng dụng của bạn để tự động tải mô hình xuống thiết bị sau khi ứng dụng đã 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 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 tại thời điểm cài đặt xuống hoặc không yêu cầu tải xuống một cách rõ ràng, mô hình được tải xuống lần đầu tiên bạn chạy trình tạo trả lời thông minh. Những yêu cầu bạn đưa ra trước khi tải xuống hoàn tất sẽ không nhận được kết quả nào.

    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 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 trong số đối tượng TextMessage, trong đó dấu thời gian sớm nhất xuất hiện đầu tiên.

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

    Dấu thời gian userID isLocalUser Thông điệp
    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 theo giờ PST 2019 FRIEND0 false Xin lỗi bạn vì muộn giờ!

    Bộ công cụ học máy đề xuất câu trả lời cho tin nhắn gần đây nhất trong nhật ký trò chuyện. Thông báo gần đây nhất phải đến từ một người dùng không phải người dùng bản địa. Trong ví dụ trên, thư cuối cùng trong cuộc trò chuyện là từ người dùng không bản địa FRIEND0. Khi bạn sử dụng thẻ và vé của Bộ công cụ học máy, nhật ký này sẽ đề xuất trả lời tin nhắn của FRIENDO: "Rất tiếc vì lỡ cơ hộ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 phiên bản của SmartReplyGenerator và chuyển lịch sử cuộc trò chuyện vào 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 một danh sách tối đa ba câu trả lời đề xuất, mà bạn có thể hiển thị cho người dùng của mình:

    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 tin tưởng vào mức độ liên quan của các câu trả lời được đề xuất, cuộc hội thoại đầu vào không nằm trong tiếng Anh hoặc nếu mô hình phát hiện thấy vấn đề nhạy cảm.