iOS에서 ML Kit를 사용한 스마트 답장 생성

ML Kit는 온디바이스 모델을 사용하여 메시지에 대한 짧은 답장을 생성할 수 있습니다.

스마트 답장을 생성하려면 ML Kit에 있습니다. ML Kit에서 대화가 영어라고 판단하고 대화에 민감한 주제가 포함되어 있지 않을 수 있으므로 ML Kit는 최대 3개의 응답을 생성하여 사용자에게 제안할 수 있습니다.

사용해 보기

  • 샘플 앱을 사용하여 이 API의 사용 예를 참조하세요.

시작하기 전에

  1. Podfile에 다음 ML Kit 포드를 포함합니다.
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. 프로젝트의 포드를 설치하거나 업데이트한 후 포드를 사용하여 Xcode 프로젝트를 엽니다. .xcworkspace ML Kit는 Xcode 버전 12.4 이상에서 지원됩니다.

1. 대화 기록 객체 만들기

스마트 답장을 생성하려면 ML Kit에 시간순으로 정렬된 TextMessage 객체(가장 오래된 타임스탬프가 먼저 표시됨) 사용자가 메시지를 보내거나 받고, 메시지, 타임스탬프, 메시지 추가 대화 기록에 추가합니다.

사용자 ID는 있습니다. 사용자 ID가 사용자 데이터와 일치하지 않아도 되므로 대화나 대화 간에 사용자 ID가 일관되지 않아도 됩니다. 스마트 회신 생성기의 호출을 포함합니다.

답장을 추천하려는 사용자가 보낸 메시지인 경우 다음과 같이 설정합니다. isLocalUser를 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];

대화 기록 객체의 예시는 다음과 같습니다.

타임스탬프 userID isLocalUser 메시지
2019년 2월 21일 목요일 13:13:39 PST true 가는 중인가요?
2019년 2월 21일 목요일 13:15:03 PST FRIEND0 거짓 너무 늦었어요, 죄송합니다!

ML Kit는 대화 기록의 마지막 메시지에 대한 답장을 제안합니다. 마지막 메시지 로컬에 있지 않은 사용자가 보낸 것이어야 합니다. 위의 예에서는 대화의 마지막 메일이 은 로컬 사용자가 아닌 사용자 FRIEND0에게 있습니다. 이 로그를 통과하는 ML Kit를 사용하면 FRIENDO의 메시지에 대한 답장: "늦었어, 죄송합니다!"

2. 메시지 답장 받기

메시지에 대한 스마트 답장을 생성하려면 SmartReply의 인스턴스를 가져와 다음을 전달합니다. 대화 기록을 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.
      // ...
  }
}];

작업이 성공하면 SmartReplySuggestionResult 객체가 완료 핸들러에 전달합니다. 이 객체에는 제안되는 키워드 목록(최대 3개)이 포함됩니다. 사용자에게 표시할 수 있는 다음 답글:

Swift

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

Objective-C

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

모델이 확신할 수 없는 경우 ML Kit가 결과를 반환하지 않을 수 있습니다. 추천 답변의 관련성, 입력 대화가 없는 경우 영어 또는 모델이 민감한 주제를 감지하는 경우