Generowanie inteligentnych odpowiedzi za pomocą ML Kit na iOS

ML Kit może generować krótkie odpowiedzi na wiadomości za pomocą modelu na urządzeniu.

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

Wypróbuj

Zanim zaczniesz

  1. W pliku Podfile uwzględnij te pody ML Kit:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Po zainstalowaniu lub zaktualizowaniu podów w projekcie otwórz projekt Xcode, korzystając z jego polecenia .xcworkspace. ML Kit obsługuje Xcode w wersji 12.4 lub nowszej.

1. Tworzenie obiektu historii rozmowy

Aby generować inteligentne odpowiedzi, przekazujesz ML Kit uporządkowaną chronologicznie tablicę obiektów TextMessage, zaczynając od najwcześniejszej sygnatury czasowej. Za każdym razem, gdy użytkownik wysyła lub odbiera wiadomość, dodaj ją do historii rozmowy, jej sygnaturę czasową oraz identyfikator użytkownika nadawcy.

Identyfikator użytkownika może być dowolnym ciągiem znaków, który jednoznacznie identyfikuje nadawcę w rozmowie. Identyfikator użytkownika nie musi odpowiadać żadnym danym użytkownika ani być spójny między wątkami czy wywołaniami generatora inteligentnych odpowiedzi.

Jeśli wiadomość została wysłana przez użytkownika, któremu chcesz zaproponować odpowiedzi, ustaw isLocalUser na „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];

Przykład obiektu historii rozmowy:

Sygnatura czasowa userID isLocalUser przekaz,
Czw 21 lutego 13:13:39 PST 2019 prawda jesteś w drodze?
Czw 21 lutego 13:15:03 czasu PST 2019 FRIEND0 false Spóźnię się, przepraszam.

ML Kit sugeruje odpowiedzi na ostatnią wiadomość w historii rozmowy. Ostatnia wiadomość powinna być od użytkownika spoza lokalnego. W powyższym przykładzie ostatnia wiadomość w wątku pochodzi od nielokalnego użytkownika friend0. Gdy użyjesz tego logu z pakietem ML Kit, będzie on sugerować odpowiedzi na wiadomość od znajomego: „Budujesz się, spóźnię się, przepraszam!”.

2. Otrzymuj odpowiedzi na wiadomości

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

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

Swift

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

Objective-C

for (MLKSmartReplySuggestion *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, rozmowa wejściowa nie jest w języku angielskim lub jeśli model wykryje wrażliwe tematy.