获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在 Android 上使用 ML Kit 生成智能回复

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

您可以使用 ML Kit 使用设备上的模型生成消息回复。

要生成智能回复,您需要向 ML Kit 传递对话中最近消息的日志。如果 ML Kit 确定对话是英文的,并且对话没有潜在的敏感主题,则 ML Kit 最多会生成三个回复,您可以向您的用户建议这些回复。

在你开始之前

  1. 如果您还没有,请将 Firebase 添加到您的 Android 项目中。
  2. 将 ML Kit Android 库的依赖项添加到您的模块(应用级)Gradle 文件(通常是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. 同样在您的应用程序级build.gradle文件中,禁用tflite文件的压缩:
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1.创建对话历史对象

要生成智能回复,您需要向 ML Kit 传递一个按时间顺序排列的FirebaseTextMessage对象List ,其中最早的时间戳在前。

每当用户发送消息时,将消息及其时间戳添加到对话历史记录中:

爪哇

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

科特林

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

每当用户收到消息时,将消息、其时间戳和发件人的用户 ID 添加到对话历史记录中。用户 ID 可以是在对话中唯一标识发件人的任何字符串。用户 ID 不需要与任何用户数据对应,并且用户 ID 在对话或智能回复生成器的调用之间不需要保持一致。

爪哇

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

科特林

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

对话历史对象类似于以下示例:

时间戳用户身份本地用户?信息
2019 年 2 月 21 日星期四 13:13:39 PST真的你在路上吗?
2019 年 2 月 21 日星期四 13:15:03 PST朋友0错误的迟到了,抱歉!

请注意,上例中的最新消息来自非本地用户。这很重要,因为 ML Kit 会建议您的应用程序用户(本地用户)发送的回复。您应该确保您正在向 ML Kit 传递一个对话日志,该日志以您的用户可能想要回复的消息结尾。

2. 获取消息回复

要生成对消息的智能回复,请获取FirebaseSmartReply的实例并将对话历史记录传递给它的suggestReplies()方法:

爪哇

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
                // ...
            }
        });

科特林

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
            // ...
        }

如果操作成功,则将SmartReplySuggestionResult对象传递给成功处理程序。此对象包含最多 3 个建议回复的列表,您可以将其呈现给您的用户:

爪哇

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

科特林

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

请注意,如果模型对建议回复的相关性没有信心,输入对话不是英语,或者模型检测到敏感主题,则 ML Kit 可能不会返回结果。