Gerar respostas inteligentes com o Kit de ML no iOS

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Kit de ML pode gerar respostas curtas para mensagens usando um modelo no dispositivo.

Para gerar respostas inteligentes, você transmite ao Kit de ML um registro de mensagens recentes em uma conversa. Se o Kit de ML determinar que a conversa está em inglês e que a conversa não tem um assunto possivelmente sensível, o Kit de ML gerará até três respostas, que você pode sugerir ao usuário.

Antes de começar

  1. Inclua os seguintes pods do Kit de ML no seu Podfile:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Depois de instalar ou atualizar os pods do seu projeto, abra o projeto do Xcode usando o .xcworkspace. O Kit de ML é compatível com o Xcode versão 12.4 ou mais recente.

1. Criar um objeto de histórico de conversas

Para gerar respostas inteligentes, transmita o Kit de ML uma matriz em ordem cronológica de objetos TextMessage, com o carimbo de data/hora mais antigo primeiro. Sempre que o usuário enviar ou receber uma mensagem, adicione a mensagem, o carimbo de data/hora e o ID do usuário do remetente da mensagem ao histórico de conversas.

O ID do usuário pode ser qualquer string que identifique exclusivamente o remetente na conversa. O ID do usuário não precisa corresponder a dados de usuário, e o ID do usuário não precisa ser consistente entre conversas ou invocações do gerador de resposta inteligente.

Se a mensagem foi enviada pelo usuário para que você quer sugerir respostas, defina isLocalUser como "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];

Um objeto de histórico de conversa é semelhante ao exemplo a seguir:

Carimbo de data/hora User-ID Usuário local Mensagem
Quinta-feira, 21 de fevereiro, 13:13:39 PST 2019 verdadeiro está a caminho?
Quinta-feira, 21 de fevereiro, 13:15:03 PST de 2019 AMIGO false Vou me atrasar,

O Kit de ML sugere respostas à última mensagem em um histórico de conversas. A última mensagem precisa ser de um usuário não local. No exemplo acima, a última mensagem na conversa é do usuário não local FRIEND0. Quando você usa o kit de ML para aprovação nesse registro, ele sugere respostas à mensagem de FRIENDO': quot;Correndo tarde, desculpe!"

2. Receber respostas de mensagens

Para gerar respostas inteligentes a uma mensagem, receba uma instância de SmartReply e transmita o histórico de conversas para o método 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.
      // ...
  }
}];

Se a operação for bem-sucedida, um objeto SmartReplySuggestionResult será transmitido para o gerenciador de conclusão. Esse objeto contém uma lista de até três respostas sugeridas, que você pode apresentar ao usuário:

Swift

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

Objective-C

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

O Kit de ML talvez não retorne resultados se o modelo não tiver confiança na relevância das respostas sugeridas, se a conversa de entrada não estiver em inglês ou se o modelo detectar um assunto confidencial.