Générer des réponses suggérées avec ML Kit sur iOS

ML Kit peut générer des réponses courtes aux messages à l'aide d'un modèle sur l'appareil.

Pour générer des réponses suggérées, vous transmettez à ML Kit un journal des messages récents dans une conversation. Si ML Kit détermine qu'il s'agit d'une conversation en anglais et qu'elle n'a pas d'objet potentiellement sensible, ML Kit génère jusqu'à trois réponses que vous pouvez suggérer à l'utilisateur.

Essayer

Avant de commencer

  1. Incluez les pods ML Kit suivants dans votre Podfile :
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Après avoir installé ou mis à jour les pods de votre projet, ouvrez votre projet Xcode à l'aide de son fichier .xcworkspace. ML Kit est compatible avec Xcode 12.4 ou version ultérieure.

1. Créer un objet d'historique de conversation

Pour générer des réponses suggérées, vous transmettez à ML Kit un tableau d'objets TextMessage dans l'ordre chronologique, en commençant par l'horodatage le plus ancien. Chaque fois que l'utilisateur envoie ou reçoit un message, ajoutez le message, son code temporel et l'ID utilisateur de l'expéditeur du message à l'historique de la conversation.

L'ID utilisateur peut être n'importe quelle chaîne identifiant de manière unique l'expéditeur dans la conversation. L'ID utilisateur ne doit pas nécessairement correspondre à des données utilisateur, et n'a pas besoin d'être cohérent entre les conversations ou les appels du générateur de réponses suggérées.

Si le message a été envoyé par l'utilisateur auquel vous souhaitez suggérer des réponses, définissez isLocalUser sur "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];

Voici à quoi ressemble un objet d'historique des conversations:

Code temporel userID isLocalUser Message
Jeu. 21 févr., 13:13:39 PST 2019 true tu es en route ?
Jeu. 21 févr., 13:15:03 PST 2019 FRIEND0 false Je suis en retard, désolé.

ML Kit suggère des réponses au dernier message d'un historique de conversation. Le dernier message doit provenir d'un utilisateur non local. Dans l'exemple ci-dessus, le dernier message de la conversation provient de l'utilisateur non local friend0. Lorsque vous transmettez ML Kit ce journal, celui-ci suggère des réponses au message de friendO: "En retard, désolé !"

2. Recevoir des réponses aux messages

Pour générer des réponses suggérées à un message, obtenez une instance de SmartReply et transmettez l'historique de la conversation à sa méthode 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.
      // ...
  }
}];

Si l'opération aboutit, un objet SmartReplySuggestionResult est transmis au gestionnaire d'achèvement. Cet objet contient une liste comportant jusqu'à trois réponses suggérées, que vous pouvez présenter à votre utilisateur:

Swift

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

Objective-C

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

Notez que ML Kit peut ne pas renvoyer de résultats si le modèle n'est pas certain de la pertinence des réponses suggérées, si la conversation d'entrée n'est pas en anglais ou si le modèle détecte un sujet sensible.