在 iOS 系统中使用机器学习套件生成智能回复

机器学习套件可以使用设备端模型生成对消息的简短回复。

要生成智能回复,您需要向机器学习套件传递 对话。如果机器学习套件确定对话是英语,并且 对话没有可能敏感的主题;机器学习套件 最多会生成三个回复,您可以推荐给用户。

试试看

  • 您可以试用示例应用, 请查看此 API 的用法示例。

准备工作

  1. 在 Podfile 中添加以下机器学习套件 Pod:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. 安装或更新项目的 Pod 之后,使用 Xcode 项目的 .xcworkspace。Xcode 12.4 或更高版本支持机器学习套件。

1. 创建对话历史记录对象

要生成智能回复,您需要向机器学习套件传递 TextMessage 对象,时间戳早的在前面。每当用户 发送或接收消息,添加消息、其时间戳和消息 将发送者的用户 ID 添加到对话记录中。

用户 ID 可以是任何字符串,用于标识 对话。User ID 不需要与任何用户数据相对应 并且用户 ID 无需在会话之间保持一致, 调用智能回复生成器。

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

Swift

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:
MLKTextMessage *message = [[MLKTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

对话历史记录对象如以下示例所示:

时间戳 userID isLocalUser 消息
太平洋标准时间 2019 年 2 月 21 日星期四 13:13:39 true 你在路上吗?
太平洋标准时间 2019 年 2 月 21 日星期四 13:15:03 FRIEND0 false 要迟到了,对不起!

机器学习套件会针对对话历史记录中的最后一条消息提供回复建议。最后一条消息 应来自非本地用户。在上面的示例中,会话中的最后一封邮件 来自非本地用户 FRIEND0。当您使用向机器学习套件传递此日志时,它会 回复 FRIENDO 的消息:“抱歉,晚点了!”

2. 获取消息回复

如需生成对消息的智能回复,请获取 SmartReply 的实例并传递 将对话历史记录发送到其 suggestReplies(for:completion:) 方法:

Swift

SmartReply.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 result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective-C

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

如果操作成功,则系统会将 SmartReplySuggestionResult 对象传递给 完成处理程序。此对象包含一个列表,其中最多包含三个 您可以向用户显示以下回复:

Swift

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

Objective-C

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

请注意,如果模型对 建议回复的相关性,输入会话不在 英语,或者模型检测到敏感主题的情况。