hgzero/ai-python/app/prompts/consolidate_prompt.py
Minseo-Jo e30aa5c116 feat: Meeting AI 통합 - 회의 종료 API 및 AI 회의록 요약 기능 구현
주요 변경사항:
- 회의 종료 API 구현 (POST /api/meetings/{meetingId}/end)
- AI 회의록 통합 요약 기능 구현
- Claude API 연동 및 프롬프트 최적화
- 안건별 요약, 키워드 추출, 결정사항 자동 정리

AI Service (Python):
- Claude 모델 설정: claude-sonnet-4-5-20250929
- 회의록 통합 프롬프트 개선
- AgendaSummary 모델 summary 필드 매핑 수정
- decisions 필드 추가 및 응답 구조 정리
- 입력 데이터 로깅 추가

Meeting Service (Java):
- EndMeetingService AI 통합 로직 구현
- MeetingAnalysis 엔티티 decisions 필드 추가
- AgendaSection opinions 필드 제거
- AI Service 포트 8086으로 설정
- DB 마이그레이션 스크립트 추가 (V7)

테스트 결과:
 회의 종료 API 정상 동작
 AI 응답 검증 (keywords, summary, decisions)
 안건별 요약 및 보류사항 추출
 처리 시간: ~11초, 토큰: ~2,600

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 14:46:41 +09:00

112 lines
4.1 KiB
Python

"""회의록 통합 요약 프롬프트"""
def get_consolidate_prompt(participant_minutes: list, agendas: list = None) -> str:
"""
참석자별 회의록을 통합하여 요약하는 프롬프트 생성
"""
# 참석자 회의록 결합
participants_content = "\n\n".join([
f"## {p['user_name']}님의 회의록:\n{p['content']}"
for p in participant_minutes
])
# 안건 정보 (있는 경우)
agendas_info = ""
if agendas:
agendas_info = "\n\n**사전 정의된 안건**:\n" + "\n".join([
f"{i+1}. {agenda}" for i, agenda in enumerate(agendas)
])
prompt = f"""당신은 회의록 작성 전문가입니다. 여러 참석자가 작성한 회의록을 통합하여 정확하고 체계적인 회의록을 생성해주세요.
# 입력 데이터
{participants_content}{agendas_info}
---
# 작업 지침
1. **주요 키워드 (keywords)**:
- 회의에서 자주 언급된 핵심 키워드 5-10개 추출
- 단어 또는 짧은 구문 (예: "신제품기획", "예산편성")
2. **통계 정보 (statistics)**:
- agendas_count: 안건 개수 (내용 기반 추정)
- todos_count: 추출된 Todo 총 개수
3. **회의 전체 결정사항 (decisions)**:
- 회의 전체에서 최종 결정된 사항들을 TEXT 형식으로 정리
- 안건별 결정사항을 모두 포함하여 회의록 수정 페이지에서 사용자가 확인 및 수정할 수 있도록 작성
- 형식: "**안건1 결정사항:**\n- 결정1\n- 결정2\n\n**안건2 결정사항:**\n- 결정3"
4. **안건별 요약 (agenda_summaries)**:
회의 내용을 분석하여 안건별로 구조화:
각 안건마다:
- **agenda_number**: 안건 번호 (1, 2, 3...)
- **agenda_title**: 안건 제목 (간결하게)
- **summary_short**: AI가 생성한 1줄 요약 (20자 이내, 사용자 수정 불가)
- **summary**: 안건별 회의록 요약 (논의사항과 결정사항을 포함한 전체 요약)
* 회의록 수정 페이지에서 사용자가 수정할 수 있는 입력 필드
* 형식: "**논의 사항:**\n- 논의내용1\n- 논의내용2\n\n**결정 사항:**\n- 결정1\n- 결정2"
* 사용자가 자유롭게 편집할 수 있도록 구조화된 텍스트로 작성
- **pending**: 보류 사항 배열 (추가 논의 필요 사항)
- **todos**: Todo 배열 (제목만, 담당자/마감일/우선순위 없음)
- title: Todo 제목만 추출 (예: "시장 조사 보고서 작성")
---
# 출력 형식
반드시 아래 JSON 형식으로만 응답하세요. 다른 텍스트는 포함하지 마세요.
```json
{{
"keywords": ["키워드1", "키워드2", "키워드3"],
"statistics": {{
"agendas_count": 숫자,
"todos_count": 숫자
}},
"decisions": "**안건1 결정사항:**\\n- 결정1\\n- 결정2\\n\\n**안건2 결정사항:**\\n- 결정3",
"agenda_summaries": [
{{
"agenda_number": 1,
"agenda_title": "안건 제목",
"summary_short": "짧은 요약 (20자 이내)",
"summary": "**논의 사항:**\\n- 논의내용1\\n- 논의내용2\\n\\n**결정 사항:**\\n- 결정1\\n- 결정2",
"pending": ["보류사항"],
"todos": [
{{
"title": "Todo 제목"
}}
]
}}
]
}}
```
---
# 중요 규칙
1. **정확성**: 참석자 회의록에 명시된 내용만 사용
2. **객관성**: 추측이나 가정 없이 사실만 기록
3. **완전성**: 모든 필드를 빠짐없이 작성
4. **구조화**: 안건별로 명확히 분리
5. **결정사항 추출**:
- 회의 전체 결정사항(decisions)은 모든 안건의 결정사항을 포함
- 안건별 summary에도 결정사항을 포함하여 사용자가 수정 가능하도록 작성
6. **summary 작성**:
- summary_short: AI가 자동 생성한 1줄 요약 (사용자 수정 불가)
- summary: 논의사항과 결정사항을 포함한 전체 요약 (사용자 수정 가능)
7. **Todo 추출**: 제목만 추출 (담당자나 마감일 없어도 됨)
8. **JSON만 출력**: 추가 설명 없이 JSON만 반환
이제 위 회의록들을 분석하여 통합 요약을 JSON 형식으로 생성해주세요.
"""
return prompt