ML Kit는 기기별 모델을 사용하여 메시지에 대한 짧은 답장을 생성할 수 있습니다.
스마트 답장을 생성하려면 ML Kit에 대화의 최근 메시지 로그를 전달합니다. 대화 언어가 영어이고 민감한 주제가 포함되었을 가능성이 없다고 판단되면 ML Kit는 사용자에게 추천할 수 있는 답장을 최대 3개 생성합니다.
| 번들 | 번들 해제됨 | |
|---|---|---|
| 라이브러리 이름 | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply | 
| 구현 | 모델이 빌드 시 앱에 정적으로 연결됩니다. | 모델은 Google Play 서비스를 통해 동적으로 다운로드됩니다. | 
| 앱 크기 영향 | 크기가 약 5.7MB 증가합니다. | 크기가 약 200KB 증가합니다. | 
| 초기화 시간 | 모델을 즉시 사용할 수 있습니다. | 처음 사용하기 전에 모델이 다운로드될 때까지 기다려야 할 수 있습니다. | 
사용해 보기
- 샘플 앱을 사용해 이 API의 사용 예를 확인하세요.
시작하기 전에
- 프로젝트 수준 - build.gradle파일의- buildscript및- allprojects섹션에 Google의 Maven 저장소가 포함되어야 합니다.
- 모듈의 앱 수준 Gradle 파일(일반적으로 - app/build.gradle)에 ML Kit Android 라이브러리의 종속 항목을 추가합니다. 필요에 따라 다음 종속 항목 중 하나를 선택합니다.- 모델을 앱과 함께 번들로 묶으려면 다음 단계를 따르세요.
 - dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:smart-reply:17.0.4' }- Google Play 서비스에서 모델을 사용하려면 다음 단계를 따르세요.
 - dependencies { // ... // Use this dependency to use the dynamically downloaded model in Google Play Services implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1' }- Google Play 서비스에서 모델을 사용하기로 선택한 경우 Play 스토어에서 앱을 설치한 후 기기에 모델을 자동으로 다운로드하도록 앱을 구성할 수 있습니다. 앱의 - AndroidManifest.xml파일에 다음 선언을 추가합니다.- <application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="smart_reply" > <!-- To use multiple models: android:value="smart_reply,model2,model3" --> </application>- Google Play 서비스 ModuleInstallClient API를 통해 모델 가용성을 명시적으로 확인하고 다운로드를 요청할 수도 있습니다. - 설치 시 모델 다운로드를 사용 설정하지 않거나 명시적 다운로드를 요청하지 않으면 스마트 답장 생성기를 처음 실행할 때 모델이 다운로드됩니다. 다운로드가 완료되기 전에 요청하면 결과가 나오지 않습니다. - 1. 대화 기록 객체 만들기- 스마트 답장을 생성하려면 ML Kit에 시간순으로 정렬된 - TextMessage객체의- List를 전달합니다. 가장 오래된 타임스탬프가 먼저 나와야 합니다.- 사용자가 메시지를 전송할 때마다 메시지와 타임스탬프를 대화 기록에 추가합니다. - Kotlin- conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis())) - 자바- conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis())); - 사용자가 메시지를 수신할 때마다 메시지, 타임스탬프, 발신자의 사용자 ID를 대화 기록에 추가합니다. 사용자 ID는 대화 내에서 발신자를 식별하는 문자열이면 무엇이든 사용할 수 있습니다. 사용자 ID는 사용자 데이터와 일치할 필요는 없으며, 스마트 답장 생성기의 호출 또는 대화 간에 사용자 ID의 일관성이 없어도 됩니다. - Kotlin- conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId)) - 자바- conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId)); - 대화 기록 객체의 예시는 다음과 같습니다. - 타임스탬프 - userID - isLocalUser - 메시지 - Thu Feb 21 13:13:39 PST 2019 - true - are you on your way? - Thu Feb 21 13:15:03 PST 2019 - FRIEND0 - 거짓 - 늦어서 죄송합니다. - ML Kit은 대화 기록의 마지막 메시지에 대한 답장을 제안합니다. 마지막 메시지는 로컬 사용자가 아닌 사용자가 보낸 것이어야 합니다. 위의 예시에서 대화의 마지막 메시지는 로컬 사용자가 아닌 FRIEND0가 보낸 것입니다. 이 로그를 ML Kit에 전달하면 FRIENDO의 메시지인 '늦어서 죄송합니다'에 대한 답장을 제안합니다. - 2. 메시지 답장 가져오기- 메시지에 대한 스마트 답장을 생성하려면 - SmartReplyGenerator의 인스턴스를 가져와- suggestReplies()메서드에 대화 기록을 전달합니다.- Kotlin- val smartReplyGenerator = SmartReply.getClient() smartReply.suggestReplies(conversation) .addOnSuccessListener { result -> if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) { // The conversation's language isn't supported, so // the result doesn't contain any suggestions. } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) { // Task completed successfully // ... } } .addOnFailureListener { // Task failed with an exception // ... } - 자바- SmartReplyGenerator smartReply = SmartReply.getClient(); smartReply.suggestReplies(conversation) .addOnSuccessListener(new OnSuccessListener - () { @Override public void onSuccess(SmartReplySuggestionResult result) { if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) { // The conversation's language isn't supported, so // the result doesn't contain any suggestions. } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) { // Task completed successfully // ... } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Task failed with an exception // ... } }); - 작업이 성공할 경우 - SmartReplySuggestionResult객체가 성공 핸들러에 전달됩니다. 이 객체에 사용자에게 표시할 수 있는 최대 3개의 추천 답장 목록이 포함됩니다.- Kotlin- for (suggestion in result.suggestions) { val replyText = suggestion.text } - 자바- for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); } - 모델이 추천 답장의 관련성을 확신할 수 없거나, 입력 대화가 영어가 아니거나, 모델이 민감한 주제를 감지할 경우 ML Kit가 결과를 반환하지 않을 수 있습니다. 
