Genera risposte rapide con ML Kit su iOS

Puoi utilizzare ML Kit per generare risposte ai messaggi utilizzando un un modello di machine learning.

Per generare risposte rapide, passi a ML Kit un log dei messaggi recenti in conversazione. Se ML Kit stabilisce che la conversazione è in inglese e la conversazione non tratta argomenti potenzialmente sensibili, ML Kit genera fino a tre risposte, che puoi suggerire all'utente.

Prima di iniziare

  1. Se non hai già aggiunto Firebase alla tua app, puoi farlo seguendo le istruzioni riportate in passaggi nella Guida introduttiva.
  2. Includi le librerie ML Kit nel tuo Podfile:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    Dopo aver installato o aggiornato i pod del progetto, assicurati di aprire Xcode utilizzando il suo .xcworkspace.
  3. Nell'app, importa Firebase:
    import Firebase
    @import Firebase;

1. Crea un oggetto cronologia conversazione

Per generare risposte rapide, passi a ML Kit un array ordinato cronologicamente TextMessage di oggetti, con il timestamp più recente. Ogni volta che l'utente invia o riceve un messaggio, aggiunge il messaggio, il relativo timestamp e il messaggio l'ID utente del mittente nella cronologia della conversazione.

L'ID utente può essere qualsiasi stringa che identifichi in modo univoco il mittente all'interno dei conversazione. Non è necessario che l'ID utente corrisponda a nessun dato utente, e non è necessario che l'ID utente sia coerente tra le conversazioni del generatore di risposte rapide.

Se il messaggio è stato inviato dall'utente a cui vuoi suggerire risposte, imposta isLocalUser su 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];

Un oggetto cronologia conversazione ha il seguente aspetto:

Timestamp ID utente Utente locale? Messaggio
gio 21 feb 13:13:39 PST 2019 true sei sulla strada giusta?
Gio 21 feb 13:15:03 PST 2019 FRIEND0 falso Siamo in ritardo, mi dispiace!

Tieni presente che il messaggio più recente nell'esempio riportato sopra proviene da un messaggio non locale utente. Questo è importante perché ML Kit suggerisce le risposte da inviare dall'utente della tua app: l'utente locale. Assicurati di passare a ML Kit un log della conversazione che termina con un messaggio a cui l'utente potrebbe voler rispondere.

2. Ricevere risposte ai messaggi

Per generare risposte rapide a un messaggio, ottieni un'istanza di SmartReply e passa la cronologia della conversazione al relativo metodo 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 l'operazione riesce, un oggetto SmartReplySuggestionResult viene passato al gestore del completamento. Questo oggetto contiene un elenco di massimo 3 suggerimenti che puoi presentare all'utente:

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

Tieni presente che ML Kit potrebbe non restituire risultati se il modello non è sicuro della pertinenza delle risposte suggerite, se la conversazione di input non è in inglese o se il modello rileva argomenti sensibili.