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

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

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

试试看

准备工作

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

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

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

用户 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];

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

时间戳 用户 ID isLocalUser 讯息
太平洋标准时间 2019 年 2 月 21 日星期四 13:13:39 true 你在路上吗?
太平洋标准时间 2019 年 2 月 21 日星期四 13:15:03 朋友 0 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);
}

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