44import com .aiary .be .global .annotation .Client ;
55
66import com .aiary .be .report .application .dto .AiResponse ;
7+ import com .aiary .be .report .domain .ReportType ;
78import lombok .extern .slf4j .Slf4j ;
89import org .springframework .beans .factory .annotation .Value ;
910import org .springframework .web .reactive .function .client .WebClient ;
@@ -25,11 +26,11 @@ public ReportClient(WebClient.Builder webClientBuilder) {
2526 this .webClient = webClientBuilder .baseUrl ("https://api.openai.com/v1" ).build ();
2627 }
2728
28- public Mono <AiResponse > analyze (Long userId , List <DiaryInfo > diaryInfos ) {
29- String prompt = buildPrompt (diaryInfos );
29+ public Mono <AiResponse > analyze (Long userId , List <DiaryInfo > diaryInfos , ReportType reportType ) {
30+ String prompt = buildPrompt (diaryInfos , reportType );
3031
3132 Map <String , Object > requestBody = new HashMap <>();
32- requestBody .put ("model" , "gpt-3.5-turbo " );
33+ requestBody .put ("model" , "gpt-4o-mini " );
3334 requestBody .put ("messages" , List .of (Map .of ("role" , "user" , "content" , prompt )));
3435
3536 return webClient .post ()
@@ -49,8 +50,20 @@ public Mono<AiResponse> analyze(Long userId, List<DiaryInfo> diaryInfos) {
4950 });
5051 }
5152
52- private String buildPrompt (List <DiaryInfo > diaryInfos ) {
53- StringBuilder prompt = new StringBuilder ("아래의 사용자의 일기를 읽고 우울감과 같은 심리 지표를 분석하고, 간단한 조언을 포함한 리포트를 작성해줘.\n " );
53+ private String buildPrompt (List <DiaryInfo > diaryInfos , ReportType reportType ) {
54+ String startStr = reportType .equals (ReportType .WEEKLY ) ?
55+ "아래는 사용자가 이번 주에 작성한 일기야.\n " : "아래는 사용자가 이번 달에 작성한 일기야.\n " ;
56+
57+ StringBuilder prompt = new StringBuilder (startStr );
58+ prompt .append ("아래의 일기들을 읽고, 사용자에게 공감과 위로가 담긴 따뜻한 리포트를 작성해 줘.\n " );
59+ prompt .append ("리포트에는 다음 내용을 포함해:\n " );
60+ prompt .append ("1. 일기를 읽고 느낀 전반적인 감정과 분위기 요약\n " );
61+ prompt .append ("2. 사용자에게 공감과 위로의 말\n " );
62+ prompt .append ("3. 오늘 하루를 되돌아볼 수 있는 질문 또는 생각할 거리\n " );
63+ prompt .append ("4. 앞으로의 마음가짐이나 행동에 도움이 될 수 있는 따뜻한 조언\n " );
64+ prompt .append ("너무 차갑거나 기계적으로 분석하지 말고, 진심 어린 친구처럼 부드럽고 따뜻하게 작성해 줘.\n " );
65+ prompt .append ("일기는 오직 Plain text로만 작성하고, 마크다운 문법을 사용하지 않아야 해\n " );
66+ prompt .append ("그리고, 1, 2, 3, 4 이런식의 첨자를 사용하지 말고 평서문으로 작성해줘\n " );
5467
5568 for (int i = 0 ; i < diaryInfos .size (); i ++) {
5669 prompt .append ("\n 일기 " )
@@ -62,8 +75,6 @@ private String buildPrompt(List<DiaryInfo> diaryInfos) {
6275 .append ("\n " );
6376 }
6477
65- prompt .append ("\n \n 분석의 형식은 두 줄로, 첫 줄에는 리포트의 제목을, 두 번째 줄에는 리포트의 내용을 적어줘" );
66-
6778 log .info (prompt .toString ());
6879 return prompt .toString ();
6980 }
0 commit comments