ML Kit может генерировать короткие ответы на сообщения, используя модель на устройстве.
Чтобы сгенерировать быстрые ответы, передайте в ML Kit журнал последних сообщений в чате. Если ML Kit определит, что разговор ведется на английском языке и не содержит потенциально конфиденциальных тем, он сгенерирует до трех вариантов ответа, которые вы сможете предложить пользователю.
Попробовать
- Попробуйте поработать с примером приложения, чтобы понять, как использовать этот API.
Подготовка
- Добавьте в Podfile следующие контейнеры ML Kit:
pod 'GoogleMLKit/SmartReply', '8.0.0'
- После установки или обновления Pods проекта откройте проект Xcode, используя файл
.xcworkspace. ML Kit поддерживается в Xcode версии 12.4 и выше.
1. Как создать объект истории чата
Чтобы сгенерировать быстрые ответы, передайте в ML Kit хронологически упорядоченный массив объектов TextMessage, начиная с самой ранней временной метки. Когда пользователь отправляет или получает сообщение, добавьте сообщение, его временную метку и идентификатор пользователя отправителя в историю чата.
Идентификатор пользователя может быть любой строкой, которая уникальным образом идентифицирует отправителя в рамках разговора. Идентификатор пользователя не должен соответствовать каким-либо пользовательским данным и может быть разным в разных разговорах или при разных вызовах генератора быстрых ответов.
Если сообщение было отправлено пользователем, которому вы хотите предложить готовые ответы, задайте для 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 | Сообщение |
|---|---|---|---|
| Четверг, 21 февраля 2019 г., 13:13:39 по тихоокеанскому стандартному времени | true | Ты уже едешь? | |
| Thu Feb 21 13:15:03 PST 2019 | FRIEND0 | false | Опаздываю, извините! |
ML Kit предлагает готовые ответы на последнее сообщение в истории чата. Последнее сообщение должно быть от пользователя, не являющегося локальным. В примере выше последнее сообщение в чате отправлено пользователем FRIEND0, который не находится в том же регионе, что и вы. Когда вы используете ML Kit для обработки этого журнала, он предлагает ответы на сообщение 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); }
Обратите внимание, что ML Kit может не возвращать результаты, если модель не уверена в релевантности готовых ответов, если входной диалог не на английском языке или если модель обнаруживает деликатную тему.