Генерируйте умные ответы с помощью ML Kit на iOS

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

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

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

  1. Если вы еще не добавили Firebase в свое приложение, сделайте это, выполнив действия, описанные в руководстве по началу работы .
  2. Включите библиотеки ML Kit в свой подфайл:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    После установки или обновления модулей вашего проекта обязательно откройте проект Xcode, используя его .xcworkspace .
  3. Импортируйте Firebase в свое приложение:

    Быстрый

    import Firebase

    Цель-C

    @import Firebase;

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)

Цель-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];

Объект истории разговоров выглядит следующим образом:

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

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

Быстрый

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

Цель-C

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

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