Ir para o console

Gerar respostas inteligentes com o Kit de ML no iOS

É possível usar o kit de ML para gerar respostas de mensagens usando um modelo no dispositivo.

Para gerar respostas inteligentes, você transmite ao kit de ML um registro das mensagens recentes de uma conversa. Se o kit determinar que a conversa está em inglês e ela não tiver um assunto potencialmente confidencial, o kit gerará até três respostas, que podem ser sugeridas ao usuário.

Consulte o guia de início rápido do kit de ML (em inglês) no GitHub para ver um exemplo desta API em uso.

Antes de começar

  1. Se você ainda não adicionou o Firebase ao seu app, siga as etapas no guia de primeiros passos.
  2. Inclua as bibliotecas do Kit de ML no seu Podfile:
    pod 'Firebase/Analytics'
    pod 'Firebase/MLCommon'
    pod 'Firebase/MLNLSmartReply'
    
    Depois de instalar ou atualizar os pods do seu projeto, abra o projeto do Xcode usando o .xcworkspace.
  3. Importe o Firebase para seu app:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

1. Criar um objeto de histórico de conversas

Para gerar respostas inteligentes, você transmite para o kit de aprendizado de máquina 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, adicionar a mensagem, o carimbo de data/hora e o código do usuário do remetente da mensagem ao histórico de conversas.

O código do usuário pode ser qualquer string que identifique de maneira exclusiva o remetente na conversa. O código do usuário não precisa corresponder a nenhum dado do usuário e nem ser consistente entre conversas ou chamadas do gerador de resposta inteligente.

Se a mensagem foi enviada pelo usuário para o qual 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:
FIRTextMessage *message = [[FIRTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

Um objeto de histórico de conversas é parecido com o exemplo a seguir:

Carimbo de data/hora ID do usuário Usuário local? Mensagem
Thu Feb 21 13:13:39 PST 2019 true are you on your way?
Thu Feb 21 13:15:03 PST 2019 FRIEND0 false Running late, sorry!

A mensagem mais recente no exemplo acima é de um usuário não local. Isso é importante porque o kit de ML sugere respostas a serem enviadas pelo usuário do seu aplicativo, o usuário local. Verifique se você está transmitindo ao kit de ML um registro de conversa que termina com uma mensagem à qual o usuário pode querer responder.

2. Receber respostas de mensagens

Para gerar respostas inteligentes a uma mensagem, receba uma instância de SmartReply e transmita o histórico da conversa para o método suggestReplies(for:completion:):

Swift

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.
        // ...
    }
}

Objective-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.
      // ...
  }
}];
]

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 podem ser apresentadas ao usuário:

Swift

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

Objective-C

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

O kit de aprendizado de máquina poderá não retornar resultados se o modelo não estiver confiante 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.

Próximas etapas

Consulte o guia de início rápido do Kit de ML (em inglês) no GitHub para ver um exemplo da API em uso.