From 84eefa5f60610d7314af3faefbfed00f9ed05e6f Mon Sep 17 00:00:00 2001 From: whitenoise13 Date: Sun, 2 Feb 2025 04:32:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Feat::=20=EC=89=AC=EC=9A=B4=EC=9A=A9?= =?UTF-8?q?=EC=96=B4=ED=92=80=EC=9D=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Minari/cheongForDo/domain/term/entity/Term.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/Minari/cheongForDo/domain/term/entity/Term.java b/src/main/java/Minari/cheongForDo/domain/term/entity/Term.java index 1ccde00..340618b 100644 --- a/src/main/java/Minari/cheongForDo/domain/term/entity/Term.java +++ b/src/main/java/Minari/cheongForDo/domain/term/entity/Term.java @@ -53,4 +53,12 @@ public void update(TermCommandReq termRequestDTO) { this.termDifficulty = termRequestDTO.getTermDifficulty(); } + // 쉬운용어풀이 저장 + @Column(columnDefinition = "TEXT") // 긴 문자열 저장 가능 + private String summary; + +// // 쉬운용어풀이 업데이트 +// public void updateSummary(String summary) { +// this.summary = summary; +// } } From bea624dce7099bb6120cb50366bfb1c7c5ee34fe Mon Sep 17 00:00:00 2001 From: whitenoise13 Date: Sun, 2 Feb 2025 04:32:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Feat::=20=EC=89=AC=EC=9A=B4=EC=9A=A9?= =?UTF-8?q?=EC=96=B4=ED=92=80=EC=9D=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD(=EC=89=AC=EC=9A=B4=EC=9A=A9=EC=96=B4=ED=92=80?= =?UTF-8?q?=EC=9D=B4=EB=A5=BC=20=EC=B2=98=EC=9D=8C=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=ED=95=A0=20=EA=B2=BD=EC=9A=B0=20=EA=B8=B0=EC=A1=B4=EC=9D=98=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=EB=8C=80=EB=A1=9C=20=EC=9A=94=EC=95=BD?= =?UTF-8?q?=ED=95=9C=20=ED=9B=84=20DB=EC=97=90=20=EC=A0=80=EC=9E=A5,=20?= =?UTF-8?q?=EC=9D=B4=ED=9B=84=EC=97=90=EB=8A=94=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EB=90=9C=20=EB=82=B4=EC=9A=A9=EC=9D=84=20=EC=A0=9C=EA=B3=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../termary/service/TermaryService.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/Minari/cheongForDo/domain/termary/service/TermaryService.java b/src/main/java/Minari/cheongForDo/domain/termary/service/TermaryService.java index d500367..34c88b7 100644 --- a/src/main/java/Minari/cheongForDo/domain/termary/service/TermaryService.java +++ b/src/main/java/Minari/cheongForDo/domain/termary/service/TermaryService.java @@ -30,14 +30,30 @@ public class TermaryService { public String summarizeTerm(TermaryRequestDTO termaryRequestDTO) { String termNm = termaryRequestDTO.getTermNm(); - Term term = termRepository.findByTermNm(termNm); if (term == null) { throw new IllegalArgumentException("해당 용어를 찾을 수 없습니다: " + termNm); } + // 이미 요약된 내용이 있으면 그대로 반환 + if (term.getSummary() != null && !term.getSummary().isEmpty()) { + return term.getSummary(); + } + + // 요약이 없으면 OpenAI API 호출 String termExplain = term.getTermExplain(); - String prompt = "다음 경제 용어에 대해 설명해 주세요. 설명은 마크다운 형식으로 작성해 주시고, 각 항목은 제목과 내용으로 나누어 주세요.\n\n" + + String prompt = generatePrompt(termExplain); + String summary = callOpenAiApi(prompt); + + // DB에 저장 + term.setSummary(summary); + termRepository.save(term); + + return summary; + } + + private String generatePrompt(String termExplain) { + return "다음 경제 용어에 대해 설명해 주세요. 설명은 마크다운 형식으로 작성해 주시고, 각 항목은 제목과 내용으로 나누어 주세요.\n\n" + "용어: " + termExplain + "\n\n" + "설명할 때는 다음과 같은 포맷을 따라주세요:\n" + "- **정의**: 용어의 기본 정의\n" + @@ -45,8 +61,6 @@ public String summarizeTerm(TermaryRequestDTO termaryRequestDTO) { "- **실생활 예시**: 실생활에서의 예시\n" + "- **요약**: 용어의 간단한 요약\n\n" + "각 항목을 명확히 나누어 주시고, 설명은 청소년이 이해하기 쉬운 언어로 작성해 주세요."; - - return callOpenAiApi(prompt); } private String callOpenAiApi(String prompt) { @@ -64,7 +78,7 @@ private String callOpenAiApi(String prompt) { messages.add(message); request.put("messages", messages); -// request.put("max_tokens", 300); // 토큰에 제한을 둬야할 상황이 생길 떄 사용 +// request.put("max_tokens", 300); // 응답 길이 제한 HttpEntity> entity = new HttpEntity<>(request, headers);