Skip to content

Commit 63999b1

Browse files
authored
Merge ♻️ refactor : ai 요약 내용 리스트 반환
♻️ refactor : ai 요약 내용 리스트 반환
2 parents 976e0df + afeff8f commit 63999b1

5 files changed

Lines changed: 18 additions & 15 deletions

File tree

src/main/java/com/hansung/leafly/domain/book/web/dto/BookInfoRes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
public record BookInfoRes(
66
BookDetailRes bookDetail, // 책 상세 정보
7-
String aiSummary, // AI가 생성한 요약 문장
7+
List<String> aiSummary, // AI가 생성한 요약 문장
88
List<String> aiTags, // AI가 선정한 태그들
99
List<RecommendRes> recommendations, // 추천 책 리스트
1010
boolean isLiked
1111
){
1212
public static BookInfoRes of(
1313
BookDetailRes bookDetailRes,
14-
String aiSummary,
14+
List<String> aiSummary,
1515
List<String> aiTags,
1616
List<RecommendRes> recommendations,
1717
boolean isLiked

src/main/java/com/hansung/leafly/domain/bookreview/entity/BookReview.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class BookReview extends BaseEntity {
3737
@Column(nullable =true, name = "review_title")
3838
private String reviewTitle;
3939

40-
@Column(nullable = false)
40+
@Column(nullable = false, columnDefinition = "TEXT")
4141
private String content;
4242

4343
@ManyToOne(fetch = FetchType.LAZY)

src/main/java/com/hansung/leafly/infra/openai/OpenAiClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.hansung.leafly.infra.openai.dto.BookSummaryAiRes;
66
import com.hansung.leafly.infra.openai.dto.RecommendAiRes;
77
import com.hansung.leafly.infra.openai.exception.OpenaiRequestFailed;
8+
import lombok.extern.slf4j.Slf4j;
89
import org.springframework.beans.factory.annotation.Value;
910
import org.springframework.http.HttpEntity;
1011
import org.springframework.http.HttpHeaders;
@@ -16,6 +17,7 @@
1617
import java.util.Map;
1718

1819
@Component
20+
@Slf4j
1921
public class OpenAiClient {
2022

2123
@Value("${openai.api.key}")
@@ -62,6 +64,7 @@ private <T> T callOpenAi(String prompt, Class<T> responseType) {
6264
return mapper.readValue(content, responseType);
6365

6466
} catch (Exception e) {
67+
log.error("[OpenAI ERROR] Exception 메시지: {}", e.getMessage());
6568
throw new OpenaiRequestFailed();
6669
}
6770
}

src/main/java/com/hansung/leafly/infra/openai/dto/BookSummaryAiRes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
import java.util.List;
44

55
public record BookSummaryAiRes(
6-
String summary,
6+
List<String> summary,
77
List<String> tags
88
) {}

src/main/java/com/hansung/leafly/infra/openai/prompt/RecommendationPrompt.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public static String build(Onboarding onboarding) {
5353
public static String build(BookDetailRes book) {
5454
return """
5555
당신은 한국 도서 전문 리뷰어이자 요약 전문가입니다.
56-
아래 책 정보를 기반으로 **정확하고 신뢰할 수 있는 요약(최소 2~3문장)**과
56+
아래 책 정보를 기반으로 **정확하고 신뢰할 수 있는 문장 단위 요약(최소 4~6개 문장)**과
5757
**책의 핵심 주제나 톤을 반영하는 태그 최소 2~5개**를 생성해주세요.
5858
5959
[책 정보]
@@ -64,20 +64,20 @@ public static String build(BookDetailRes book) {
6464
- 책 설명: %s
6565
6666
[요약 작성 기준]
67-
1. 줄거리를 요약하되 스포일러는 포함하지 않습니다.
68-
2. 책의 핵심 메시지·감정·분위기·주제를 자연스럽게 드러냅니다.
69-
3. 문장은 최소 2~3줄 분량으로 작성합니다.
70-
(너무 짧은 한줄 요약 금지)
71-
67+
1. 줄거리를 문장 단위로 요약합니다.
68+
(예: 요약문 1문장 = 하나의 핵심 아이디어)
69+
2. 스포일러는 포함하지 않습니다.
70+
3. 책의 핵심 메시지·감정·분위기·주제를 자연스럽게 드러냅니다.
71+
4. 총 **4~6개의 문장 요약**을 생성하세요.
72+
7273
[태그 작성 기준]
73-
- #태그 형식으로 작성하세요.
74-
- 최소 2개 이상, 최대 5개 생성하세요.
75-
- 책의 성향/주제/톤/분위기/대상 독자 등을 나타내는 단어로 구성하세요.
76-
- 예시: #우정 #감정 #청소년문학 #소설 #철학 #성장 #심리
74+
- #태그 형식
75+
- 최소 2개, 최대 5개
76+
- 책의 성향/주제/톤/분위기/대상 독자 등을 나타내는 단어
7777
7878
[응답 형식(JSON)]
7979
{
80-
"summary": "여기에 책 요약(최소 2~3문장)",
80+
"summary": ["요약 문장 1", "요약 문장 2", "요약 문장 3"],
8181
"tags": ["#태그1", "#태그2", "#태그3"]
8282
}
8383

0 commit comments

Comments
 (0)