Genera risposte rapide con ML Kit su iOS

ML Kit può generare risposte brevi ai messaggi utilizzando un modello on-device.

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

Prova

Prima di iniziare

  1. Includi i seguenti pod ML Kit nel podfile:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Dopo aver installato o aggiornato i pod del progetto, apri il progetto Xcode utilizzando il relativo .xcworkspace. ML Kit è supportato in Xcode versione 12.4 o successiva.

1. Crea un oggetto cronologia conversazione

Per generare risposte rapide, passi a ML Kit un array di oggetti TextMessage in ordine cronologico, partendo dal timestamp più recente. Ogni volta che l'utente invia o riceve un messaggio, aggiungi quest'ultimo, il relativo timestamp e l'ID utente del mittente del messaggio 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 ad alcun dato utente e non deve essere coerente tra le conversazioni o le chiamate del generatore di risposte rapide.

Se il messaggio è stato inviato dall'utente a cui vuoi suggerire delle 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:
MLKTextMessage *message = [[MLKTextMessage 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 userID isLocalUser Messaggio
Gio 21 Feb 13:13:39 PST 2019 true stai arrivando?
Gio 21 Feb 13:15:03 PST 2019 FRIEND0 false Siamo in ritardo, scusa!

ML Kit suggerisce risposte all'ultimo messaggio nella cronologia delle conversazioni. L'ultimo messaggio deve provenire da un utente non locale. Nell'esempio precedente, l'ultimo messaggio nella conversazione proviene dall'utente non locale friend0. Quando usi questo log, supera il kit ML, questo suggerisce delle risposte al messaggio di FriendsO: "Sono in ritardo, scusa!".

2. Ricevi risposte ai messaggi

Per generare risposte rapide a un messaggio, ottieni un'istanza di SmartReply e trasmetti la cronologia della conversazione al relativo metodo 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 l'operazione ha esito positivo, un oggetto SmartReplySuggestionResult viene passato al gestore di 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 (MLKSmartReplySuggestion *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, la conversazione di input non è in inglese o se il modello rileva un oggetto sensibile.