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

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

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

试试看

准备工作

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

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

如需生成智能回复,请向机器学习套件传递按时间排序的 TextMessage 对象数组,时间戳早的排在前面。每当用户收发消息时,将消息、消息时间戳和消息发送者的用户 ID 添加到对话历史记录中。

用户 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 要迟到了,抱歉!

机器学习套件会针对对话记录中的最后一条消息提供回复建议。最后一条消息应来自非本地用户。在上面的示例中,对话中的最后一条消息来自非本地用户 Friends0。当您使用机器学习套件传递此日志时,它会建议回复 friendO 的消息:“Running late,Sorry!”

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

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