사용자가 characterSetting에 적은 텍스트를 분석하여 그 성격을 이해하고, 이를 바탕으로 대화 스타일을 생성하는 방식이다. 이를 위해 간단한 텍스트 분석 방법을 사용하거나 GPT와 같은 NLP 모델을 이용한다.
2. CharacterService 수정 (자동 분석 및 프롬프트 생성)
@Service
class CharacterService(val restTemplate: RestTemplate, val characterRepository: CharacterRepository) {
fun talkToCharacter(characterId: Long, userMessage: String): String {
// 캐릭터 정보 가져오기
val character = characterRepository.findById(characterId).orElseThrow {
Exception("캐릭터를 찾을 수 없습니다.")
}
// 성격을 분석해서 프롬프트 생성 (AI 기반 분석)
val prompt = generatePromptBasedOnCharacterSetting(character.characterSetting, character.characterName, userMessage)
// LLaMA API 요청 생성
val request = LlamaRequest(prompt = prompt)
// LLaMA API 호출
val llamaApiUrl = "http://llama-api-url/talk" // LLaMA API URL 설정
val response = restTemplate.postForObject<LlamaResponse>(llamaApiUrl, request)
// LLaMA API의 응답 처리
return response?.output ?: "응답을 받을 수 없습니다."
}
// 캐릭터 성격에 따른 프롬프트 생성
fun generatePromptBasedOnCharacterSetting(characterSetting: String, characterName: String, userMessage: String): String {
// 성격에 따라 적절한 말투 스타일을 자동 생성
return """
${characterName}는 "$characterSetting" 성격을 가지고 있습니다. 이 성격에 맞는 말투로 대답하세요.
질문: $userMessage
답변:
""".trimIndent()
}
}
talkToCharacter: 캐릭터의 ID와 사용자가 입력한 메시지를 받아서 캐릭터의 성격(characterSetting)에 맞게 프롬프트를 생성하고, 이를 LLaMA API에 전달하여 대답을 받는다.
generatePromptBasedOnCharacterSetting: 캐릭터의 성격과 이름을 사용하여 맞춤형 프롬프트를 생성한다.
3. CharacterController 수정
사용자가 캐릭터에게 말을 걸 수 있는 엔드포인트를 추가
@RestController
@RequestMapping("/character")
class CharacterController(
private val characterService: CharacterService
) {
// 캐릭터와 대화하는 엔드포인트
@PostMapping("/{characterId}/talk")
fun talkToCharacter(
@PathVariable characterId: Long,
@RequestBody request: TalkRequest
): ResponseEntity<String> {
val userMessage = request.message
// 캐릭터 대답 받기
val response = characterService.talkToCharacter(characterId, userMessage)
return ResponseEntity.ok(response)
}
}
// 요청 데이터를 위한 DTO
data class TalkRequest(
val message: String
)
talkToCharacter: 클라이언트가 캐릭터와 대화할 수 있도록 POST 엔드포인트 /character/{characterId}/talk를 추가한다. 사용자의 메시지를 받아 CharacterService의 talkToCharacter 메서드를 호출하고, 캐릭터의 대답을 클라이언트에 반환한다.
3. LlamaRequest 및 LlamaResponse 모델
data class LlamaRequest(
val prompt: String
)
data class LlamaResponse(
val output: String
)
이 모델은 LLaMA API와의 데이터 송수신에 사용된다.
최종적인 구성
CharacterController의 /talk 엔드포인트에서 캐릭터와의 대화를 시도한다.
CharacterService에서 캐릭터의 성격(characterSetting)을 분석하여 프롬프트를 생성하고, 이를 LLaMA API에 보내어 대답을 받는다.
클라이언트는 캐릭터와 자연스러운 대화를 할 수 있다
4. 예시
코드가 정상 작동 할 시 예시이다.
POST 요청
POST /character/1/talk
Content-Type: application/json
{
"message": "오늘 기분이 어때?"
}
응답
{
"response": "저는 매우 친절하고 상냥한 성격을 가진 캐릭터예요! 오늘 기분이 좋습니다!"
}
1. 사용자 입력 기반 성격 분석 및 프롬프트 생성
사용자가 characterSetting에 적은 텍스트를 분석하여 그 성격을 이해하고, 이를 바탕으로 대화 스타일을 생성하는 방식이다. 이를 위해 간단한 텍스트 분석 방법을 사용하거나 GPT와 같은 NLP 모델을 이용한다.
2. CharacterService 수정 (자동 분석 및 프롬프트 생성)
talkToCharacter: 캐릭터의 ID와 사용자가 입력한 메시지를 받아서 캐릭터의 성격(characterSetting)에 맞게 프롬프트를 생성하고, 이를 LLaMA API에 전달하여 대답을 받는다.
generatePromptBasedOnCharacterSetting: 캐릭터의 성격과 이름을 사용하여 맞춤형 프롬프트를 생성한다.
3. CharacterController 수정
사용자가 캐릭터에게 말을 걸 수 있는 엔드포인트를 추가
talkToCharacter: 클라이언트가 캐릭터와 대화할 수 있도록 POST 엔드포인트 /character/{characterId}/talk를 추가한다. 사용자의 메시지를 받아 CharacterService의 talkToCharacter 메서드를 호출하고, 캐릭터의 대답을 클라이언트에 반환한다.
3. LlamaRequest 및 LlamaResponse 모델
이 모델은 LLaMA API와의 데이터 송수신에 사용된다.
최종적인 구성
4. 예시
코드가 정상 작동 할 시 예시이다.
POST 요청
응답