Создавайте умные ответы с помощью ML Kit на iOS

ML Kit может генерировать короткие ответы на сообщения, используя модель на устройстве.

Чтобы генерировать умные ответы, вы передаете ML Kit журнал последних сообщений в разговоре. Если ML Kit определяет, что разговор ведется на английском языке и что разговор не имеет потенциально деликатной темы, ML Kit генерирует до трех ответов, которые вы можете предложить своему пользователю.

Попробуйте это

Прежде чем начать

  1. Включите в свой подфайл следующие модули ML Kit:
    pod 'GoogleMLKit/SmartReply', '7.0.0'
    
  2. После установки или обновления модулей вашего проекта откройте проект Xcode, используя его .xcworkspace . ML Kit поддерживается в Xcode версии 12.4 или новее.

1. Создайте объект истории разговоров.

Для создания интеллектуальных ответов вы передаете ML Kit хронологически упорядоченный массив объектов TextMessage , начиная с самой ранней временной метки. Каждый раз, когда пользователь отправляет или получает сообщение, добавляйте сообщение, его временную метку и идентификатор пользователя отправителя сообщения в историю разговоров.

Идентификатор пользователя может представлять собой любую строку, которая однозначно идентифицирует отправителя в диалоге. Идентификатор пользователя не обязательно должен соответствовать каким-либо пользовательским данным, а идентификатор пользователя не должен быть согласованным между разговорами или вызовами генератора интеллектуальных ответов.

Если сообщение было отправлено пользователем, которому вы хотите предложить ответы, установите для 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)
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 Сообщение
Четверг, 21 февраля, 13:13:39 по тихоокеанскому стандартному времени 2019 г. истинный ты уже в пути?
Чт, 21 февраля, 13:15:03 по тихоокеанскому стандартному времени 2019 г. ДРУГ0 ЛОЖЬ Опаздываю, извините!

ML Kit предлагает ответы на последнее сообщение в истории разговоров. Последнее сообщение должно быть от нелокального пользователя. В приведенном выше примере последнее сообщение в беседе принадлежит нелокальному пользователю FRIEND0. Когда вы используете этот журнал pass ML Kit, он предлагает ответы на сообщение FRIENDO: «Опоздаю, извините!»

2. Получите ответы на сообщения

Чтобы генерировать интеллектуальные ответы на сообщение, получите экземпляр SmartReply и передайте историю разговора в его метод suggestReplies(for:completion:) :

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.
        // ...
    }
}
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 передается обработчику завершения. Этот объект содержит список из трех предлагаемых ответов, которые вы можете представить своему пользователю:

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

Обратите внимание, что ML Kit может не возвращать результаты, если модель не уверена в релевантности предлагаемых ответов, входной диалог ведется не на английском языке или если модель обнаруживает деликатную тему.