mirror of
https://github.com/hwanny1128/HGZero.git
synced 2026-06-13 03:39:10 +00:00
섹션 AI 요약 재생성으로 변경 (프로토타입 반영)
- 프롬프트 기반 회의록 개선 → 섹션 AI 요약 재생성으로 변경
- UFR-AI-030 → UFR-AI-035로 유저스토리 교체
- API 엔드포인트: POST /sections/{sectionId}/regenerate-summary
- 내부 시퀀스, 외부 시퀀스, API 설계서, 유저스토리 일관성 확보
- 프로토타입의 "AI 재생성" 버튼 기능과 정확히 매칭
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,106 +1,74 @@
|
||||
@startuml
|
||||
!theme mono
|
||||
|
||||
title AI Service 내부 시퀀스 - 회의록개선
|
||||
title AI Service 내부 시퀀스 - 섹션AI요약재생성
|
||||
|
||||
participant "ImproveController" as Controller
|
||||
participant "ImproveService" as Service
|
||||
participant "SectionController" as Controller
|
||||
participant "SectionSummaryService" as Service
|
||||
participant "LLMClient" as LLM
|
||||
participant "PromptTemplateService" as Template
|
||||
participant "ImproveRepository" as Repo
|
||||
participant "SectionRepository" as Repo
|
||||
database "Azure OpenAI<<E>>" as OpenAI
|
||||
database "PostgreSQL<<E>>" as DB
|
||||
|
||||
== 회의록 개선 요청 수신 ==
|
||||
== 섹션 AI 요약 재생성 요청 수신 ==
|
||||
|
||||
note over Controller
|
||||
API 요청:
|
||||
POST /api/ai/transcripts/{meetingId}/improve
|
||||
POST /api/ai/sections/{sectionId}/regenerate-summary
|
||||
Body: {
|
||||
"promptType": "1PAGE_SUMMARY",
|
||||
"customPrompt": "optional"
|
||||
"sectionContent": "**논의 사항:**\n- AI 기반...",
|
||||
"meetingId": "550e8400-..."
|
||||
}
|
||||
end note
|
||||
|
||||
Controller -> Service: improveTranscript(meetingId, promptType, customPrompt)
|
||||
Controller -> Service: regenerateSummary(sectionId, sectionContent, meetingId)
|
||||
activate Service
|
||||
|
||||
== 원본 회의록 조회 ==
|
||||
== 회의 맥락 조회 (선택적) ==
|
||||
|
||||
Service -> Repo: getOriginalTranscript(meetingId)
|
||||
Service -> Repo: getMeetingContext(meetingId)
|
||||
activate Repo
|
||||
|
||||
Repo -> DB: 원본 회의록 조회
|
||||
Repo -> DB: 회의 정보 조회\n- 회의 제목\n- 참석자\n- 안건
|
||||
activate DB
|
||||
|
||||
DB --> Repo: 원본 회의록 내용
|
||||
DB --> Repo: 회의 맥락 정보
|
||||
deactivate DB
|
||||
|
||||
Repo --> Service: originalContent, version
|
||||
Repo --> Service: meetingContext
|
||||
deactivate Repo
|
||||
|
||||
== 프롬프트 템플릿 선택 ==
|
||||
note right of Service
|
||||
회의 맥락을 통해
|
||||
더 정확한 요약 생성
|
||||
|
||||
Service -> Template: getPromptTemplate(promptType)
|
||||
activate Template
|
||||
|
||||
Template -> Template: 프롬프트 유형별 템플릿 선택
|
||||
note right
|
||||
지원 프롬프트 유형:
|
||||
|
||||
1. 1PAGE_SUMMARY
|
||||
- A4 1장 분량 요약
|
||||
- 핵심 내용만 압축
|
||||
|
||||
2. CORE_SUMMARY
|
||||
- 3-5개 핵심 포인트
|
||||
- 불릿 포인트 형식
|
||||
|
||||
3. DETAILED_REPORT
|
||||
- 시간순 상세 기록
|
||||
- 타임스탬프 포함
|
||||
|
||||
4. DECISION_FOCUSED
|
||||
- 의사결정 중심
|
||||
- 결정 사항과 근거
|
||||
|
||||
5. ACTION_FOCUSED
|
||||
- 액션 아이템 중심
|
||||
- Todo와 담당자 강조
|
||||
|
||||
6. EXECUTIVE_REPORT
|
||||
- 경영진 보고용
|
||||
- 간결하고 임팩트 있게
|
||||
|
||||
7. CUSTOM
|
||||
- 사용자 정의 프롬프트
|
||||
예: "신규 프로젝트 킥오프"
|
||||
→ 기술/일정 중심 요약
|
||||
end note
|
||||
|
||||
Template --> Service: promptTemplate
|
||||
deactivate Template
|
||||
|
||||
== 프롬프트 생성 ==
|
||||
|
||||
Service -> Service: 최종 프롬프트 구성
|
||||
Service -> Service: 요약 프롬프트 구성
|
||||
note right
|
||||
시스템 프롬프트:
|
||||
- 역할: 회의록 개선 전문가
|
||||
- 지시사항: {promptTemplate}
|
||||
- 역할: 회의록 섹션 요약 전문가
|
||||
- 목표: 핵심 내용을 2-3문장으로 압축
|
||||
- 스타일: 명확하고 간결한 문체
|
||||
|
||||
사용자 프롬프트:
|
||||
- 원본 회의록: {originalContent}
|
||||
- 개선 요구사항: {promptType}
|
||||
- 추가 지시사항: {customPrompt}
|
||||
- 회의 맥락: {meetingContext}
|
||||
- 섹션 내용: {sectionContent}
|
||||
|
||||
출력 형식 지정:
|
||||
- 구조화된 마크다운
|
||||
- 적절한 헤딩과 섹션
|
||||
- 가독성 최적화
|
||||
요구사항:
|
||||
- 2-3문장으로 요약
|
||||
- 논의사항과 결정사항 구분
|
||||
- 핵심 키워드 포함
|
||||
- 불필요한 세부사항 제외
|
||||
end note
|
||||
|
||||
== LLM 기반 회의록 재구성 ==
|
||||
== LLM 기반 요약 생성 ==
|
||||
|
||||
Service -> LLM: regenerateTranscript(prompt, originalContent)
|
||||
Service -> LLM: generateSummary(prompt, sectionContent)
|
||||
activate LLM
|
||||
|
||||
LLM -> OpenAI: POST /chat/completions
|
||||
@@ -109,80 +77,55 @@ note right
|
||||
요청 파라미터:
|
||||
- model: gpt-4o
|
||||
- temperature: 0.3
|
||||
- max_tokens: 3000
|
||||
- max_tokens: 200
|
||||
- messages: [system, user]
|
||||
end note
|
||||
|
||||
OpenAI -> OpenAI: 회의록 재구성
|
||||
OpenAI -> OpenAI: 섹션 내용 분석 및 요약
|
||||
note right
|
||||
처리 단계:
|
||||
1. 원본 분석
|
||||
2. 프롬프트 의도 파악
|
||||
3. 중요도 기반 필터링
|
||||
4. 형식에 맞춰 재배치
|
||||
5. 불필요한 내용 제거
|
||||
6. 스타일 조정
|
||||
- 문체 변환
|
||||
- 길이 조정
|
||||
7. 구조화
|
||||
1. 섹션 내용 파싱
|
||||
- 논의사항 추출
|
||||
- 결정사항 추출
|
||||
- 보류사항 추출
|
||||
|
||||
2. 핵심 내용 식별
|
||||
- 중요도 평가
|
||||
- 키워드 추출
|
||||
|
||||
3. 요약 생성
|
||||
- 2-3문장으로 압축
|
||||
- 논의→결정 흐름 반영
|
||||
- 명확한 문장 구성
|
||||
|
||||
4. 품질 검증
|
||||
- 길이 확인 (150자 이내)
|
||||
- 핵심 누락 여부 확인
|
||||
end note
|
||||
|
||||
OpenAI --> LLM: 개선된 회의록
|
||||
OpenAI --> LLM: 생성된 AI 요약
|
||||
deactivate OpenAI
|
||||
|
||||
LLM --> Service: improvedContent
|
||||
LLM --> Service: summaryText
|
||||
deactivate LLM
|
||||
|
||||
== 개선된 회의록 저장 ==
|
||||
== 생성된 요약 저장 (선택적) ==
|
||||
|
||||
Service -> Service: 새 버전 생성
|
||||
note right
|
||||
버전 정보:
|
||||
- base_version: 원본 버전 번호
|
||||
- improvement_type: {promptType}
|
||||
- version: 새 버전 번호
|
||||
end note
|
||||
|
||||
Service -> Repo: saveImprovedTranscript(meetingId, improvedContent, metadata)
|
||||
Service -> Repo: saveSectionSummary(sectionId, summaryText)
|
||||
activate Repo
|
||||
|
||||
Repo -> DB: 개선된 회의록 저장
|
||||
Repo -> DB: AI 요약 저장
|
||||
activate DB
|
||||
note right
|
||||
저장 데이터:
|
||||
- meeting_id
|
||||
- content (개선된 내용)
|
||||
- version (새 버전)
|
||||
- base_version (원본 버전)
|
||||
- improvement_type
|
||||
- prompt_type
|
||||
- custom_prompt
|
||||
- created_at
|
||||
- status: IMPROVED
|
||||
- section_id
|
||||
- summary_text
|
||||
- generated_at
|
||||
- model: "gpt-4o"
|
||||
- token_usage
|
||||
end note
|
||||
|
||||
DB --> Repo: newTranscriptId
|
||||
deactivate DB
|
||||
|
||||
Repo --> Service: transcriptId, version
|
||||
deactivate Repo
|
||||
|
||||
== 버전 연결 저장 ==
|
||||
|
||||
Service -> Repo: linkVersions(originalId, improvedId)
|
||||
activate Repo
|
||||
|
||||
Repo -> DB: 버전 연결 정보 저장
|
||||
activate DB
|
||||
note right
|
||||
버전 연결 정보:
|
||||
- original_transcript_id
|
||||
- improved_transcript_id
|
||||
- improvement_type
|
||||
- created_at
|
||||
end note
|
||||
|
||||
DB --> Repo: 연결 완료
|
||||
DB --> Repo: 저장 완료
|
||||
deactivate DB
|
||||
|
||||
Repo --> Service: 완료
|
||||
@@ -193,32 +136,32 @@ deactivate Repo
|
||||
Service -> Service: 응답 데이터 구성
|
||||
note right
|
||||
응답 데이터:
|
||||
- transcriptId (새 버전)
|
||||
- version
|
||||
- baseVersion
|
||||
- improvementType
|
||||
- content (개선된 내용)
|
||||
- originalLink
|
||||
- createdAt
|
||||
- summary: "AI 기반 회의록 자동화..."
|
||||
- generatedAt: "2025-01-23T11:00:00Z"
|
||||
end note
|
||||
|
||||
Service --> Controller: 개선 완료 응답
|
||||
Service --> Controller: 요약 생성 완료 응답
|
||||
deactivate Service
|
||||
|
||||
Controller --> Controller: 200 OK 응답 반환
|
||||
|
||||
note over Controller, DB
|
||||
처리 시간:
|
||||
- 원본 조회: 100-200ms
|
||||
- 템플릿 선택: 10-50ms
|
||||
- LLM 재구성: 4-8초
|
||||
- 저장 처리: 200-300ms
|
||||
총 처리 시간: 약 5-9초
|
||||
- 회의 맥락 조회: 50-100ms
|
||||
- 프롬프트 구성: 10-20ms
|
||||
- LLM 요약 생성: 2-4초
|
||||
- 저장 처리: 50-100ms
|
||||
총 처리 시간: 약 2-5초
|
||||
|
||||
정책:
|
||||
- 원본 회의록은 항상 보존
|
||||
- 여러 버전 동시 생성 가능
|
||||
- 버전 간 비교 기능 제공
|
||||
- 섹션 내용이 변경되면 요약도 재생성
|
||||
- 이전 요약은 이력으로 보관
|
||||
- 사용자는 생성된 요약을 수정 가능
|
||||
- 수정된 요약은 AI 재생성 가능
|
||||
|
||||
처리량:
|
||||
- max_tokens: 200 (요약은 짧음)
|
||||
- 비용 효율적 (전체 회의록 대비)
|
||||
end note
|
||||
|
||||
@enduml
|
||||
|
||||
@@ -141,4 +141,39 @@ end
|
||||
|
||||
deactivate Frontend
|
||||
|
||||
== 섹션 AI 요약 재생성 (선택적) ==
|
||||
|
||||
User -> Frontend: "AI 재생성" 버튼 클릭\n(특정 섹션)
|
||||
activate Frontend
|
||||
|
||||
Frontend -> Frontend: 로딩 상태 표시\n"AI 요약을 생성 중입니다..."
|
||||
|
||||
Frontend -> Gateway: POST /api/ai/sections/{sectionId}/regenerate-summary\n{\n "sectionContent": "**논의 사항:**\n- AI 기반...",\n "meetingId": "..."\n}
|
||||
activate Gateway
|
||||
|
||||
Gateway -> AI: POST /sections/{sectionId}/regenerate-summary
|
||||
activate AI
|
||||
|
||||
AI -> AI: 섹션 내용 분석 및 요약 생성\n- 회의 맥락 조회\n- LLM 기반 요약 (2-3문장)\n- 처리 시간: 2-5초
|
||||
|
||||
AI --> Gateway: 생성된 AI 요약\n{\n "summary": "AI 기반 회의록...",\n "generatedAt": "..."\n}
|
||||
deactivate AI
|
||||
|
||||
Gateway --> Frontend: 200 OK\nAI 요약
|
||||
deactivate Gateway
|
||||
|
||||
Frontend -> Frontend: AI 요약 영역 업데이트\n- 생성된 요약 표시\n- "저장됨" 표시
|
||||
|
||||
Frontend --> User: AI 요약 재생성 완료
|
||||
deactivate Frontend
|
||||
|
||||
note over User, AI
|
||||
AI 재생성 특징:
|
||||
- 각 섹션별 독립 처리
|
||||
- 사용자가 수정한 내용 기반
|
||||
- 프롬프트 입력 없이 자동 생성
|
||||
- 생성된 요약은 사용자가 다시 수정 가능
|
||||
- 처리 시간 2-5초 (빠름)
|
||||
end note
|
||||
|
||||
@enduml
|
||||
|
||||
Reference in New Issue
Block a user