在 Android 上使用机器学习套件生成智能回复

借助机器学习套件,您可以使用设备端模型来生成消息回复。

如需生成智能回复,您需要向机器学习套件传递会话中最近消息的日志。如果机器学习套件确认会话使用的语言是英语,并且其中没有潜在的敏感主题,则会生成最多三个回复,供您向用户推荐。

准备工作

  1. 将 Firebase 添加到您的 Android 项目(如果尚未添加)。
  2. 将 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. 创建会话历史记录对象

如需生成智能回复,您需要向机器学习套件传递按时间排序的 FirebaseTextMessage 对象的 List,时间戳早的排在前面。

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

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

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

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

下面是一个会话历史记录对象的示例:

时间戳 用户 ID 是否为本地用户? 消息
太平洋标准时间 2019 年 2 月 21 日星期四 13:13:39 true 还在路上吗?
太平洋标准时间 2019 年 2 月 21 日星期四 13:15:03 FRIEND0 false 要迟到了,对不起!

请注意,上述示例中的最新消息来自非本地用户。这很重要,因为机器学习套件推荐拟由您的应用的用户(即本地用户)发送的回复。您应确保向机器学习套件传送的会话日志以用户可能想要回复的消息结束。

2. 获取消息回复

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

JavaKotlin
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 条您可以向用户显示的推荐回复:

JavaKotlin
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}
for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

请注意,如果模型对推荐回复的相关性不确定、输入会话使用的语言不是英语,或者模型检测到敏感主题,机器学习套件都可能不会返回结果。

ML Kit for Firebase 为应用开发者提供了现成可用的机器学习解决方案。新应用应使用适用于设备端机器学习的独立机器学习套件库以及适用于云端机器学习的 Firebase ML。

更新于 Feb 28, 2025

ML Kit for Firebase 为应用开发者提供了现成可用的机器学习解决方案。新应用应使用适用于设备端机器学习的独立机器学习套件库以及适用于云端机器学习的 Firebase ML。

更新于 Feb 28, 2025

Firebase gives you the tools and infrastructure you need to build better mobile and web apps, improve app quality, and grow your business.

更新于 Jan 16, 2025