Skip to content

Commit 7389dd9

Browse files
committed
Merge branch 'feat/issue-24' into develop
2 parents 5671029 + 6d7ef2f commit 7389dd9

File tree

5 files changed

+70
-17
lines changed

5 files changed

+70
-17
lines changed

api/src/main/java/com/mbtips/domain/addition/controller/AdditionController.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.springframework.web.bind.annotation.RequestMapping;
1313
import org.springframework.web.bind.annotation.RestController;
1414

15+
import java.util.List;
16+
1517
@RestController
1618
@SecurityRequirements
1719
@RequiredArgsConstructor
@@ -22,8 +24,8 @@ public class AdditionController {
2224

2325
@GetMapping("/tips/{virtualFriendId}")
2426
@Operation(summary = "대화 꿀팁", description = "해당 AI와의 대화 꿀팁을 반환합니다.")
25-
public ApiResponse<String> requestConversationTips(@PathVariable Long virtualFriendId, @LoginUser User user){
26-
String result = additionService.requestConversationTips(virtualFriendId);
27+
public ApiResponse<List<String>> requestConversationTips(@PathVariable Long virtualFriendId, @LoginUser User user){
28+
List<String> result = additionService.requestConversationTips(virtualFriendId);
2729
return ApiResponse.success(result);
2830
}
2931

@@ -37,8 +39,8 @@ public ApiResponse<String> requestTemperature(@PathVariable Long conversationId)
3739

3840
@GetMapping("/recommendtopic/{virtualFriendId}")
3941
@Operation(summary = "대화 주제 추천", description = "해당 AI와의 대화 주제를 추천합니다.")
40-
public ApiResponse<String> reqeustRecommendTopic(@PathVariable Long virtualFriendId) {
41-
String result = additionService.requestRecommendTopic(virtualFriendId);
42+
public ApiResponse<List<String>> reqeustRecommendTopic(@PathVariable Long virtualFriendId) {
43+
List<String> result = additionService.requestRecommendTopic(virtualFriendId);
4244
return ApiResponse.success(result);
4345
}
4446
}

api/src/main/java/com/mbtips/domain/addition/service/AdditionService.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import java.util.ArrayList;
2323
import java.util.List;
24+
import java.util.regex.Matcher;
25+
import java.util.regex.Pattern;
2426

2527
@Service
2628
@RequiredArgsConstructor
@@ -32,14 +34,19 @@ public class AdditionService {
3234
public final MessageService messageService;
3335
public final VirtualFriendService virtualFriendService;
3436

35-
public String requestConversationTips(Long virtualFriendId) {
37+
public List<String> requestConversationTips(Long virtualFriendId) {
3638
VirtualFriendInfoResponse virtualFriend = virtualFriendService.findFriendInfoById(virtualFriendId);
3739

3840
String mbtiTrait = MbtiTraits.getTrait(MbtiType.valueOf(virtualFriend.mbti()));
3941
mbtiTrait = mbtiTrait.substring(mbtiTrait.indexOf("특징을 설명해주면 다음과 같아"));
40-
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때, 꿀팁 알려줘";
42+
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때 꿀팁 작성해줘. 대화 주제 별로 번호를 달아 나열해 설명해줘. 4~5개정도만 알려주고, 꿀팁 앞뒤로 쓸데없는 구문은 빼고 답변해줘";
4143
log.debug("requstPrompt : {}", requestPrompt);
42-
String result = messageManager.messageRequest(requestPrompt);
44+
String response = messageManager.messageRequest(requestPrompt);
45+
46+
log.debug("result : {}", response);
47+
48+
49+
List<String> result = extractItems(response);
4350
return result;
4451
}
4552

@@ -69,14 +76,36 @@ public String requestTemperature(Long conversationId) {
6976
return result;
7077
}
7178

72-
public String requestRecommendTopic(Long virtualFriendId) {
79+
public List<String> requestRecommendTopic(Long virtualFriendId) {
7380
VirtualFriendInfoResponse virtualFriend = virtualFriendService.findFriendInfoById(virtualFriendId);
7481
String mbtiTrait = MbtiTraits.getTrait(MbtiType.valueOf(virtualFriend.mbti()));
7582
mbtiTrait = mbtiTrait.substring(mbtiTrait.indexOf("특징을 설명해주면 다음과 같아"));
76-
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때, 맞는 대화 주제 키워드 5개만 추천해줘, 짧게 단어로만 이야기해줘";
83+
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때, 맞는 대화 주제를 작성해줘. 대화 주제 별로 번호를 달아 나열해 설명해줘. 4~5개정도만 알려주고, 대화 주제 앞뒤로 쓸데없는 구문은 빼고 답변해줘";
7784

78-
String result = messageManager.messageRequest(requestPrompt);
79-
log.debug("result : {}", result);
85+
String response = messageManager.messageRequest(requestPrompt);
86+
log.debug("result : {}", response);
87+
88+
List<String> result = extractItems(response);
8089
return result;
8190
}
91+
92+
private List<String> extractItems(String text) {
93+
List<String> items = new ArrayList<>();
94+
95+
// (?m) : ^, $가 각 라인 시작/끝을 의미하도록
96+
// (?s) : '.'이 개행문자도 매칭하도록
97+
// \\d+\\.\\s* : 숫자+마침표+공백
98+
// (.+?) : 항목 내용 (최소 매칭)
99+
// (?=\\r?\\n\\d+\\.|\\z) : 다음 항목 번호 또는 문자열 끝 전까지
100+
String regex = "(?ms)\\d+\\.\\s*(.+?)(?=\\r?\\n\\d+\\.|\\z)";
101+
Pattern pattern = Pattern.compile(regex);
102+
Matcher matcher = pattern.matcher(text);
103+
104+
while (matcher.find()) {
105+
// group(1)에 번호와 마침표를 제외한 '내용'만 들어있음
106+
items.add(matcher.group(1).trim());
107+
}
108+
109+
return items;
110+
}
82111
}

api/src/main/java/com/mbtips/domain/fastfriend/service/FastFriendService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ public String messageRequest(FastFriendMessageRequest request) {
4747
private String getfastFriendPrompt(FastFriend fastFriend) {
4848
StringBuilder result = new StringBuilder();
4949

50+
if(fastFriend.getFastFriendName() != null) result.append(" 너의 이름은 " + fastFriend.getFastFriendName() +"이야. 명심해!");
5051
MbtiType mbtiType = MbtiType.valueOf(fastFriend.getMbti());
5152
result.append(MbtiTraits.getTrait(mbtiType));
52-
if(fastFriend.getFastFriendName() != null) result.append(" 너의 이름은 " + fastFriend.getFastFriendName() +"이야. ");
5353
if(fastFriend.getFastFriendAge() != 0) result.append(" 너의 나이는 " + fastFriend.getFastFriendAge() + "이야. ");
5454
if(fastFriend.getFastFriendSex() != null) result.append(" 너의 성별은 " + fastFriend.getFastFriendSex() + "이야. ");
5555
if(fastFriend.getFastFriendRelationship() != null) result.append("너와 나의 관계는 " + fastFriend.getFastFriendRelationship() + "이야");

api/src/main/java/com/mbtips/message/application/manager/MessageManager.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,18 @@ public String sendMessage(User user, CreateMessageRequestDto createMessageReques
5050

5151
messageService.saveMessage(requestMessage);
5252

53+
List<GetMessageResponseDto> messages = messageService.getRecentMessagesOfConversationId(conversation.getConversationId());
54+
5355
String prompt = makePrompt(createMessageRequestDto.conversationId());
56+
57+
String recentMessagesPrompt = makeRecentMessageString(messages);
58+
prompt += recentMessagesPrompt;
59+
prompt = prompt + ". 이제 대화를 시작해보자!";
5460
log.debug("prompt : {} ", prompt);
61+
5562
String responseContent = messageRequest(prompt + " " + createMessageRequestDto.messageContent());
5663
log.debug("responseMessage : {} ", responseContent);
5764

58-
List<GetMessageResponseDto> messages = messageService.getRecentMessagesOfConversationId(conversation.getConversationId());
59-
6065

6166
Message responseMessage = Message.builder()
6267
.conversation(conversation)
@@ -68,6 +73,23 @@ public String sendMessage(User user, CreateMessageRequestDto createMessageReques
6873
return responseContent;
6974
}
7075

76+
private String makeRecentMessageString(List<GetMessageResponseDto> messages) {
77+
StringBuilder messageBuilder = new StringBuilder();
78+
for(int i = messages.size() - 6; i < messages.size(); i++){
79+
if(messages.get(i).userId() != null) {
80+
messageBuilder.append("사용자 : ");
81+
messageBuilder.append(messages.get(i).messageContent());
82+
}
83+
if(messages.get(i).virtualFriendId() != null) {
84+
messageBuilder.append("가상 친구 : ");
85+
messageBuilder.append(messages.get(i).messageContent());
86+
}
87+
if(i != messages.size() -1 ) messageBuilder.append(", ");
88+
}
89+
90+
return messageBuilder.toString();
91+
}
92+
7193
private String makePrompt(Long conversationId) {
7294
Conversation conversation = conversationRepository.findById(conversationId);
7395
VirtualFriend virtualFriend = conversation.getVirtualFriend();
@@ -76,15 +98,14 @@ private String makePrompt(Long conversationId) {
7698
String mbti = virtualFriend.getMbti();
7799
MbtiType mbtiType = MbtiType.valueOf(mbti);
78100
String result = MbtiTraits.getTrait(mbtiType);
79-
// 가상친구 관심사
80-
result += ". 이제 대화를 시작해보자!";
101+
81102
return result;
82103

83104
}
84105

85106
public String messageRequest(String content){
86107
com.mbtips.clova.dto.Message message = new com.mbtips.clova.dto.Message("user", content);
87-
ChatRequest chatRequest = new ChatRequest(Arrays.asList(message));
108+
ChatRequest chatRequest = new ChatRequest(Arrays.asList(message), 2000);
88109
String apiResult = clovaApiFeignClient.getResponse(
89110
"Bearer " + clovaApiKeyProvider.apiKey(),
90111
UUID.randomUUID().toString(),

external/src/main/java/com/mbtips/clova/dto/ChatRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@
1212
public
1313
class ChatRequest {
1414
private List<Message> messages;
15+
private Integer maxTokens;
1516
}

0 commit comments

Comments
 (0)