Generowanie inteligentnych odpowiedzi za pomocą ML Kit na iOS

Możesz używać ML Kit do generowania odpowiedzi na wiadomości przy użyciu modelu na urządzeniu.

Aby generować inteligentne odpowiedzi, musisz przekazać ML Kit dziennik ostatnich wiadomości w rozmowie. Jeśli ML Kit ustali, że rozmowa jest w języku angielskim i nie ma potencjalnie poufnych tematów, ML Kit wygeneruje maksymalnie 3 odpowiedzi, które możesz zasugerować użytkownikowi.

Zanim zaczniesz

  1. Jeśli nie masz jeszcze dodanej usługi Firebase do swojej aplikacji, wykonaj czynności opisane we wprowadzeniu.
  2. Dodaj biblioteki ML Kit do pliku Podfile:
    pod 'Firebase/MLCommon', '6.25.0'
    pod 'Firebase/MLNLSmartReply', '6.25.0'
    
    Po zainstalowaniu lub zaktualizowaniu podów projektu pamiętaj, aby otworzyć projekt Xcode za pomocą pliku .xcworkspace.
  3. W aplikacji zaimportuj Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;

1. Tworzenie obiektu historii rozmowy

Aby generować inteligentne odpowiedzi, przekazujesz ML Kit ułożony chronologicznie tablicę obiektów TextMessage z najwcześniejszą sygnaturą czasową. Za każdym razem, gdy użytkownik wysyła lub odbiera wiadomość, dodaj do historii rozmowy wiadomość, jej sygnaturę czasową oraz identyfikator użytkownika nadawcy.

Identyfikatorem użytkownika może być dowolny ciąg, który jednoznacznie identyfikuje nadawcę w rozmowie. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika, a identyfikator użytkownika nie musi być spójny w wątkach lub wywołaniach generatora odpowiedzi inteligentnych.

Jeśli wiadomość została wysłana przez użytkownika, któremu chcesz proponować odpowiedzi, ustaw isLocalUser na wartość Prawda.

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];

Obiekt historii rozmowy wygląda jak w tym przykładzie:

Sygnatura czasowa Identyfikator użytkownika Korzystasz z lokalnego profilu? Wiadomość
Czw. Lut 2019, 13:13:39 PST 2019 prawda jesteś w drodze?
Czw. 21 lutego 13:15:03 PST 2019 ZNAJOMI0 fałsz Spóźnię się.

Najnowsza wiadomość w powyższym przykładzie pochodzi od użytkownika nielokalnego. To ważne, ponieważ ML Kit sugeruje odpowiedzi, które ma wysłać użytkownik Twojej aplikacji, czyli użytkownik lokalny. Upewnij się, że przekazujesz ML Kit dziennik rozmowy, który kończy się wiadomością, na którą użytkownik może chcieć odpowiedzieć.

2. Otrzymuj odpowiedzi na wiadomości

Aby generować inteligentne odpowiedzi na wiadomość, pobierz instancję SmartReply i przekaż historię rozmowy do jej metody 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.
      // ...
  }
}];
]

Jeśli operacja się powiedzie, do modułu obsługi uzupełniania zostanie przekazany obiekt SmartReplySuggestionResult. Ten obiekt zawiera listę maksymalnie 3 sugerowanych odpowiedzi, które możesz zaprezentować użytkownikowi:

Swift

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

Objective-C

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

Pamiętaj, że ML Kit może nie zwracać wyników, jeśli model nie ma pewności co do trafności sugerowanych odpowiedzi, rozmowy wejściowej nie jest w języku angielskim lub jeśli model wykryje temat o charakterze wrażliwym.