Skip to content

Commit a851ebd

Browse files
committed
refactor: sendMessage 프롬프트 수정
1 parent 891210b commit a851ebd

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

src/main/java/shinhan/click/domain/chat/service/ChatService.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ public SendMessageResponse sendMessage(Long chatId, SendMessageRequest request)
137137
maybeMilestoneHint(session, chat);
138138
}
139139

140+
// 응답 형식 제어를 위한 추가 지침 전송
141+
String formatInstruction = buildFormatInstruction(chat);
142+
session.sendMessage(formatInstruction);
143+
140144
// 모델 호출
141145
GenerateContentResponse modelResp = session.sendMessage(request.content());
142146

@@ -484,6 +488,46 @@ private String normalizeQuotes(String response) {
484488
.trim();
485489
}
486490

491+
/**
492+
* 응답 형식 제어를 위한 추가 지침 생성
493+
*/
494+
private String buildFormatInstruction(shinhan.click.domain.chat.entity.Chat chat) {
495+
String characterName = safe(chat.getCharacter() != null ? chat.getCharacter().getName() : null);
496+
String personaName = safe(chat.getPersonaName());
497+
498+
StringBuilder instruction = new StringBuilder();
499+
500+
instruction.append("(응답 형식 지침) 다음 규칙을 엄격히 준수하여 응답하세요:\n\n");
501+
502+
// 1. 제3자 대사 금지
503+
instruction.append("1. 제3자 대사 금지:\n");
504+
instruction.append("- ").append(characterName).append("와 ").append(personaName).append(" 외의 다른 인물의 직접 발언은 절대 따옴표로 표시하지 않습니다\n");
505+
instruction.append("- 제3자의 말은 나레이션으로만 간접 인용: '그가 인사를 건넸다', '누군가 소리쳤다' 등\n");
506+
instruction.append("- 예시 (올바름): 멀리서 누군가 부르는 소리가 들렸다\n");
507+
instruction.append("- 예시 (금지): \"여기 있었구나!\" 친구가 말했다\n\n");
508+
509+
// 2. 응답 구성 제한
510+
instruction.append("2. 응답 구성 제한:\n");
511+
instruction.append("- ").append(characterName).append("의 나레이션: 최대 2회까지만\n");
512+
instruction.append("- ").append(characterName).append("의 대사: 최대 2회까지만\n");
513+
instruction.append("- 나레이션은 간결하게, 대사는 자연스럽게 배치\n");
514+
instruction.append("- 과도한 서술이나 반복적인 대사 금지\n\n");
515+
516+
// 3. 대사 표기 규칙 재확인
517+
instruction.append("3. 대사 표기 규칙:\n");
518+
instruction.append("- ").append(characterName).append("의 직접 발언만 표준 따옴표(\")로 감싸기\n");
519+
instruction.append("- 다른 종류의 따옴표 절대 사용 금지\n");
520+
instruction.append("- 나레이션과 대사를 명확히 구분\n\n");
521+
522+
// 4. 응답 예시
523+
instruction.append("4. 올바른 응답 구성 예시:\n");
524+
instruction.append("\"어? 여기서 뭐하고 있었어?\" 그가 고개를 갸우뚱하며 다가왔다. \"혹시 나를 기다리고 있었던 거야?\"\n\n");
525+
526+
instruction.append("이 지침들을 모든 응답에서 반드시 준수하되, 기존 캐릭터 설정과 세계관은 그대로 유지하세요.");
527+
528+
return instruction.toString();
529+
}
530+
487531
/**
488532
* 최적화된 히스토리 시딩 (기존 8개에서 4개로 단축)
489533
*/

0 commit comments

Comments
 (0)