Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

수다떨기 ( Google GEMINI 을 활용한) 봇 이야기

Billcorea 2024. 1. 24. 15:08
반응형

 

수다 떨기 (GEMINI) 개발 이야기

 

메인화면

 

이번 이야기는 이전 버전에서 달라지는 수다 떨기(GEMINI) 버전에 대한 이야기입니다.  이전 버전은 koGPT을 활용한 버전이었습니다. 다만, KAKAO API 가 제공하는 koGPT의 기능은 그렇게 많은 도움을 주지 않았던  거 같습니다. 해서 이번에는 구글에서 제공하고 있는 GEMINI API을 활용한 버전으로 옮겨 가고자 합니다. 

 

https://developer.android.com/studio/preview/gemini-template?hl=ko

 

Android 스튜디오에서 첫 번째 생성형 AI 앱 빌드하기  |  Android Developers

Android 스튜디오의 새 템플릿을 사용하여 생성형 AI 앱을 실행하세요.

developer.android.com

 

그 시작은 android 개발자 가이드 페이지에서 시작 됩니다.  이전 글에서도 강조했던 것과 같이 AI 이야기를 하는 부분은 prompt을 어떻게 작성을 하는 가에 따라 달라진다고 볼 수 있을 것 같습니다.  android 개발자 가이드에서 보는 것과 같이 구성을 하게 되면 기본적인 APP 은 만들어질 수 있습니다. 

 

import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.ai.client.generativeai.GenerativeModel
import com.google.mlkit.nl.translate.Translator
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch

class SummarizeViewModel(
    private val generativeModel: GenerativeModel
) : ViewModel() {
    
    private val _uiState: MutableStateFlow<SummarizeUiState> =
        MutableStateFlow(SummarizeUiState.Initial)
    val uiState: StateFlow<SummarizeUiState> = _uiState.asStateFlow()
    
    var transString =  mutableListOf("")
    lateinit var englishGermanTranslator : Translator
    
    fun summarize(inputText: String, englishGermanTranslator: Translator) {
        _uiState.value = SummarizeUiState.Loading
        
        val prompt = "You are a psychologist who counsels men and women on breakups. The other person who is saddened by the breakup of a loved one will ask you questions that can help them get out of the heartache of the breakup. You should answer this question by talking about various ways to get out of your current state of mind. Summarize the other person's question before answering. You must answer in Korean. Now let's ask the question : $inputText"
        
        viewModelScope.launch {
            try {
                val response = generativeModel.generateContent(prompt)
                response.text?.let { outputContent ->
                    _uiState.value = SummarizeUiState.Success(outputContent)
                }
            } catch (e: Exception) {
                _uiState.value = SummarizeUiState.Error(e.localizedMessage ?: "")
            }
        }
    }
}

 

GEMINI와 호출을 하기 위해서 구현하는  viewModel인데, prompt 구문을 한글을 번역해 영문으로 작성해 주었습니다. Gemini AI는 영문을 중심으로 기동하고 있기 때문 이기도 합니다. 

 

앱을 구현하기 위해서는 android studio 의 버전이 최신 버전 (canari 버전입니다)을 설치하여야 가능합니다. 혹시 이전 버전을 시용해서 시도하시지는 않으시길 기원할게요.

 

사용자가이드

 

앱의 구성은 단순 간결합니다.  

 

앱이 시작되면 향후 사용하게 될 영어 -> 한글 자동 번역을 위한 ML Data 수신을 시도합니다. 이 때는 잠시 동안(최대 3분 이내)의 대기 시간이 발생됩니다. 

 

대화창 샘플

 

화면 하단에 대화창에 당신의 이야기를 들려주세요. 상담가는 이별한 남녀의 슬픔에 대한 적극적인 상담을 하게 될 겁니다.   충분한 상담이 이루어져서 당신의 마음에 평온한 시간이 함께 하실 수 있기를 기원해 드리겠습니다. 

 

 

오늘도 당신의 하루에 응원을 드립니다.

 

수다떨기 챗봇 새로운 버전과 함께 하세요.

 

https://play.google.com/store/apps/details?id=com.billcorea.sudabot0222

 

수다떨기 (챗봇 대화) - Google Play 앱

심심할 때 수다을 떨어 보세요... 챗봇이 응답해 드립니다.

play.google.com

 

반응형