Genera risposte rapide con ML Kit su iOS

Puoi utilizzare ML Kit per generare risposte ai messaggi utilizzando un modello on-device.

Per generare le risposte rapide, passi a ML Kit un log dei messaggi recenti di una conversazione. Se ML Kit determina che la conversazione è in inglese e che non ha un argomento potenzialmente sensibile, genera fino a tre risposte che puoi suggerire all'utente.

Prima di iniziare

  1. Se non hai ancora aggiunto Firebase alla tua app, segui i passaggi descritti 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 il progetto Xcode utilizzando il relativo .xcworkspace.
  3. Nell'app, importa Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

1. Creare un oggetto della cronologia delle conversazioni

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

L'ID utente può essere qualsiasi stringa che identifichi in modo univoco il mittente all'interno della conversazione. L'ID utente non deve corrispondere a dati utente e non deve essere coerente tra le conversazioni o le invocazioni del generatore di risposte intelligenti.

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

Un oggetto della cronologia delle conversazioni è simile al seguente esempio:

Timestamp ID utente Utente locale? Messaggio
21 feb 2019 13:13:39 PST true Sei in viaggio?
21 feb 2019 13:15:03 PST FRIEND0 falso Mi dispiace, sono in ritardo.

Tieni presente che il messaggio più recente nell'esempio riportato sopra proviene da un utente non locale. 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:):

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 l'operazione riesce, un oggetto SmartReplySuggestionResult viene passato al gestore del completamento. Questo oggetto contiene un elenco di massimo tre risposte suggerite che puoi presentare all'utente:

Swift

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

Objective-C

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.