mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-12 22:59:10 +00:00
Feat: AI 서비스 통합 및 회의록 기능 개선
- AI 서비스와 Meeting 서비스 통합 개선 - AgendaSummaryDTO에 decisions 필드 추가 (안건별 결정사항 배열) - EndMeetingService에서 AI 서비스 타임아웃 처리 개선 - AIServiceClient에 상세한 에러 로깅 추가 - 회의록 consolidate 프롬프트 개선 - Todo 추출 로직 강화 (자연스러운 표현 인식) - 안건별 decisions 필드 추가 (대시보드 표시용) - 담당자 패턴 인식 개선 - Kubernetes 배포 설정 개선 - meeting-service.yaml에 AI_SERVICE_URL 환경변수 추가 - AI_SERVICE_TIMEOUT 설정 추가 - 데이터베이스 관리 SQL 스크립트 추가 - check-agenda-sections.sql: 안건 섹션 확인 - cleanup-test-data.sql: 테스트 데이터 정리 - insert-test-data-final.sql: 최종 테스트 데이터 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,7 @@ class AgendaSummary(BaseModel):
|
||||
agenda_title: str = Field(..., description="안건 제목")
|
||||
summary_short: str = Field(..., description="AI 생성 짧은 요약 (1줄, 20자 이내)")
|
||||
summary: str = Field(..., description="안건별 회의록 요약 (논의사항+결정사항, 사용자 수정 가능)")
|
||||
decisions: List[str] = Field(default_factory=list, description="안건별 결정사항 배열 (대시보드 표시용)")
|
||||
pending: List[str] = Field(default_factory=list, description="보류 사항")
|
||||
todos: List[ExtractedTodo] = Field(default_factory=list, description="Todo 목록 (제목만)")
|
||||
|
||||
|
||||
@@ -49,13 +49,23 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s
|
||||
- **agenda_number**: 안건 번호 (1, 2, 3...)
|
||||
- **agenda_title**: 안건 제목 (간결하게)
|
||||
- **summary_short**: AI가 생성한 1줄 요약 (20자 이내, 사용자 수정 불가)
|
||||
- **summary**: 안건별 회의록 요약 (논의사항과 결정사항을 포함한 전체 요약)
|
||||
- **summary**: 안건별 회의록 요약 (논의사항과 결정사항 모두 포함)
|
||||
* 회의록 수정 페이지에서 사용자가 수정할 수 있는 입력 필드
|
||||
* 형식: "**논의 사항:**\n- 논의내용1\n- 논의내용2\n\n**결정 사항:**\n- 결정1\n- 결정2"
|
||||
* 사용자가 자유롭게 편집할 수 있도록 구조화된 텍스트로 작성
|
||||
- **decisions**: 안건별 결정사항 배열 (대시보드 표시용, summary의 결정사항 부분을 배열로 추출)
|
||||
* 형식: ["결정사항1", "결정사항2", "결정사항3"]
|
||||
* 회의에서 최종 결정된 사항만 포함
|
||||
- **pending**: 보류 사항 배열 (추가 논의 필요 사항)
|
||||
- **todos**: Todo 배열 (제목만, 담당자/마감일/우선순위 없음)
|
||||
- title: Todo 제목만 추출 (예: "시장 조사 보고서 작성")
|
||||
- **todos**: Todo 배열 (제목과 담당자 추출)
|
||||
- title: Todo 제목 (예: "시장 조사 보고서 작성")
|
||||
- assignee: 담당자 이름 (있는 경우에만, 예: "김대리", "박과장")
|
||||
|
||||
**Todo 추출 가이드:**
|
||||
- 자연스러운 표현도 인식: "김대리가 ~하기로 함", "박과장은 ~준비합니다", "이차장님께서 ~하시기로 하셨습니다"
|
||||
- 실행 동사 패턴: ~하기로, ~준비, ~작성, ~제출, ~완료, ~진행, ~검토, ~분석
|
||||
- 담당자 패턴: "OO님", "OO이/가", "OO은/는", "OO께서"
|
||||
- 기한 표현: "다음주", "이번주", "~까지", "~일까지", "~월까지"
|
||||
|
||||
---
|
||||
|
||||
@@ -77,10 +87,16 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s
|
||||
"agenda_title": "안건 제목",
|
||||
"summary_short": "짧은 요약 (20자 이내)",
|
||||
"summary": "**논의 사항:**\\n- 논의내용1\\n- 논의내용2\\n\\n**결정 사항:**\\n- 결정1\\n- 결정2",
|
||||
"decisions": ["결정사항1", "결정사항2"],
|
||||
"pending": ["보류사항"],
|
||||
"todos": [
|
||||
{{
|
||||
"title": "Todo 제목"
|
||||
"title": "인플루언서 리스트 작성",
|
||||
"assignee": "김대리"
|
||||
}},
|
||||
{{
|
||||
"title": "캠페인 콘텐츠 기획안 초안 작성",
|
||||
"assignee": "박과장"
|
||||
}}
|
||||
]
|
||||
}}
|
||||
@@ -97,11 +113,13 @@ def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> s
|
||||
3. **완전성**: 모든 필드를 빠짐없이 작성
|
||||
4. **구조화**: 안건별로 명확히 분리
|
||||
5. **결정사항 추출**:
|
||||
- 회의 전체 결정사항(decisions)은 모든 안건의 결정사항을 포함
|
||||
- 안건별 summary에도 결정사항을 포함하여 사용자가 수정 가능하도록 작성
|
||||
- 회의 전체 결정사항(decisions): 모든 안건의 결정사항을 포함 (TEXT 형식)
|
||||
- 안건별 결정사항(agenda_summaries[].decisions): 각 안건의 결정사항을 배열로 추출
|
||||
- 결정사항이 명확하게 언급된 경우에만 포함
|
||||
6. **summary 작성**:
|
||||
- summary_short: AI가 자동 생성한 1줄 요약 (사용자 수정 불가)
|
||||
- summary: 논의사항과 결정사항을 포함한 전체 요약 (사용자 수정 가능)
|
||||
- summary: 논의사항과 결정사항 모두 포함 (사용자 수정 가능)
|
||||
- decisions: summary의 결정사항 부분을 배열로 별도 추출 (대시보드 표시용)
|
||||
7. **Todo 추출**: 제목만 추출 (담당자나 마감일 없어도 됨)
|
||||
8. **JSON만 출력**: 추가 설명 없이 JSON만 반환
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@ class TranscriptService:
|
||||
agenda_title=agenda_data.get("agenda_title", ""),
|
||||
summary_short=agenda_data.get("summary_short", ""),
|
||||
summary=agenda_data.get("summary", ""),
|
||||
decisions=agenda_data.get("decisions", []),
|
||||
pending=agenda_data.get("pending", []),
|
||||
todos=todos
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user