From 7e3f7b9471cd838ce1489e1ffc18100f6ee1297b Mon Sep 17 00:00:00 2001 From: Minseo-Jo Date: Thu, 30 Oct 2025 18:44:27 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20AI=20=ED=9A=8C=EC=9D=98=EB=A1=9D=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20-=20decisions=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EB=B0=8F=20Todo=20assignee=20=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AgendaSummaryDTO에 decisions 필드 추가 (안건별 결정사항 배열) - ExtractedTodoDTO에 assignee 필드 추가 (담당자 정보) - EndMeetingService에서 AI 추출 담당자 정보 매핑 - Python AI 서비스 모델 및 프롬프트 업데이트 --- ai-python/app/models/transcript.py | 3 ++- ai-python/app/prompts/consolidate_prompt.py | 5 ++++- .../hgzero/meeting/biz/service/EndMeetingService.java | 2 +- .../hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java | 7 ++++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ai-python/app/models/transcript.py b/ai-python/app/models/transcript.py index 7863d6c..6ce27f8 100644 --- a/ai-python/app/models/transcript.py +++ b/ai-python/app/models/transcript.py @@ -20,8 +20,9 @@ class ConsolidateRequest(BaseModel): class ExtractedTodo(BaseModel): - """추출된 Todo (제목만)""" + """추출된 Todo""" title: str = Field(..., description="Todo 제목") + assignee: str = Field(default="", description="담당자 이름 (있는 경우에만)") class AgendaSummary(BaseModel): diff --git a/ai-python/app/prompts/consolidate_prompt.py b/ai-python/app/prompts/consolidate_prompt.py index bca7c30..c0e9529 100644 --- a/ai-python/app/prompts/consolidate_prompt.py +++ b/ai-python/app/prompts/consolidate_prompt.py @@ -120,7 +120,10 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s - summary_short: AI가 자동 생성한 1줄 요약 (사용자 수정 불가) - summary: 논의사항과 결정사항 모두 포함 (사용자 수정 가능) - decisions: summary의 결정사항 부분을 배열로 별도 추출 (대시보드 표시용) -7. **Todo 추출**: 제목만 추출 (담당자나 마감일 없어도 됨) +7. **Todo 추출**: + - 제목 필수, 담당자는 언급된 경우에만 추출 + - 자연스러운 표현에서 추출: "김대리가 ~하기로 함" → title: "~", assignee: "김대리" + - 담당자가 없으면 assignee: "" (빈 문자열) 8. **JSON만 출력**: 추가 설명 없이 JSON만 반환 이제 위 회의록들을 분석하여 통합 요약을 JSON 형식으로 생성해주세요. diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java index 1486b39..47b968e 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/biz/service/EndMeetingService.java @@ -264,7 +264,7 @@ public class EndMeetingService implements EndMeetingUseCase { .meetingId(meeting.getMeetingId()) .minutesId(meeting.getMeetingId()) // 실제로는 minutesId 필요 .title(todo.getTitle()) - .assigneeId("") // AI가 담당자를 추출하지 않으므로 빈 값 + .assigneeId(todo.getAssignee() != null ? todo.getAssignee() : "") // AI가 추출한 담당자 .status("PENDING") .build()); }) diff --git a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java index a293ff7..832b652 100644 --- a/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java +++ b/meeting/src/main/java/com/unicorn/hgzero/meeting/infra/dto/ai/ExtractedTodoDTO.java @@ -6,7 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; /** - * AI 추출 Todo DTO (제목만) + * AI 추출 Todo DTO */ @Getter @Builder @@ -18,4 +18,9 @@ public class ExtractedTodoDTO { * Todo 제목 */ private String title; + + /** + * 담당자 이름 (있는 경우에만) + */ + private String assignee; }