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

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

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

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

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

在你开始之前

  1. 如果您尚未将 Firebase 添加到您的应用,请按照入门指南中的步骤进行操作。
  2. 在您的 Podfile 中包含 ML Kit 库:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    安装或更新项目的 Pod 后,请务必使用其.xcworkspace打开您的 Xcode 项目。
  3. 在您的应用中,导入 Firebase:

    迅速

    import Firebase

    Objective-C

    @import Firebase;

1.创建对话历史对象

要生成智能回复,您需要向 ML Kit 传递一个按时间顺序排列的TextMessage对象数组,其中最早的时间戳在前。每当用户发送或接收消息时,将消息、其时间戳和消息发送者的用户 ID 添加到对话历史记录中。

用户 ID 可以是在对话中唯一标识发件人的任何字符串。用户 ID 不需要与任何用户数据对应,并且用户 ID 不需要在智能回复生成器的对话或调用之间保持一致。

如果消息是由您要建议回复的用户发送的,请将isLocalUser设置为 true。

迅速

var conversation: [TextMessage] = []

// Then, for each message sent and received:
let message = TextMessage(
    text: "How are you?",
    timestamp: Date().timeIntervalSince1970,
    userID: "userId",
    isLocalUser: false)
conversation.append(message)

Objective-C

NSMutableArray *conversation = [NSMutableArray array];

// Then, for each message sent and received:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

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

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

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

2. 获取消息回复

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

迅速

let naturalLanguage = NaturalLanguage.naturalLanguage()
naturalLanguage.smartReply().suggestReplies(for: conversation) { result, error in
    guard error == nil, let result = result else {
        return
    }
    if (result.status == .notSupportedLanguage) {
        // The conversation's language isn't supported, so the
        // the result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRSmartReply *smartReply = [naturalLanguage smartReply];
[smartReply suggestRepliesForMessages:inputText
                           completion:^(FIRSmartReplySuggestionResult * _Nullable result,
                                        NSError * _Nullable error) {
  if (error || !result) {
    return;
  }
  if (result.status == FIRSmartReplyResultStatusNotSupportedLanguage) {
      // The conversation's language isn't supported, so the
      // the result doesn't contain any suggestions.
  } else if (result.status == FIRSmartReplyResultStatusSuccess) {
      // Successfully suggested smart replies.
      // ...
  }
}];
]

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

迅速

for suggestion in result.suggestions {
  print("Suggested reply: \(suggestion.text)")
}

Objective-C

for (FIRSmartReplySuggestion *suggestion in result.suggestions) {
  NSLog(@"Suggested reply: %@", suggestion.text);
}

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