hgzero/design/backend/sequence/inner/ai-회의록개선.puml
ondal 715add4dbc 외부/내부 시퀀스 설계 일관성 개선 및 표준화
주요 변경사항:

[Critical]
- API 엔드포인트 통일: POST /api/minutes/{minutesId}/finalize
- 이벤트 이름 표준화: MinutesFinalized

[Warning]
- API Gateway 라우팅 규칙 문서화 (외부 시퀀스 7개 파일)
- 대시보드 API 경로 통일: GET /api/dashboard
- AI 제안 병합 프로세스 상세 문서화
- 회의록 확정 검증 로직 5단계 상세화

[Minor]
- Redis 캐시 TTL 명시 (7개 파일, TTL 정책 표준화)
- 대시보드 페이지네이션 파라미터 추가
- 에러 응답 포맷 표준화 (14개 에러 응답)

총 31개 파일 수정, 34건의 개선 사항 적용

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 09:48:06 +09:00

225 lines
4.5 KiB
Plaintext

@startuml
!theme mono
title AI Service 내부 시퀀스 - 회의록개선
participant "ImproveController" as Controller
participant "ImproveService" as Service
participant "LLMClient" as LLM
participant "PromptTemplateService" as Template
participant "ImproveRepository" as Repo
database "Azure OpenAI<<E>>" as OpenAI
database "PostgreSQL<<E>>" as DB
== 회의록 개선 요청 수신 ==
note over Controller
API 요청:
POST /api/ai/transcripts/{meetingId}/improve
Body: {
"promptType": "1PAGE_SUMMARY",
"customPrompt": "optional"
}
end note
Controller -> Service: improveTranscript(meetingId, promptType, customPrompt)
activate Service
== 원본 회의록 조회 ==
Service -> Repo: getOriginalTranscript(meetingId)
activate Repo
Repo -> DB: 원본 회의록 조회
activate DB
DB --> Repo: 원본 회의록 내용
deactivate DB
Repo --> Service: originalContent, version
deactivate Repo
== 프롬프트 템플릿 선택 ==
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: 최종 프롬프트 구성
note right
시스템 프롬프트:
- 역할: 회의록 개선 전문가
- 지시사항: {promptTemplate}
사용자 프롬프트:
- 원본 회의록: {originalContent}
- 개선 요구사항: {promptType}
- 추가 지시사항: {customPrompt}
출력 형식 지정:
- 구조화된 마크다운
- 적절한 헤딩과 섹션
- 가독성 최적화
end note
== LLM 기반 회의록 재구성 ==
Service -> LLM: regenerateTranscript(prompt, originalContent)
activate LLM
LLM -> OpenAI: POST /chat/completions
activate OpenAI
note right
요청 파라미터:
- model: gpt-4o
- temperature: 0.3
- max_tokens: 3000
- messages: [system, user]
end note
OpenAI -> OpenAI: 회의록 재구성
note right
처리 단계:
1. 원본 분석
2. 프롬프트 의도 파악
3. 중요도 기반 필터링
4. 형식에 맞춰 재배치
5. 불필요한 내용 제거
6. 스타일 조정
- 문체 변환
- 길이 조정
7. 구조화
end note
OpenAI --> LLM: 개선된 회의록
deactivate OpenAI
LLM --> Service: improvedContent
deactivate LLM
== 개선된 회의록 저장 ==
Service -> Service: 새 버전 생성
note right
버전 정보:
- base_version: 원본 버전 번호
- improvement_type: {promptType}
- version: 새 버전 번호
end note
Service -> Repo: saveImprovedTranscript(meetingId, improvedContent, metadata)
activate Repo
Repo -> DB: 개선된 회의록 저장
activate DB
note right
저장 데이터:
- meeting_id
- content (개선된 내용)
- version (새 버전)
- base_version (원본 버전)
- improvement_type
- prompt_type
- custom_prompt
- created_at
- status: IMPROVED
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: 연결 완료
deactivate DB
Repo --> Service: 완료
deactivate Repo
== 응답 반환 ==
Service -> Service: 응답 데이터 구성
note right
응답 데이터:
- transcriptId (새 버전)
- version
- baseVersion
- improvementType
- content (개선된 내용)
- originalLink
- createdAt
end note
Service --> Controller: 개선 완료 응답
deactivate Service
Controller --> Controller: 200 OK 응답 반환
note over Controller, DB
처리 시간:
- 원본 조회: 100-200ms
- 템플릿 선택: 10-50ms
- LLM 재구성: 4-8초
- 저장 처리: 200-300ms
총 처리 시간: 약 5-9초
정책:
- 원본 회의록은 항상 보존
- 여러 버전 동시 생성 가능
- 버전 간 비교 기능 제공
end note
@enduml