Gere respostas inteligentes com kit de ML no iOS

Você pode usar o ML Kit para gerar respostas de mensagens usando um modelo no dispositivo.

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

Antes de você começar

  1. Se você ainda não adicionou o Firebase ao seu aplicativo, faça isso seguindo as etapas do guia de primeiros passos .
  2. Inclua as bibliotecas do ML Kit em seu Podfile:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    Depois de instalar ou atualizar os pods do seu projeto, certifique-se de abrir seu projeto Xcode usando seu .xcworkspace .
  3. No seu aplicativo, importe o Firebase:
    import Firebase
    @import Firebase;

1. Crie um objeto de histórico de conversa

Para gerar respostas inteligentes, você passa ao ML Kit uma matriz ordenada cronologicamente 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, seu carimbo de data/hora e o ID do usuário do remetente da mensagem ao histórico da conversa.

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 nenhum dado do usuário e não precisa ser consistente entre conversas ou invocações do gerador de resposta inteligente.

Se a mensagem foi enviada pelo usuário ao qual você deseja sugerir respostas, defina isLocalUser como 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:
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 conversa se parece com o exemplo a seguir:

Carimbo de data e hora ID do usuário Usuário local? Mensagem
Qui, 21 de fevereiro, 13:13:39 PST de 2019 verdadeiro você está no seu caminho?
Qui, 21 de fevereiro, 13:15:03 PST de 2019 AMIGO0 falso Atrasado, desculpe!

Observe que a mensagem mais recente no exemplo acima é de um usuário não local. Isso é importante porque o ML Kit sugere respostas que devem ser enviadas pelo usuário do seu aplicativo: o usuário local. Você deve passar ao Kit de ML um registro de conversa que termina com uma mensagem à qual seu usuário pode querer responder.

2. Obtenha respostas de mensagens

Para gerar respostas inteligentes para uma mensagem, obtenha uma instância de SmartReply e passe o histórico da conversa para seu método 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.
        // ...
    }
}
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á passado para o manipulador de conclusão. Este objeto contém uma lista de até 3 respostas sugeridas, que você pode apresentar ao seu usuário:

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

Observe que o kit de ML 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 assuntos confidenciais.