diff --git a/src/main/java/swm/betterlife/antifragile/domain/content/service/ContentService.java b/src/main/java/swm/betterlife/antifragile/domain/content/service/ContentService.java index c1d27cb..5b706c3 100644 --- a/src/main/java/swm/betterlife/antifragile/domain/content/service/ContentService.java +++ b/src/main/java/swm/betterlife/antifragile/domain/content/service/ContentService.java @@ -9,6 +9,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import org.checkerframework.checker.units.qual.A; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -48,7 +49,13 @@ public ContentListResponse saveRecommendContents(String memberId, LocalDate date DiaryAnalysis analysis = diaryAnalysisService.getDiaryAnalysisByMemberIdAndDate(memberId, date); Member member = memberService.getMemberById(memberId); - List recommendedContents = getRecommendContentsByAnalysis(analysis, member); + + String prompt = "이 일기의 감정에 정신적으로 도움이 되는 메타데이터를 10개 추천해줘"; + prompt = recommendService.createPrompt( + analysis.getEmotions(), analysis.getEvent(), member, prompt + ); + List recommendedContents + = getRecommendContentsByAnalysis(analysis, member, prompt); List savedContents = saveOrUpdateContents(recommendedContents); diaryAnalysisService.saveRecommendContents(analysis, savedContents); @@ -76,7 +83,12 @@ public ContentListResponse saveReRecommendContents( Member member = memberService.getMemberById(memberId); List recommendedUrls = extractRecommendContentUrls(analysis); - List recommendedContents = getRecommendContentsByAnalysis(analysis, member); + String prompt = "지금 사용자의 상태에 따라 관련되거나 정신적으로 도움 되는 콘텐츠 10개를 추천해줘"; + prompt = recommendService.createPrompt( + analysis.getEmotions(), analysis.getEvent(), member, prompt + ); + List recommendedContents + = getRecommendContentsByAnalysis(analysis, member, prompt); // TODO: 추후에 feedback을 통해서 재추천 컨텐츠를 가져와야 함 List savedContents = saveOrUpdateContents(recommendedContents); @@ -119,12 +131,18 @@ public void unlikeContent(String memberId, String contentId) { } } - private List getRecommendContentsByAnalysis(DiaryAnalysis analysis, Member member) { - - String prompt = recommendService.createPrompt( - analysis.getEmotions(), analysis.getEvent(), member); - - List videoIds = lambdaService.getRecommendations(prompt); + private List getRecommendContentsByAnalysis( + DiaryAnalysis analysis, Member member, String prompt + ) { + List videoIds = new ArrayList<>(); + int lambdaCnt = 0; + while (lambdaCnt < 5) { + videoIds = lambdaService.getRecommendations(prompt); + if (!videoIds.isEmpty()) { + break; + } + lambdaCnt++; + } try { YouTubeResponse youTubeResponse = recommendService.getYoutubeInfo(videoIds); diff --git a/src/main/java/swm/betterlife/antifragile/domain/recommend/service/RecommendService.java b/src/main/java/swm/betterlife/antifragile/domain/recommend/service/RecommendService.java index 3c86d90..757d0d3 100644 --- a/src/main/java/swm/betterlife/antifragile/domain/recommend/service/RecommendService.java +++ b/src/main/java/swm/betterlife/antifragile/domain/recommend/service/RecommendService.java @@ -42,16 +42,17 @@ public class RecommendService { @Value("${youtube.api.key}") private String apiKey; - public String createPrompt(List emotions, String event, Member member) { + public String createPrompt(List emotions, String event, Member member, String prompt) { String emotionString = String.join(", ", emotions); return String.format( - "%s 감정을 가진 나이가 %d인 %s이 쓴 일기 내용은 %s야. 이 일기의 감정에 정신적으로 도움이 되는 메타데이터를 10개 추천해줘", + "%s 감정을 가진 나이가 %d인 %s이 쓴 일기 내용은 \"%s\"야. %s", emotionString, AgeConverter.convertDateToAge(member.getBirthDate()), member.getJob(), - event + event, + prompt ); }