ML Kit를 통해 기기별 모델을 사용하여 메시지 답장을 생성할 수 있습니다.
스마트 답장을 생성하려면 ML Kit에 대화의 최근 메시지 로그를 전달합니다. 대화 언어가 영어이고 민감한 주제가 포함되었을 가능성이 없다고 판단되면 ML Kit는 사용자에게 추천할 수 있는 답장을 최대 3개 생성합니다.
시작하기 전에
- 아직 추가하지 않았으면 Android 프로젝트에 Firebase를 추가합니다.
- 모듈(앱 수준) Gradle 파일(일반적으로
app/build.gradle
)에 ML Kit Android 라이브러리의 종속 항목을 추가합니다.apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { // ... implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0' implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7' }
- 또한 앱 수준의
build.gradle
파일에서tflite
파일의 압축을 사용하지 않도록 설정합니다.android { // ... aaptOptions { noCompress "tflite" } }
1. 대화 기록 객체 만들기
스마트 답장을 생성하려면 ML Kit에 시간순으로 정렬된 FirebaseTextMessage
객체의 List
를 전달합니다. 가장 오래된 타임스탬프가 먼저 나와야 합니다.
사용자가 메시지를 전송할 때마다 메시지와 타임스탬프를 대화 기록에 추가합니다.
자바
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()));
Kotlin
conversation.add(FirebaseTextMessage.createForLocalUser(
"heading out now", System.currentTimeMillis()))
사용자가 메시지를 수신할 때마다 메시지, 타임스탬프, 발신자의 사용자 ID를 대화 기록에 추가합니다. 사용자 ID는 대화 내에서 발신자를 식별하는 문자열이면 무엇이든 사용할 수 있습니다. 사용자 ID는 사용자 데이터와 일치할 필요는 없으며, 스마트 답장 생성기의 호출 또는 대화 간에 사용자 ID의 일관성이 없어도 됩니다.
자바
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId));
Kotlin
conversation.add(FirebaseTextMessage.createForRemoteUser(
"Are you coming back soon?", System.currentTimeMillis(), userId))
대화 기록 객체의 예시는 다음과 같습니다.
타임스탬프 | 사용자 ID | 로컬 사용자 여부 | 메시지 |
---|---|---|---|
Thu Feb 21 13:13:39 PST 2019 | true | are you on your way? | |
Thu Feb 21 13:15:03 PST 2019 | FRIEND0 | false | Running late, sorry! |
위의 예시에서 가장 최근 메시지는 로컬 사용자가 보낸 것이 아닙니다. 이 점이 중요한 이유는 ML Kit는 앱 사용자, 즉 로컬 사용자가 보낼 답장을 추천하기 때문입니다. ML Kit에 전달하는 대화 로그가 사용자가 답장을 보내려고 하는 메시지로 끝나는지 확인해야 합니다.
2. 메시지 답장 가져오기
메시지에 대한 스마트 답장을 생성하려면 FirebaseSmartReply
의 인스턴스를 가져와 suggestReplies()
메서드에 대화 기록을 전달합니다.
자바
FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
.addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
@Override
public void onSuccess(SmartReplySuggestionResult result) {
if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
// The conversation's language isn't supported, so the
// 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
// ...
}
});
Kotlin
val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
.addOnSuccessListener { result ->
if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
// The conversation's language isn't supported, so the
// the result doesn't contain any suggestions.
} else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
// Task completed successfully
// ...
}
}
.addOnFailureListener {
// Task failed with an exception
// ...
}
작업이 성공할 경우 SmartReplySuggestionResult
객체가 성공 핸들러에 전달됩니다. 이 객체에 사용자에게 표시할 수 있는 최대 3개의 추천 답장 목록이 포함됩니다.
자바
for (SmartReplySuggestion suggestion : result.getSuggestions()) {
String replyText = suggestion.getText();
}
Kotlin
for (suggestion in result.suggestions) {
val replyText = suggestion.text
}
모델이 추천 답장의 관련성을 확신할 수 없거나, 입력 대화가 영어가 아니거나, 모델이 민감한 주제를 감지할 경우 ML Kit가 결과를 반환하지 않을 수 있습니다.